21

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

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

4

5 回答 5

43

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

创建具有适合该语言的小写字母的字符串。

于 2012-10-22T12:07:03.723 回答
10

我认为这是问题所在:

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

试试这个:

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

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

于 2012-10-22T12:05:43.953 回答
5

你可以这样做:

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

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

于 2017-02-16T11:43:13.400 回答
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}", "");
}
于 2012-10-22T12:04:40.670 回答
1

字符şs是不同的字符。更改语言环境不能帮助您将一种语言翻译成另一种语言。您必须创建土耳其语到英语的字符表并自己执行此操作。我曾经为有很多这样的字符的越南语做过这个。您必须处理 5 个中的 4 个,对吗?所以,祝你好运!

于 2012-10-22T12:33:15.773 回答