トルコ語の文字列を英語とトルコ語の両方のロケールで小文字に翻訳したい。私はこれをやっています:
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");
_
言語に適切な小文字の文字列を作成します。
これが問題だと思います:
Locale trlocale= new Locale("tr-TR");
代わりにこれを試してください:
Locale trlocale= new Locale("tr", "TR");
これは、国と言語を指定するために使用するコンストラクタです。
アクセントなしの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}", "");
}
出来るよ:
Locale trlocale= new Locale("tr","TR");
最初のパラメーターはあなたの言語ですが、もう1つはあなたの国です。
キャラクターş
とs
は異なる文字です。ロケールを変更しても、ある言語を別の言語に翻訳することはできません。トルコ語から英語への文字テーブルを作成し、これを自分で行う必要があります。私はかつて、そのような文字がたくさんあるベトナム語のためにこれを行いました。 5のうちの4を処理する必要がありますよね?とても幸運!