groovy音译任何语言到拉丁语

时间:2017-03-29 09:01:15

标签: groovy transliteration

我想在文本字符串UTF的groovy中进行音译到拉丁字符(用于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 â 

问题是我无法检测到字符串的正确标识符。

我想用任意语言来做:日语,中文,德语

1 个答案:

答案 0 :(得分:1)

使用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);

上面的代码段返回š č s;拉丁文脚本音译结果š确实是representation of the sound of "sh"č 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

如果您认为更适合您的目的,您也可能决定从头开始为西里尔语定义所有规则。

相关问题