2

サービスから受け取った XML を使用して実行時に Android アプリケーションを翻訳することは可能ですか? 可能であれば、誰かが私を正しい方向に向けてください。

ありがとうございました。

4

1 に答える 1

0

警告

Android フレームワークでサポートされておらず、問題が発生する可能性があるため、アプリで言語を変更できるようにすることはお勧めできません。

そうは言っても、私は自分のアプリでそれを行いましたが、少し苦労しましたが、今のところうまくいっているようです. あなたがこのようにしたい場合に備えて、これが私がやった方法です。strings.xml言語ごとに個別のファイルが必要です。strings.xmlinvaluesフォルダをデフォルトとして、おそらくスペイン語の文字列用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"また、マニフェストの各アクティビティに、向きを変更できるように追加しました

ローカリゼーションに関する Android ドキュメント

于 2012-12-05T00:03:03.967 に答える