【发布时间】:2017-09-19 01:09:32
【问题描述】:
TL;DR
我有一个支持多种语言的应用。尽管使用了所有常用的本地化方法,但一项活动没有被翻译。它是应用中唯一充分利用DataBinding的Activity。
完整解释
我有一个使用DataBinding 的Activity。所以基本上,该 Activity 的整个 XML 布局都包含在 <layout> 标记内。这就是我膨胀视图并获得绑定的方式:
SomeActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.some_activity);
XML中有多个TextViews的文字是这样设置的:
...
android:text="@string/<name of a string>"
...
我们为用户提供预定义的语言选项并使用设置应用程序区域设置
Locale.setDefault(new Locale("<language name>"));
在英语语言环境中,一切正常。
当应用程序处于不同的区域设置时,相关活动中的字符串仍以英语显示 - 即使这些字符串已被翻译成适当的语言,并且位于相同的字符串文件中,其余的应用程序从中获取字符串。在该活动开始之前,应用程序很好 - 在活动开始并且我退出它之后,应用程序恢复到英语语言环境,直到它被杀死并重新启动。如果该 Activity 从未打开,则应用会按预期运行。
有人知道是什么原因造成的吗?谢谢。
【问题讨论】:
-
我的理解是应用程序将从设备中检索语言环境,无需以编程方式对其进行干预。所以我的猜测是你用 Locale.setDefault(...) 搞砸了,但我很可能错了。
-
@Ascorbin 很好,无论设备区域设置如何,只要我们支持,我们仍然愿意为用户提供使用他们喜欢的任何语言的应用程序的选项。请注意,该应用程序的其余部分工作正常。
-
当您不使用数据绑定语法时,将使用应用资源的常规规则。您是在重复使用 SomeActivityBinding 还是像往常一样在更改语言环境时重新填充它?
-
@GeorgeMount 好点,但我没有重复使用该绑定 - 每次调用
onCreate时它都会重新膨胀。
标签: android android-activity data-binding android-location android-databinding