设置土耳其语和英语语言环境:将土耳其语字符翻译为拉丁语等效

问题描述:

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

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中这可能吗?

如果您使用的是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"); 

创建一个有语言的相应小写字符串。

如果你只是想要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}", ""); 
} 

,我认为这就是问题所在:

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

试试这个:

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

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

+0

由于土耳其语的大写规则与国家无关,所以新的语言环境(“tr”)实际上已经足够了。 – jarnbjo

字符şs是不同的字符。更改区域设置无法帮助您将一个转换为另一个。你必须创建土耳其英文字符表,并自己做这个。我曾经为越南语言做过这方面的工作,有很多这样的人物。你必须处理5个中的4个,对吗?所以,祝你好运!

你可以这样做:

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

第一个参数是你的语言,而另一种是你的国家。