在Android中动态替换@string/stringId

0 人关注

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

Is this possible?

4 个评论
不是直接的。Android R提供了一个 ResourceLoader ,可以帮助处理这种事情,我希望 AppCompatActivity 在未来的某个时候提供一个备份。
你是指从远程资源中获取翻译吗?
@CommonWare,你能详细说明一下吗?我怎样才能使用资源加载器,使它在布局xml中使用@string/的地方调用我的函数?我可以修改注解以将字符串 Ids 传递给我的函数,但如何使用 xml 调用资源加载器?
@Cory Roy, 是的。只有字符串Ids将被存储在应用程序中,根据用户在共享偏好中的地区设置或输入,翻译将被提取出来。
android
xml
Sahil
Sahil
发布于 2020-03-04
3 个回答
Cory Roy
Cory Roy
发布于 2022-06-25
0 人赞同

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

你是否读过。 https://developer.android.com/guide/topics/resources/localization

一般来说,你为每一种语言都有一个单独的XML文件,使用相同的字符串键,但位于以其地域命名的目录中。

假设你的应用程序的默认语言是英语。又假设 你想把你的应用程序中的所有文本本地化为法语,而你的应用程序中的大部分 中的大部分文字(除了应用程序的标题之外)都是日语。 在这种情况下,你可以创建三个备选的 strings.xml 文件。 各自存储在一个特定的本地资源目录中。

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

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

然后你可以选择在你的xml布局文件中硬编码stringId(通过 @string/title ),或者在java中通过( view.setText(R.string.title) )程序化地分配字符串。

你好,这些字符串是静态存储在XML文件中的,我的要求是在运行时动态获取这些字符串,这就是为什么我想把@string注解替换成能在运行时调用我的Map填充的东西。
@Sahil 我做了一个实现,我们会在本地缓存服务器的本地化。 如果这些字符串变化不是太快,你也许可以预先获取它们,将它们存储在房间或共享的prefs中,以便在绑定视图的时候抓取?
在代码中绑定视图并设置字符串是一个很大的努力。我打算采用创建自定义视图的方法,在该视图中,我的地图将被调用以获取翻译。所以,@string/string_id在自定义视图中被替换为string_id,我将在重载的setText方法中替换为翻译。
Pratik Fagadiya
Pratik Fagadiya
发布于 2022-06-25
0 人赞同

In XML File

android:text="@string/app_name"

将app_name替换为你的字符串

在Java文件中