言語を取得
Android端末の使用言語を取得するにはLocal.getLanguageを用います。
public class MainActivity extends AppCompatActivity { Locale locale; String language; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locale = Locale.getDefault(); language = locale.getLanguage(); Log.d("Log0",language+"語で、"+locale+"の言葉です"); } }
日本語環境で実行すると
D/Log0: ja語で、ja_JPの言葉です
となります。
Android端末の言語設定を日本語以外に設定して再度実行してみてください。
例えばフランス語に設定すると
D/Log0: fr語で、fr_FRの言葉です
となります。
日本語環境のみ別の処理をする
まずはコードです。
public class MainActivity extends AppCompatActivity { Locale locale; String language; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locale = Locale.getDefault(); language = locale.getLanguage(); if(locale.equals(Locale.JAPAN)||locale.equals(Locale.JAPANESE)){ Log.d("Log0","ようこそ! 使用言語は"+language+"です"); //日本向け処理 }else{ Log.d("Log0","Welcome! The language used is "+language); //デフォルトの処理 } } }
localは国の情報、local.getLanguageでその国の言語が取得されています。
Stringに関する分岐の場合
表示する文章やurlなどのStringに関するデータについてはXMLで管理します。この際はAndroid側で自動的に分岐が行われますので、JAVAで上記のように実装する必要はありません。XMLを用いた多言語化については別途、下記アプリの多言語化の記事をご覧ください。
アプリの多言語化 | Multilingualize applications | Android
リソースによる分岐 各国対応の現在時刻の表示の記事や端末の使用言語を取得の記事でJAVAを用いて端末の言語環境を取得し、if文で分岐する方法を記載しました。 今回はJAVAを用いず、strings.xmlで多言語化をする方法です。 表示する文字についてのみであればこちらで対応しましょう。 方法はとても簡単で、各言語用の...
おわりに
この方法で取得したString型のlanguageはgoogleの言語略語と同じです。ですからJSONなどのさまざまなサービスを扱う際に、言語指定として利用することができます。
また、Localはあくまで端末の使用言語から判断します。GPSで現在地を取得して判断しているわけではありませんのでご注意を。
ところで、Locale.JAPANとLocale.JAPANESEの違いは何でしょうか。
前者は国、後者は言語です。実際に実行してみるとこのコードの場合、前者が該当します。
Localなので当然と言えば当然・・ですね。
「どちらかでよい。」という記載も見かけますが、存在している以上、私は念のため、JAPANESEも判断させています。特にJAPANESEだけはNGですね。