我已阅读here Android应用中的本地化是通过随应用部署的XML文件进行的。
是否可以在运行时将这些XML文件动态加载到应用程序中?
如果没有,是否可以覆盖UI XML和资源XML之间的绑定,以便我可以绑定到我自己的动态加载的XML文件而不是res/values
中的文件?
由于
答案 0 :(得分:8)
是否可以在运行时将这些xml文件动态加载到应用程序中?
不,抱歉。
如果没有,是否可以覆盖UI xml和资源XML之间的绑定,以便我可以绑定到我自己的动态加载的xml文件而不是res / values中的文件?
res/values/
中没有任何内容被使用,除非您使用它。因此,没有什么可以“覆盖”。
例如,假设您有TextView
。您希望它显示一些文本。您希望该文本已本地化。通常,您将设置一系列字符串资源,每个翻译一个,然后将这些字符串资源与TextView
一起使用(例如,布局中为android:text
,或Java中为setText()
) 。在您的情况下,您不会设置字符串资源,而是“自己动手”,并根据需要调用setText()
。
您在方法中失去的是自动转换。如果用户在您的应用程序运行时切换语言,Android会将其视为配置更改,并在返回到前台时重新启动您的活动。通常,这会自动加载新的字符串资源。在您的情况下,它不会,因为您没有使用字符串资源。相反,您需要告诉Android不要重新启动您的活动(通过android:configChanges
)并自行手动重新加载所有TextView
等小部件。如果你忘了一个,那么用户就是搞砸了。
恕我直言,除非有人指着你的头强迫你试图改变翻译而不发布新版本的应用程序,只需使用字符串资源并发布应用程序的新版本。
答案 1 :(得分:2)
如果您愿意,可以重新发明轮子并实现自己的基于区域设置的资源加载。
您可以通过
获取当前LocaleLocale = context.getResources().getConfiguration().locale;
然后使用其中的结果来适当加载自己的字符串/ Drawables /等等。 当然,您必须以编程方式执行所有操作(XML布局不会自动使用正确的资源)。
我强烈建议坚持使用标准的本地化技术。