2017-03-29 2 views
1

Je voudrais faire de la translittération dans groovy d'une chaîne de texte UTF en caractères latins (pour l'URL). J'ai vérifié plusieurs bibliothèques et d'autres ne fonctionnent pas.translittération groovy aucune langue au latin

Je travaille actuellement avec ce code:

@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; 

Résultat

ok : sh sht ch ts kh f g ya 
nok : š ŝ č c h f g â 

Le problème est que je ne suis pas en mesure de détecter l'identificateur correct pour une chaîne.

Je veux le faire pour une langue arbitraire: japonais, chinois, allemand

Répondre

1

Utilisation 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); 

mise à jour par commentaire:

@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); 

L'extrait de code ci-dessus renvoie š č s; š en résultat de translittération de script latin est en effet un representation of the sound of "sh". La même chose vaut pour čwhich is "ch". J'ai fourni с ici pour montrer la distinction que s est retourné pour cela.

Les règles que ICU4J effectue avec la translittération Cyrillic-Latin avec sont enregistrées dans le projet CLDR (voir par exemple les règles pour Cyrillic to Latin).

Pour obtenir la sortie que vous souhaitez obtenir, vous pouvez faire une autre avec vos propres transform règles personnalisées:

@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)); 

qui délivre en sortie sh ch s.

Vous pouvez également décider de définir toutes vos règles pour le cyrillique du début si vous pensez que cela correspond mieux à votre objectif.

+1

le problème est que certains caractères sont translittérés à tort comme: ш щ ч ц х ф я - ε ŝ č c h f g. Par exemple ш devrait être - sh, ч - ch –

+0

Juste mis à jour la réponse pour vous. – Shervin

+1

C'est faire le travail :) merci –