2

我希望能够音译德语变音符号

Ü ü ö ä Ä Ö

进入他们的DIN 5007-2替代品

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

就像在这种情况下:

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

我发现的最相关的用例是: https ://github.com/elastic/elasticsearch-analysis-icu/blob/master/src/test/java/org/elasticsearch/index/analysis/SimpleIcuCollat​​ionTokenFilterTests.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 代码,比如定义定制和所有需要的东西。我想让代码尽可能简单,因为我必须在 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() 方法。这里的问题是 .getInstance() 方法的 ID 字符串会导致将变音符号音译成它们的 DIN 5007-2 等效项?

4

2 回答 2

2

您可以使用规则字符串创建一个,例如:

ä → 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;

给出以下

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

于 2016-01-08T13:44:59.467 回答
1

对此进行更新,因为现在有一个使用“de-ASCII”的简单解决方案:

Transliterator transliterator = Transliterator.getInstance("de-ASCII");
String umlautReplaced = transliterator.transliterate(txt);
于 2021-04-20T06:37:42.547 回答