动态Android应用本地化



我在这里读到,Android应用中的本地化是通过与应用一起部署的XML文件发生的。

是否有可能在运行时动态加载这些XML文件到应用程序?

如果没有,是否可以覆盖UI XML和资源XML之间的绑定,这样我就可以绑定到我自己的,动态加载的XML文件,而不是在res/values中的一个?

谢谢

是否有可能在运行时动态加载这些xml文件到应用程序?

没有,抱歉。

如果不是,是否有可能覆盖UI xml和资源xml之间的绑定,这样我就可以绑定到我自己的,动态加载的xml文件,而不是一个在res/values?

res/values/中没有任何东西被使用,除非你使用它。因此,没有什么可以"重写"。

例如,假设您有一个TextView。你想让它显示一些文本。你希望文本本地化。通常,您将设置一系列字符串资源,每次翻译一个,然后将这些字符串资源与TextView一起使用(例如,布局中的android:text或Java中的setText())。在您的情况下,您不会设置字符串资源,而是"做自己的事情",并根据需要调用setText()

在这种方法中丢失的是自动转换。如果用户在应用程序运行时切换语言,Android会将其视为配置更改,并在返回前台时重新启动您的活动。通常,这将自动加载新的字符串资源。在您的情况下,它不会,因为您没有使用字符串资源。相反,你需要告诉Android不要重新启动你的活动(通过android:configChanges),并手动重新加载所有的TextView等部件。如果你忘记了一个,那么,用户就完蛋了。

恕我之言,除非有人拿枪指着你的头强迫你在不发布新版本的情况下改变翻译,否则就使用字符串资源并发布新版本的应用程序。

如果您愿意,您可以重新发明轮子并实现您自己的基于locale的资源加载。

您可以通过

获得当前区域设置
Locale = context.getResources().getConfiguration().locale;

然后使用结果适当地加载自己的字符串/Drawables/任何东西。当然,您必须以编程方式完成所有这些工作(XML布局不会自动使用正确的资源)。

我强烈建议坚持使用标准的本地化技术。

最新更新