2012-10-22 8 views
12

英語とトルコ語の両方のロケールでトルコ文字列を小文字に変換したいと考えています。私はこれをやっている:トルコ語と英語のロケールを設定する:トルコ語の文字をラテン語の同等語に翻訳する

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で、このことは可能ですか?

答えて

26

あなたが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"); 

は言語に適した下部ケースを持っている文字列を作成します。

3

アクセント記号なしの文字列をASCIIだけにしたい場合は、次のようにします。 最初にアクセント記号付きの文字をASCII文字と分音記号(ゼロ幅のアクセント記号)で分割することができます。正規表現の代わりにそれらのアクセントだけを削除することができます。

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

が代わりにこれを試してみてください:コンストラクタは、国と言語を指定するために使用するのです

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

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}", ""); 
} 
6

私は、これが問題だと思います。

+0

トルコ語の大文字の規則は国に依存しないため、新しいロケール( "tr")で十分です。 – jarnbjo

1

文字şsは異なる文字です。ロケールを変更することは、あなたが1つを別のものに翻訳するのを助けることはできません。あなたはトルコ語から英語の文字のテーブルを作成し、これを自分で行う必要があります。私は一度、このような文字をたくさん持っているベトナム語のためにこれをしました。あなたは5のうちの4つを扱わなければなりません、そうですか?とても幸運!

1

あなたはそれを行うことができます。もう一つは、あなたの国でありながら、最初のパラメータは、あなたの言語である

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

関連する問題