2016-01-08 19 views
1

Я хотел бы иметь возможность транслитерации немецких символов умлаутатранслитерация немецких умляутов с использованием ICU4J в их DIN 5007-2 альтернативы

Ü ü ö ä Ä Ö 

в их DIN 5007-2 альтернатив

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

как в этом случае:

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

Наиболее актуальный случай использования я нашел: https://github.com/elastic/elasticsearch-analysis-icu/blob/master/src/test/java/org/elasticsearch/index/analysis/SimpleIcuCollationTokenFilterTests.java

, где на линии 208 они

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

Я хотел бы, чтобы избежать создания сложного кода Java, как определение пользовательских tailorings и все, что требуется. Я хочу, чтобы код был как можно более простым, потому что я должен использовать этот код внутри приложения ColdFusion.

Я экспериментировал немного с

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

и

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

и их вариантов, все они результат:

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

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

Если это возможно, я хотел бы придерживаться использования .getInstance(). Вопрос: что такое строка ID для метода .getInstance(), которая приведет к транслитерации umlauts в их эквиваленты по DIN 5007-2?

+0

Извините, что вы пытаетесь избежать с помощью строки 208? –

+1

Я хотел бы избежать создания индивидуального пошива. –

ответ

1

Вы можете создать с помощью строки правил, как:

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

Вы можете увидеть это на:

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+

Однако, вы можете немного более сложный подход, потому что ваш правила будут отображать HÄUSER в HAEUSER.

правила позволяют контекста, так что вы можете сделать следующее:

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

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

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

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

дает следующую

ä ö иа Ö Ü аТ Ot Ut ß → ае ое и^AE OE UE AET ТОН Uet ss

+0

Правила работают хорошо. Любая идея, как объединить их с «Transliterator latinAscii = Transliterator.getInstance (« Latin-ASCII »);'? –