【问题标题】:Android Studio: Switching string values in resources programmatically, without changing localeAndroid Studio:以编程方式切换资源中的字符串值,无需更改语言环境
【发布时间】:2016-06-27 20:36:18
【问题描述】:

对于我在 Android Studio 中制作的移动应用程序,我希望用户能够更改应用程序的语言。想法如下:我有多个strings.xml文件(针对不同的语言),我想在语言更改时切换到特定文件(例如,如果语言更改为德语,则切换到文件strings.xml(de ))。但是,我似乎找不到以编程方式切换到另一个 strings.xml 文件的方法。我可以在网上找到的唯一解决方案是更改系统的区域设置,但我宁愿避免使用此选项。有什么方法可以在不更改语言环境的情况下以编程方式更改 strings.xml 文件?

提前致谢!

【问题讨论】:

  • 这个问题是关于改变语言环境来改变语言的,我想避免这种情况。
  • 这不是更改系统区域设置,Locale.setDefault() 仅在应用程序中更改区域设置。
  • 简单地说:你的应用不应该提供这种能力。我不知道您究竟为什么想要该功能,并且您可能有充分的理由,但应用程序应始终使用手机的系统语言。这是用户选择的语言,因此他或她希望所有应用都使用该语言。

标签: java android xml android-studio


【解决方案1】:

感谢 Sergey Glotov 的链接,我使用了 updateConfiguration 方法:

Locale locale2 = new Locale("en");
Locale.setDefault(locale2);

Configuration config2 = new Configuration();
config2.locale = locale2;

getBaseContext().getResources().updateConfiguration(
                        config2,getBaseContext().getResources().getDisplayMetrics());

所以现在应用程序正在使用 string-en 资源文件! :D

但是Resources.getSystem().getConfiguration().locale.getDisplayLanguage() 是“法语”,所以我的语言环境没有改变。这是你想要的吗?

【讨论】:

    【解决方案2】:

    我建议使用Android-LocalizationActivity 库。

    这个库使得在运行时更改应用语言变得非常简单。您的所有活动都需要实现LocalizationActivity,它扩展了AppCompatActivity。之后,您可以通过调用setLanguage("en"); 来切换应用中使用的语言 包含以下示例代码和更多信息的示例项目可以在 github 页面上找到。

    this question 关于以编程方式更改语言可能也包含一些有用的答案。

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多