是否建议在Android应用程序中创建语言选择器?

时间:2014-12-01 21:16:43

标签: java android

是否建议在Android应用程序中创建语言选择器,还是应该只为语言创建必要的资源文件(drawables / strings)?如果某人的手机语言设置为英语,但他想用德语使用该应用程序,他可以通过选择器更改语言。

我已经尝试了to implement the selector with this answer但是当我关闭应用时,语言重置为默认值。我没有找到任何解决方案,所以也许做一个语言选择器不是一个好主意。有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用依赖应用程序外部区域设置的standard approach更简单。但是有充分的理由希望在应用程序中切换区域设置,例如,如果您正在编写可能由多个人使用的自助服务终端应用程序。

您仍然可以通过覆盖当前配置的区域设置来利用内置资源选择。但是正如您所发现的,语言环境不断重置为设备默认值。我发现如果你启动另一个活动,它会继承启动它的活动的语言环境。但是,如果稍后重新创建该活动(例如在方向更改上),则会使用设备的默认区域设置重新创建该活动。要维护首选语言区域,请在调用onCreate(...)之前在每项活动的setContentView(...)中执行此操作:

    Resources res = getBaseContext().getResources();
    Configuration config = res.getConfiguration();
    Locale locale = new Locale("es", "US"); // get preferred locale from shared preferences or something
    config.locale = locale; // config.setLocale(...) requires API 17
    res.updateConfiguration(config, res.getDisplayMetrics());

答案 1 :(得分:1)

要处理重置问题,您应该使用SharedPreferences: http://developer.android.com/reference/android/content/SharedPreferences.html

  SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
  SharedPreferences.Editor editor = preferences.edit();
  editor.putString("language","value");
  editor.apply();

答案 2 :(得分:1)

如果您使用此处推荐的本地化语法:

http://developer.android.com/training/basics/supporting-devices/languages.html

你不会有这个问题。如果有人在手机上使用德语作为语言,并且您正确设置了本地化,那么当您加载应用程序时,您将使用德语作为正确的语言。这也适用于任何语言,并为您提供所需的多功能性。

MyProject/
    res/
       values/
           strings.xml
       values-es/ <---Spanish
           strings.xml
       values-fr/ <---- French
           strings.xml

您需要确保在创建values文件夹时使用iso-630-1语言代码。

如果您想让用户只在您的应用上更改其语言偏好设置,您可以使用SharedPreferences来记住他们的选择,设置加载/启动应用时的语言。