使用 icu4j 将德语变音符号音译到他们的 DIN 5007-2 替代品中
Transliterate German umlauts using icu4j into their DIN 5007-2 alternatives
我希望能够音译德语变音字符
Ü ü ö ä Ä Ö
进入他们的 DIN 5007-2 替代方案
ä → ae
ö → oe
ü → ue
Ä → Ae
Ö → Oe
Ü → Ue
ß → ss (or SZ)
比如在这种情况下:
他们在第 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 等价物?
您可以使用规则字符串创建一个,例如:
ä → ae;
ö → oe;
ü → ue;
Ä → Ae;
Ö → Oe;
Ü → Ue;
ß → ss;
您可以在以下位置看到:
但是,您可能需要稍微复杂一些的方法,因为您的规则会将 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
对此进行更新,因为现在有一个使用“de-ASCII”的简单解决方案:
Transliterator transliterator = Transliterator.getInstance("de-ASCII");
String umlautReplaced = transliterator.transliterate(txt);
我希望能够音译德语变音字符
Ü ü ö ä Ä Ö
进入他们的 DIN 5007-2 替代方案
ä → ae
ö → oe
ü → ue
Ä → Ae
Ö → Oe
Ü → Ue
ß → ss (or SZ)
比如在这种情况下:
他们在第 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 等价物?
您可以使用规则字符串创建一个,例如:
ä → ae;
ö → oe;
ü → ue;
Ä → Ae;
Ö → Oe;
Ü → Ue;
ß → ss;
您可以在以下位置看到:
但是,您可能需要稍微复杂一些的方法,因为您的规则会将 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
对此进行更新,因为现在有一个使用“de-ASCII”的简单解决方案:
Transliterator transliterator = Transliterator.getInstance("de-ASCII");
String umlautReplaced = transliterator.transliterate(txt);