サービスから受け取った XML を使用して実行時に Android アプリケーションを翻訳することは可能ですか? 可能であれば、誰かが私を正しい方向に向けてください。
ありがとうございました。
サービスから受け取った XML を使用して実行時に Android アプリケーションを翻訳することは可能ですか? 可能であれば、誰かが私を正しい方向に向けてください。
ありがとうございました。
警告
Android フレームワークでサポートされておらず、問題が発生する可能性があるため、アプリで言語を変更できるようにすることはお勧めできません。
そうは言っても、私は自分のアプリでそれを行いましたが、少し苦労しましたが、今のところうまくいっているようです. あなたがこのようにしたい場合に備えて、これが私がやった方法です。strings.xml
言語ごとに個別のファイルが必要です。strings.xml
invalues
フォルダをデフォルトとして、おそらくスペイン語の文字列用strings.xml
のフォルダを指定します。values-es
次のコードを使用しRadioButton
て、ユーザーが選択したに応じて構成設定を変更しました
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);
向きの変更を許可するすべてのアクティビティに、これを my onCreate()
of eachに追加します
final SharedPreferences langPref = getSharedPreferences (LANG_PREF, 0);
if (Globals.langConfig != null)
this.onConfigurationChanged(Globals.langConfig);
android:configChanges="orientation|locale"
また、マニフェストの各アクティビティに、向きを変更できるように追加しました