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 に答える
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 に答える