英語とスウェーデン語に対応したAndroidアプリを作りたかった。ローカリゼーションの概念を理解しました。しかし、英語のボタンをクリックすると英語に従って文字列が読み込まれ、スウェーデン語のボタンをクリックするとスウェーデン語の文字列が読み込まれるようにするための2つのボタンが必要でした。これどうやってするの?
3 に答える
Sv=スウェーデン語... en=英語... languageToLoad に言語コードを入力します。
String languageToLoad = "Sv"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
this.setContentView(R.layout.main);
私の答えは他のものと似ていますが、重要かもしれないいくつかの追加事項を追加しました
警告
Android フレームワークでサポートされておらず、問題が発生する可能性があるため、アプリで言語を変更できるようにすることはお勧めできません。
そうは言っても、私は自分のアプリでそれを行いましたが、少し苦労しましたが、今のところうまくいっているようです. あなたがこのようにしたい場合に備えて、これが私がやった方法です。言語ごとに個別の strings.xml ファイルが必要です。デフォルトとして値フォルダーのstrings.xml、たとえばスペイン語の文字列のvalues-esフォルダーのstrings.xml。次のコードを使用して、ユーザーが選択したラジオ ボタンに応じて構成設定を変更しました。
`
final Configuration LANG_CONFIG = ChooseLocale.this.getResources().getConfiguration();
Locale newLocale = new Locale("English");
curLang = ChooseLocale.this.getLanguage();
if ((curLang.equals("English")) || (curLang.equalsIgnoreCase("Ingles")))
{
newLocale = new Locale("en_US");
}
else
{
newLocale = new Locale("es");
}
Toast.makeText(getApplicationContext(), newLangToast + " " + curLang , Toast.LENGTH_SHORT).show();
Configuration config = getBaseContext().getResources().getConfiguration();
Locale.setDefault(newLocale);
config.locale = newLocale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
SharedPreferences.Editor editor = langPref.edit();
editor.putString(LANG_PREF, curLang);
editor.commit();
`
この行は、構成を更新するために最も重要です
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
必要に応じて処理できる getLanguage() 関数からローカルを取得します。私も追加しなければなりませんでした
@Override public void onConfigurationChanged(Configuration newConfig) { newConfig = Globals.getUserLanguage(this); super.onConfigurationChanged(newConfig);
向きの変更を許可するすべてのアクティビティに追加し、これをそれぞれの onCreate() に追加します
final SharedPreferences langPref = getSharedPreferences (LANG_PREF, 0); if (Globals.langConfig != null) this.onConfigurationChanged(Globals.langConfig);
android:configChanges="orientation|locale"
また、マニフェストの各アクティビティに、向きを変更できるように追加しました。ユーザーの言語設定を DB に保存します。これは Web サイトまたはアプリ内で変更できます。お役に立てれば。
英語用とスウェーデン語用の 2 つのボタンを宣言します。あなたのコードはenglish en
、このようにローカリゼーションswedish sv
を使用しています..
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
この簡単な例をチェックして、目標を達成してください。