web-dev-qa-db-ja.com

トルコ語と英語のロケールの設定:トルコ語の文字をラテン語の対応する文字に翻訳する

トルコ語の文字列を英語とトルコ語の両方のロケールで小文字に翻訳したい。私はこれをやっています:

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で可能ですか?

20
Isa Kuru

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");
_

言語に適切な小文字の文字列を作成します。

36
nd.

これが問題だと思います:

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

代わりにこれを試してください:

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

これは、国と言語を指定するために使用するコンストラクタです。

7
Jon Skeet

アクセントなしのASCIIの文字列だけが必要な場合は、次のようにします。最初に、アクセント付き文字をASCII charと結合発音区別記号(ゼロ幅アクセント)に分割します。次に、正規表現の置換でこれらのアクセントのみを削除できます。

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
Joop Eggen

出来るよ:

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

最初のパラメーターはあなたの言語ですが、もう1つはあなたの国です。

3
ugur tafrali

キャラクターşsは異なる文字です。ロケールを変更しても、ある言語を別の言語に翻訳することはできません。トルコ語から英語への文字テーブルを作成し、これを自分で行う必要があります。私はかつて、そのような文字がたくさんあるベトナム語のためにこれを行いました。 5のうちの4を処理する必要がありますよね?とても幸運!

1
AlexR