设置土耳其语和英语区域设置:将土耳其语字符翻译为拉丁语

时间:2012-10-22 11:56:50

标签: java android locale

我想在英语和土耳其语语言环境中将我的土耳其语字符串翻译为小写。我这样做:

String myString="YAŞAT BAYRI";
Locale trlocale= new Locale("tr-TR");
Locale enLocale = new Locale("en_US");

Log.v("mainlist", "en source: " +myString.toLowerCase(enLocale));
Log.v("mainlist", "tr source: " +myString.toLowerCase(trlocale));

输出结果为:

en source: yaşar bayri

tr source: yaşar bayri

但我希望得到这样的输出:

en source: yasar bayri

tr source: yaşar bayrı

这在Java中是否可行?

5 个答案:

答案 0 :(得分:35)

如果您使用Locale构造函数,则可以而且必须将语言,国家/地区和变体设置为单独的参数:

new Locale(language)
new Locale(language, country)
new Locale(language, country, variant)

因此,您的测试程序使用语言“tr-TR”和“en_US”创建语言环境。对于测试计划,您可以使用new Locale("tr", "TR")new Locale("en", "US")

如果您使用的是Java 1.7+,那么您还可以使用Locale.forLanguageTag解析语言标记:

String myString="YASAT BAYRI";
Locale trlocale= Locale.forLanguageTag("tr-TR");
Locale enLocale = Locale.forLanguageTag("en_US");

创建具有适当语言的小写字符的字符串。

答案 1 :(得分:7)

我认为这是问题所在:

Locale trlocale= new Locale("tr-TR");

请改为尝试:

Locale trlocale= new Locale("tr", "TR");

这是用于指定国家和语言的构造函数。

答案 2 :(得分:3)

如果您只想要ASCII格式的字符串,而不需要重音符号,则可能会出现以下情况。 首先,重音字符可以分为ASCII字符和组合变音符号(零宽度重音)。然后,只有正则表达式替换才能删除那些重音。

public static String withoutDiacritics(String s) {
    // Decompose any ş into s and combining-,.
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD);
    return s2.replaceAll("(?s)\\p{InCombiningDiacriticalMarks}", "");
}

答案 3 :(得分:3)

你可以这样做:

Locale trlocale= new Locale("tr","TR");

第一个参数是您的语言,而另一个参数是您所在的国家/地区。

答案 4 :(得分:1)

字符şs是不同的字符。更改区域设置无法帮助您将其翻译为另一个。你必须创建土耳其语到英文字符表并自己完成。我曾经为具有很多这样的角色的越南语做过这个。你必须处理4个中的4个,对吗?祝你好运!