groovy将任何语言音译为拉丁语

groovy将任何语言音译为拉丁语,groovy,transliteration,Groovy,Transliteration,我想在groovy中将文本字符串UTF音译为拉丁字符(用于URL)。 我检查了几个LIB,其中一些不工作 目前我正在使用以下代码: @Grab(group='com.ibm.icu', module='icu4j', version='58.2') import com.ibm.icu.text.Transliterator; String cyrilic = "ш щ ч ц х ф г я "; String id = "Bulgarian-Latin/BGN"; String

我想在groovy中将文本字符串UTF音译为拉丁字符(用于URL)。 我检查了几个LIB,其中一些不工作

目前我正在使用以下代码:

@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);
上面的代码片段返回
ŧčs
š
在拉丁文中的音译结果确实是一个错误。这同样适用于
č
。我在这里提供了
c
,以显示为它返回的
s
的区别

ICU4J所使用的西里尔拉丁文音译规则记录在CLDR项目中(例如,参见规则)

要获得想要的输出,您可以使用自己的自定义规则进行另一次转换:

@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


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

问题是有些字符的音译错误,如:чччччччччччччччччч1095。例如ч应该是-sh,ч-ch