現在言語(ロケール)を知る方法Androidアプリがユーザーにテキストを表示するために使用しますか?
Locale.getDefault()
を使用してデフォルトのOSロケールを取得できることはわかっています。ただし、アプリがこのロケールをサポートしていない場合、テキストやその他のリソースを表示するためにアプリが使用するロケールとは異なる場合があります。
アプリが表示する言語(ロケール)を決定する必要があるため、アプリは言語をサーバーに渡し、返された結果をローカライズできます。
私自身の解決策は、_strings.xml
_キーと値のペア_locale=<locale code>
_に追加することです。したがって、context.getResources().getString(R.string.locale)
は、使用されているロケールに固有のロケールコードを返します。
それはあなたのアプリの設定にあるので、あなたはそれを得ることができます:
getResources().getConfiguration().locale
これは
Locale.getDefault()
また、アプリが使用するロケールが異なる場合があります。
開発者がアプリの設定を更新することで変更できるため、異なる場合があります。以下を確認してください Resources.updateConfiguration
次のコードは私のために働きます:
@TargetApi(Build.VERSION_CODES.M)
private String getCurrentDefaultLocaleStr(Context context) {
Locale locale = context.getResources().getConfiguration().locale;
return locale.getDefault().toString();
}
注:Build.VERSION_CODES.Nでロケールを取得する方法に若干の変更があります。 N以上の場合、コードは以下のコードブロックのようになります。ただし、上記のコードブロックのようにM以下に対してのみ実行し、N以上に対しても互換性があります。
// Build.VERSION_CODES.N
Locale locale = context.getResources().getConfiguration().getLocales().get(0);
私がサポートする各国語については、次のことがわかりました。
English: en
Traditional Chinese: zh_TW_#Hant
Simplified Chinese: zh_CN_#Hans
Spanish: es_ES
French: fr_FR
Japanese: ja_JP
German: de_DE
同じロケール情報を異なる形式で提供するメソッドのリストがあります。
locale.getDefault()。getCountry();
locale.getDefault()。getISO3Language();
locale.getDefault()。getISO3Country();
locale.getDefault()。getDisplayCountry();
locale.getDefault()。getDisplayName();
locale.getDefault()。getDisplayLanguage();
locale.getDefault()。getLanguage();
locale.getDefault()。toString();
以下のコードを使用できます。たとえば、以下に示す関数は、Applicationクラスを拡張したクラス内に配置できます。
_public class MyApplication extends Application {
...
public static String APP_LANG;
private Context ctx = getBaseContext();
private Resources res = ctx.getResources();
public SharedPreferences settingPrefs;
...
public void restoreAppLanguage(){
/**
*Use this method to store the app language with other preferences.
*This makes it possible to use the language set before, at any time, whenever
*the app will started.
*/
settingPrefs = getSharedPreferences("ConfigData", MODE_PRIVATE);
String lang = settingPrefs.getString("AppLanguage", "");
if(!settingPrefs.getAll().isEmpty() && lang.length() == 2){
Locale myLocale;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
res.updateConfiguration( config, res.getDisplayMetrics() );
}
}
public void storeAppLanguage(int lang) {
/**
*Store app language on demand
*/
settingPrefs = getSharedPreferences("ConfigData", MODE_PRIVATE);
Editor ed = settingPrefs.edit();
Locale myLocale;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
res.updateConfiguration( config, res.getDisplayMetrics() );
ed.putString("AppLanguage", lang);
ed.commit();
}
public void setAppLanguage(String lang){
/**
*Use this method together with getAppLanguage() to set and then restore
*language, whereever you need, for example, the specifically localized
*resources.
*/
Locale myLocale;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
res.updateConfiguration( config, res.getDisplayMetrics() );
}
public void getAppLanguage(){
/**
*Use this method to obtain the current app language name
*/
settingPrefs = getSharedPreferences("ConfigData",MODE_PRIVATE);
String lang = settingPrefs.getString("AppLanguage", "");
if(!settingPrefs.getAll().isEmpty() && lang.length() == 2){
APP_LANG = lang;
}
else APP_LANG = Locale.getDefault().getLanguage();
}
}
_
そして、メインコードのどこにでも書くことができます:
_public class MainActivity extends ActionBarActivity {
...
MyApplication app;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
app = (MyApplication)getApplicationContext();
...
if(settingPrefs.getAll().isEmpty()){
//Create language preference if it is not
app.storeAppLanguage(Locale.getDefault().getLanguage());
}
//Restore previously used language
app.restoreAppLanguage();
...
}
...
void SomethingToDo(){
String lang = "en"; //"fr", "de", "es", "it", "ru" etc.
...
app.getAppLanguage();
app.setAppLanguage(lang);
...
//do anything
...
app.setAppLanguage(app.APP_LANG);
}
...
}
_
あなたの場合、まもなくgetAppLanguage()
を使用してから、パブリック変数_APP_LANG
_をチェックして、現在使用されている言語を取得できます。
public boolean CheckLocale(Context context, String app_language) {
Locale myLocale = new Locale(app_language);
Resources res = context.getResources();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
if(res.getConfiguration().locale==myLocale)
return true;
else
return false;
}
この方法を使用します。