2

是否可以使用从服务接收的 XML 在运行时翻译 android 应用程序?如果可能的话,有人可以指出我正确的方向。

谢谢你。

4

1 回答 1

0

警告

我读过的所有内容都表明,让您的应用更改语言不是一个好主意,因为 Android 框架不支持它,并且可能会导致问题。

话虽如此,我已经在我的应用程序中完成了它,虽然它有点痛苦,但它似乎到目前为止还有效。如果你想这样做,我就是这样做的。您需要为每种语言创建一个单独的strings.xml文件。strings.xmlvalues文件夹中作为您的默认值,然后可能是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);

到每个允许方向改变的活动,并将其添加到我onCreate()的每个活动中

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 回答