groovy 将任何语言音译为拉丁语
groovy transliteration any language to latin
我想在 groovy 中将文本字符串 UTF 音译为拉丁字符(用于 URL 目的)。
我检查了几个库,有些库正在工作,有些则没有。
目前我正在使用这段代码:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String cyrilic = "ш щ ч ц х ф г я ";
String id = "Bulgarian-Latin/BGN";
String id1 = "Latin";
String latin = Transliterator.getInstance(id).transform(cyrilic);
println "ok : " + latin;
String latin1 = Transliterator.getInstance(id1).transform(cyrilic);
println "nok : " + latin1;
结果
ok : sh sht ch ts kh f g ya
nok : š ŝ č c h f g â
问题是我无法检测到字符串的正确标识符。
我想为任意语言执行此操作:日语、中文、德语
使用Any
:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String anything = "ш щ ч ц х ф г я चंब्रिद्गॆ цамбридге كَمبرِدگِ かんぶりでげ";
String id = "Any-Latin";
println Transliterator.getInstance(id).transform(anything);
根据评论更新:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String anything = "ш ч с";
String id = "Cyrillic-Latin";
Transliterator.getInstance(id).transform(anything);
上面的代码片段returns š č s
; š
拉丁文字音译结果确实是 representation of the sound of "sh". The same is for č
which is "ch"。我在这里提供了 с
以显示为它返回 s
的区别。
ICU4J 进行 Cyrillic-Latin
音译的规则记录在 CLDR 项目中(例如,参见 Cyrillic to Latin 的规则)。
要获得您想要的输出,您可以使用自己的自定义规则进行另一次转换:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String anything = "ш ч с";
String id = "Cyrillic-Latin";
String myRules = "š>sh; č>ch";
Transliterator myTransliterator = Transliterator.createFromRules("myRules", myRules, Transliterator.FORWARD);
myTransliterator.transform(Transliterator.getInstance(id).transform(anything));
输出 sh ch s
.
如果您认为更适合您的目的,您也可以决定从头开始定义所有西里尔字母规则。
我想在 groovy 中将文本字符串 UTF 音译为拉丁字符(用于 URL 目的)。 我检查了几个库,有些库正在工作,有些则没有。
目前我正在使用这段代码:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String cyrilic = "ш щ ч ц х ф г я ";
String id = "Bulgarian-Latin/BGN";
String id1 = "Latin";
String latin = Transliterator.getInstance(id).transform(cyrilic);
println "ok : " + latin;
String latin1 = Transliterator.getInstance(id1).transform(cyrilic);
println "nok : " + latin1;
结果
ok : sh sht ch ts kh f g ya
nok : š ŝ č c h f g â
问题是我无法检测到字符串的正确标识符。
我想为任意语言执行此操作:日语、中文、德语
使用Any
:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String anything = "ш щ ч ц х ф г я चंब्रिद्गॆ цамбридге كَمبرِدگِ かんぶりでげ";
String id = "Any-Latin";
println Transliterator.getInstance(id).transform(anything);
根据评论更新:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String anything = "ш ч с";
String id = "Cyrillic-Latin";
Transliterator.getInstance(id).transform(anything);
上面的代码片段returns š č s
; š
拉丁文字音译结果确实是 representation of the sound of "sh". The same is for č
which is "ch"。我在这里提供了 с
以显示为它返回 s
的区别。
ICU4J 进行 Cyrillic-Latin
音译的规则记录在 CLDR 项目中(例如,参见 Cyrillic to Latin 的规则)。
要获得您想要的输出,您可以使用自己的自定义规则进行另一次转换:
@Grab(group='com.ibm.icu', module='icu4j', version='58.2')
import com.ibm.icu.text.Transliterator;
String anything = "ш ч с";
String id = "Cyrillic-Latin";
String myRules = "š>sh; č>ch";
Transliterator myTransliterator = Transliterator.createFromRules("myRules", myRules, Transliterator.FORWARD);
myTransliterator.transform(Transliterator.getInstance(id).transform(anything));
输出 sh ch s
.
如果您认为更适合您的目的,您也可以决定从头开始定义所有西里尔字母规则。