【问题标题】:Multi-lingual Android - String values not being adapted to the change多语言 Android - 字符串值不适应变化
【发布时间】:2017-04-28 07:26:27
【问题描述】:

我正在向 android 应用程序添加一项新功能,使用户能够在两种语言之间切换。

到目前为止,为了测试语言环境的变化,我一直在我的一个活动中使用以下代码。

    Locale myLocale = new Locale("ru");
    Locale.setDefault(myLocale);

    Resources res = this.getResources();

    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();

    Locale current = getResources().getConfiguration().locale;

    if (current.getLanguage().equals(myLocale.getLanguage())){

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

            conf.setLocale(myLocale);
            createConfigurationContext(conf);
            recreate();

        }else{

            conf.locale = myLocale;
            res.updateConfiguration(conf, res.getDisplayMetrics());
            recreate();

        }

    }

    setContentView(R.layout.activity_main);

检查版本代码的原因是 createConfigurationContext() 需要 API 级别 17,而我正在使用 API 级别 16。所以这个条件允许我使用已弃用的 updateConfiguration() 以及 createConfigurationContext()。

我还为相关语言创建了 strings.xml 并添加了一些值用于测试。

到目前为止所取得的成就是日期以翻译语言显示,这告诉我语言环境实际上已更改为正确的语言。其他应该从 strings.xml (ru) 中获取的字符串根本没有改变。

是否以与布局 xml 不同的方式调用具有多个翻译的字符串(参见下面的代码)?还是我的结构不对?

android:text="@string/upcoming_title"

【问题讨论】:

  • 您是在扩展布局之前还是之后更改区域设置?它不会神奇地更新您的膨胀视图。只有在 更改后加载的字符串会受到影响,通常需要重新启动活动
  • 是的,并且活动正在通过 recreate() 方法重新启动,并且可以通过日志确认正在发生。

标签: android locale multilingual


【解决方案1】:

发布问题后,我一直在尝试一些东西,并决定尝试从另一篇帖子中添加以下答案:

https://stackoverflow.com/a/40704077/2199589

这按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2015-12-22
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多