【问题标题】:Can localization resources be downloaded in runtime?本地化资源可以在运行时下载吗?
【发布时间】:2012-03-11 00:59:41
【问题描述】:

我有可以访问互联网的应用程序,不想为不同语言存储许多 string.xml 文件。

我想要什么:

  1. 应用程序仅包含一个带有英文字符串的string.xml
  2. 当用户启动它时 - 我看到用户的电话区域设置,并要求我自己的服务器提供必要的语言文件。 (资源键将相同)
  3. 当新资源文件到来时,所有界面都应该使用新文件。

问题是如何在运行时更改现有的或添加新的string.xml 文件?

【问题讨论】:

    标签: android android-location android-resources


    【解决方案1】:

    您显然不能在运行时更改、下载或删除strings.xml

    如果要存储位置,则必须使用 SQLite 存储来存储翻译。

    类似:
    How to modify strings.xml file at runtime
    run time modification of strings.xml

    【讨论】:

    • 这个解决方案的问题——你不能从xml文件中引用数据库,你不能使用标准的'Context.getString()'方法。
    • 是的,这就是解决方案的阴暗面,但只要您想使用您提供的解决方案,没有区别,只是这显然与系统更分离,更简单、更精简实施。
    • 我可以在我的资源中创建例如文件夹values-de 并将新的xml文件放在那里吗?
    • 因为您无法编辑保存在.apk 中的文件,不,这是不可能的。
    【解决方案2】:

    现在我只能看到解决方案:

    1. 创建一些“本地化代理”,它将返回必要的资源(来自 string.xml 或下载的资源)
    2. 将所有getString()getText() 替换为您自己的方法getStringFromLocalization
    3. 使用自定义视图覆盖 TextViewButton 和其他一些视图,并在其中更改 init 和 setText 方法。

    【讨论】:

    • 一切正常,除了 setText(String) 方法是 final 所以它不能被覆盖
    【解决方案3】:

    使用已编译的资源文件覆盖标准资源/语言,然后您的自定义性能会受到限制。仅在您需要时才这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多