ユーザーが言語を変更できる設定アクティビティを使用して、2 つの言語で提供されるアプリケーションを構築しています。ユーザーが任意の言語を選択したら、その選択を保存して、アプリケーションを再度起動したときに新しい言語が表示されるようにします。さまざまな言語とさまざまな向きのレイアウトに関連するすべてのことを行いました。
私の問題
アプリケーションを起動すると、常に言語で起動しEnglish
ますが、ロケール言語を印刷すると結果はArabic
.
ヒント
ユーザーが設定アクティビティから言語を変更し、保存を押すと、アプリケーションは新しい言語で完全に動作します。残念ながら、アプリケーションを再起動すると、この新しい言語で起動されません。
私のコード
Tags.java - 3 つの文字列のみを含むクラス:
public class Tags {
public final static String LANGUAGE = "Language";
public final static String ENGLISH_LANGUAGE = "en";
public final static String ARABIC_LANGUAGE = "ar";
}
スプラッシュ アクティビティ- アプリケーションが開始されるアクティビティ:
someData = getSharedPreferences(filename, 0);
android.content.SharedPreferences.Editor editor = someData.edit();
if (!someData.contains(Tags.LANGUAGE)) {
editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
String currentLanguage = someData.getString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
Setting.setLanguage(currentLanguage);
Log.e("currnetLanPHone", Setting.getLanguage());
if (currentLanguage.equalsIgnoreCase(Tags.ENGLISH_LANGUAGE)) {
Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
} else {
Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
editor.commit();
前に説明したように、アプリケーションの言語が変更され、言語をSetting activity
.
Setting activity
私がその活動で行ったことをスプラッシュ活動と比較するために、あなたは私にそのコードを提供するように頼むと確信しています. このコードは次のとおりです。
活動の設定
if (s_language.getSelectedItem().toString().equalsIgnoreCase("English")) {
editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
Locale.setDefault(locale);
Log.e("Inside", Tags.ENGLISH_LANGUAGE);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
editor.putString(Tags.LANGUAGE, Tags.ARABIC_LANGUAGE);
Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Setting.setLanguage(Tags.ARABIC_LANGUAGE);
}
editor.commit();
コードは非常に単純です。2s_language
つの値からスピナーを使用しました。
設定アクティビティで、ユーザーが を押すsave
と、Setting
アクティビティが終了するという問題が発生する可能性があります。splash
アクティビティでは、関数内の言語を確認してから、oncreate
アクティビティを続行し、いくつかの手順を実行して終了します。活動を終えることが問題だとは思いませんが、イメージを明確にするために言っただけです。
この問題を解決するにはどうすればよいですか?