我想做一个支持英语和瑞典语的安卓应用。我已经了解了本地化概念。但是我习惯有两个按钮,点击英文按钮应该根据英文加载字符串,点击瑞典语按钮应该加载瑞典语字符串。我怎样才能做到这一点?
3 回答
Sv=Swedish... en=English... 在 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);
声明两个按钮,一个用于英语,另一个用于瑞典语。你的代码 forenglish en
和 forswedish sv
然后你就使用了Localization,这样..
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
检查这个简单的例子来实现你的目标。
我的回答与其他人相似,但我添加了一些可能很重要的额外内容
警告
我读过的所有内容都表明,让您的应用更改语言不是一个好主意,因为 Android 框架不支持它,并且可能会导致问题。
话虽如此,我已经在我的应用程序中完成了它,虽然它有点痛苦,但它似乎到目前为止还有效。如果你想这样做,我就是这样做的。您需要为每种语言创建一个单独的 strings.xml 文件。values 文件夹中的 strings.xml 作为默认值,然后可能是一个 strings.xml ,例如西班牙语字符串的 values-es 文件夹。我使用以下代码根据用户选择的单选按钮更改配置设置
`
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"
到清单中允许改变方向的每个活动。我将用户的语言偏好存储在可以在网站或应用程序内更改的数据库中。希望这可以帮助。