2017-03-29 22 views
1

文字列をUTFからラテン文字にグルーヴィーで変換したい(URL目的)。 いくつかのライブラリをチェックしましたが、一部は動作していませんでした。groovy transliteration任意の言語をラテン語に翻訳

は現在、私はこのコードで働いている:

@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日本語、中国語、ドイツ語

答えて

1

@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が返されるという区別を示しました。

ICDR4Jは、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を出力します。

あなたの目的に合っていると思うならば、キリル文字のすべてのルールを最初から定義することもできます。

+1

問題は、一部の文字が間違って次のように字句が間違っていることです。たとえば、шは - sh、ч-ch –

+0

のようにする必要があります。 – Shervin

+1

それは仕事です:)ありがとう –