我想制作支持英文和瑞典文的Android应用程序。我已经经历了本地化概念。但我想知道有两个按钮在点击英文按钮时应该按照英文加载字符串,并且在瑞典语按钮上点击应该加载瑞典语字符串。我怎样才能做到这一点?根据用户偏好加载资源
回答
声明两个按钮,一个用于英语,另一个用于瑞典。您的english en
和swedish 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);
检查这个简单的example来实现自己的目标。
嘿感谢男人:)你帮了我很多! – kunal
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文件。 values.xml文件夹中的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);
添加到每个活动,使方向变化,加入到我的每个
final SharedPreferences langPref = getSharedPreferences (LANG_PREF, 0); if (Globals.langConfig != null) this.onConfigurationChanged(Globals.langConfig);
的onCreate()我允许方向变化的清单还增加了android:configChanges="orientation|locale"
到每个活动。我将用户语言首选项存储在可在网站或应用程序内更改的数据库中。希望这可以帮助。
- 1. 根据用户数据获取偏好
- 2. 根据偏好绘制用户界面
- 3. 根据用户控件的路径加载资源文件
- 4. 偏好库不加载偏好
- 5. 根据偏好分组
- 6. 用户偏好
- 7. 良好的资源加载系统
- 8. 根据选定的MenuItem资源ID加载字符串资源 - Android JAVA
- 9. 加载资源
- 10. Android和存储/加载资源偏好 - 如何实现一致性?
- 11. 如何在Yii2中根据用户偏好更改语言?
- 12. Android:根据用户偏好设置不同的开始活动
- 13. Android - 试图根据偏好消毒用户输入
- 14. Android根据用户偏好获取操作系统时钟
- 15. 如何根据用户偏好更改显示哪个布局?
- 16. 记住用户偏好并根据他们提供信息
- 17. 如何根据用户偏好更改RelativeLayout颜色?
- 18. 如何根据资源标识符加载字符串?
- 19. 如何根据控制器/操作加载Javascript资源?
- 20. 根据身份验证加载backbone.js资源
- 21. 根据长宽比加载不同的资源
- 22. 使用Java加载资源
- 23. 使用require.js加载资源
- 24. 使用webkitgtk加载资源+
- 25. 用变量加载资源?
- 26. 加载.NET资源客户端
- 27. 未在Azure门户中加载资源
- 28. 加载资源ME
- 29. Android资源加载
- 30. 静态资源的JSF加载资源
是的,你可以这样做,但是因为Android的Settings区域设置条目完全是为了这个目的,所以它会很愚蠢。您将为已经很好解决的标准问题创建非标准解决方案。 – mah
它确实应该通过系统设置完成,但有理由这样做。就我而言,我们必须锁定来自日常用户的所有其他程序和系统设置。由于设备在不同用户之间切换,我必须这样做才能在必要时进行切换。仍然可以解决它,但这就是客户想要的 – codeMagic