【问题标题】:How to dynamically load strings.xml easily?如何轻松动态加载strings.xml?
【发布时间】:2017-11-23 10:03:30
【问题描述】:

我现在正在处理android i18n。这么多values-xxxx目录下有一些strings.xml文件,但是产品经理想把这些坑strings.xml文件放到服务器上,app通过语言参数动态获取strings.xmlrom网络文件。但是字符串.xml 的使用方式有:@string/xx、Widget.setText(R.string.xx)、getString(R.string.xx)、Toast.make(x, R.string.x, x) 等等... 如何轻松动态加载 android strings.xml?或者你有更简单的方法来解决我的问题吗?谢谢!

【问题讨论】:

  • 资源是只读的,所以你不能替换它们。使用语言的本地化功能(-en、-it、-de ...)
  • 产品经理?什么?
  • 您的产品经理不应干预开发人员的工作。真的。

标签: java android string dynamic internationalization


【解决方案1】:

来自我开发过的一款应用:

启动应用程序后进行 api 调用。服务器以包含所有字符串的 JSON 响应。解析完成后,我们可以在正确的上下文中动态设置所有字符串,或者在需要时保留对象甚至json以获取字符串。

希望这个想法可以帮助到你。

【讨论】:

    【解决方案2】:

    我明白产品经理想要改变这一点是有原因的。

    我的解决方案如下:

    1. 将所有与不同语言相关的字符串保存在具有不同 url 模式的服务器上。简而言之,获取字符串的 url 应该是 http://www.example.com/strings/{lang_param}/ 示例:http://www.example.com/strings/en/, http://www.example.com/strings/pt-br/ 类似这样的东西。
    2. 让服务器返回 JSON,其中字符串的键将相同,但值会根据 url 参数而变化,即lang_param。与 json 服务器一起必须返回一个标识,以指示某些字符串项是否已更改。此身份哈希必须保存在共享首选项中,以便下次应用启动时您可以查询服务器检查哈希,如果它们不同,则意味着有一些新的更改将它们放入。
    3. 您必须使用在https://developer.android.com/training/data-storage/files.html 上提供的File file = new File(context.getFilesDir(), filename); 将默认的strings.xml 保存在应用程序的内存中。
    4. 一旦你得到新的文件更新内存 json 文件并创建一个解析这个 json 的实用方法。请注意,您需要根据不同的语言维护不同的哈希和 json 字符串文件。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多