2016-01-08 2 views
1

Je voudrais être en mesure de translittération caractères allemands umlautTranslittérer trémas allemands à l'aide icu4j dans leur DIN 5007-2 alternatives

Ü ü ö ä Ä Ö 

dans leurs DIN 5007-2 alternatives

ä → ae 
ö → oe 
ü → ue 
Ä → Ae 
Ö → Oe 
Ü → Ue 
ß → ss (or SZ) 

comme dans ce cas:

https://german.stackexchange.com/questions/4992/conversion-table-for-diacritics-e-g-%C3%BC-%E2%86%92-ue

L'utilisation la plus pertinente cas que j'ai trouvé: https://github.com/elastic/elasticsearch-analysis-icu/blob/master/src/test/java/org/elasticsearch/index/analysis/SimpleIcuCollationTokenFilterTests.java

où la ligne 208, ils font

String DIN5007_2_tailorings = 
      "& ae , a\u0308 & AE , A\u0308"+ 
      "& oe , o\u0308 & OE , O\u0308"+ 
      "& ue , u\u0308 & UE , u\u0308"; 

Je voudrais éviter de créer un code complexe Java, comme la définition tailorings personnalisés et tout ce qui est nécessaire. Je veux garder le code aussi simple que possible, car je dois utiliser ce code dans une application ColdFusion.

J'ai expérimenté un peu avec

var instance = Transliterator.getInstance("Latin-ASCII"); 

et

var instance = Transliterator.getInstance("any-NFD; [:nonspacing mark:] any-remove; any-NFC"); 

et leurs variantes, tous résultat dans:

writeDump(instance.transliterate('Häuser Bäume Höfe Gärten daß Ü ü ö ä Ä Ö ß ')); 

Hauser Baume Hofe Garten dass U u o a A O ss 

S'il est possible que je voudrais coller à l'aide Méthode .getInstance(). La question est de savoir quelle est la chaîne ID de la méthode .getInstance() qui entraînerait la translittération des trémas dans leurs équivalents DIN 5007-2?

+0

Désolé, qu'essayez-vous d'éviter avec la chose de la ligne 208? –

+1

Je voudrais éviter de créer des vêtements sur mesure. –

Répondre

1

Vous pouvez en créer un avec une chaîne de règles, comme:

ä → ae; 
ö → oe; 
ü → ue; 
Ä → Ae; 
Ö → Oe; 
Ü → Ue; 
ß → ss; 

Vous pouvez le voir sur:

http://unicode.org/cldr/utility/transform.jsp?a=%C3%A4+%E2%86%92+ae%3B%0D%0A%C3%B6+%E2%86%92+oe%3B%0D%0A%C3%BC+%E2%86%92+ue%3B%0D%0A%C3%84+%E2%86%92+Ae%3B%0D%0A%C3%96+%E2%86%92+Oe%3B%0D%0A%C3%9C+%E2%86%92+Ue%3B%0D%0A%C3%9F+%E2%86%92+ss%3B&b=H%C3%A4user+B%C3%A4ume+H%C3%B6fe+G%C3%A4rten+da%C3%9F+%C3%9C+%C3%BC+%C3%B6+%C3%A4+%C3%84+%C3%96+%C3%9F+

Cependant, vous voudrez peut-être une approche un peu plus sophistiquée, parce que votre les règles associeront HÄUSER à HAEUSER.

Les règles permettent le contexte, vous pouvez effectuer les opérations suivantes:

$beforeLower = [[:Mn:][:Me:]]* [:Lowercase:] ; 

ä → ae; 
ö → oe; 
ü → ue; 

Ä } $beforeLower → Ae; 
Ö } $beforeLower → Oe; 
Ü } $beforeLower → Ue; 

Ä → AE; 
Ö → OE; 
Ü → UE; 
ß → ss; 

donnant la

suivante

ä ö ü Uo Ät Öt út ß → ae oe ue AE OE UE Aet Oet Uet ss

+0

Les règles fonctionnent bien. Une idée de comment les combiner avec 'Transliterator latinAscii = Transliterator.getInstance (" Latin-ASCII ");'? –