在Android中动态替换@string/stringId



我想在android布局xml文件中动态获取字符串翻译,所以基本上,无论在xml文件中使用@string/stringId的哪里,都应该为这个字符串Id调用一个java函数来获取相应的翻译。

这可能吗?

我相信这是可能的,但听起来完全没有必要。

你读过了吗:https://developer.android.com/guide/topics/resources/localization

通常,对于每种语言,都有一个单独的XML文件,使用相同的字符串键,但位于按其区域设置命名的目录中。

示例:

假设你的应用程序的默认语言是英语。还假设你想将应用程序中的所有文本本地化为法语应用程序中的文本(除应用程序标题外的所有内容(转换为日语。在这种情况下,您可以创建三个可供选择的strings.xml文件,每个存储在特定于区域设置的资源目录中:

res/values/strings.xml包含所有字符串的英文文本该应用程序使用,包括名为title的字符串的文本。CCD_ 3包含所有字符串的法语文本,包括标题。res/values-ja/strings.xml包含的日语文本除了title之外的所有字符串。如果您的基于Java的代码引用R.string.title,以下是运行时发生的情况:

如果设备设置为法语以外的任何语言,则Android加载res/values/strings.xml文件的标题。如果设备设置为法语,Android从res/values-fr/strings.xml文件加载标题。

然后您可以选择在xml布局文件中硬编码字符串Id(通过@string/title(,或者通过(view.setText(R.string.title)(在java中以编程方式分配字符串

在XML文件中

android:text="@string/app_name"

将app_name替换为字符串

在Java文件中

TextView t;
t.setText.(getString(R.string.YOUR_STRING_NAME));

这篇文章有点晚了,但如果有人需要它,有一个库可以做到这一点(如果你不介意有外部依赖关系(,名为"重新调整";。这是一篇Medium文章,解释了它及其Github回购。

最新更新