【问题标题】:How to use Android Assets with multiple languages?如何使用多种语言的 Android 资产?
【发布时间】:2016-09-22 20:41:57
【问题描述】:

我在我的应用程序中使用 Assets 文件作为帮助文件,并且有十几个。我正在将应用程序移植到多种语言。替代语言资产文件放在哪里?

我已经在使用“res/values”目录来存储语言文件(值、values-es 等),以便在应用程序中使用。我认为“Assets”目录是用来存放帮助文件和类似项目的。

我试图不让我包含的许多帮助文件弄乱我的值文件夹,并且正在使用“activity.getAssets().open(file)”来读取文件。

此外,其中一些“资产”文件是不同语言的图片。

【问题讨论】:

标签: android assets


【解决方案1】:

你能把文件放在 /res 而不是 /assets 中吗?这内置了对多种语言的支持,有一个易于遵循的指南here

基本上,例如,如果您的原始文本在 /res/values/strings.xml 中,您可以将翻译放在 /res/values-{ISO LANGUAGE CODE}/strings.xml 中

例如,您的法语翻译将在 /res/values-fr/strings.xml 中。

Android 会根据用户手机的区域选择合适的翻译文件。

对于 /res 和 /assets here 之间的其他差异有一些很好的解释。

【讨论】:

  • 虽然我可以这样做,但它会使值文件夹与这些原始文件混淆。还有一些文件是图片。
  • 对于图片,您可以对 res/drawable 执行相同的操作,例如 res/drawable-fr。但是assets文件夹不支持这个,所以如果你想把帮助文件放在那里,你必须手动选择正确的文件。
【解决方案2】:

在资产中创建文件夹: 1.htmlpagesNL 2.htmlpagesUS

从 htmlpagesNL 复制文件并粘贴到 htmlpagesUS 并翻译

在 Nl 字符串文件中使用 url: file:///android_asset/htmlpagesNL 用于 NL 翻译 在 Us 字符串文件中使用 url: file:///android_asset/htmlpagesUS 用于美国翻译

支持不同的语言 Support different languages and cultures

【讨论】:

    【解决方案3】:

    对于我的应用程序中的语音识别(使用Vosk),我已将特定资产文件夹定义为资源字符串。 IE。 values\strings.xml 包含:

    <resources>
        <string name="language_directory">vosk-model-small-en-us-0.15</string>
        ...
    

    values-de-rDE\strings.xml 包含:

    <resources>
        <string name="language_directory">vosk-model-small-de-0.15</string>
        ...
    

    所以我可以通过

    访问资产目录
    val assets = Assets(activity)
    val assetDir = assets.syncAssets()
    val modelDir = activity.getString(R.string.language_directory)
    
    recognitionListener.model = Model("$assetDir/$modelDir")
    

    这样,始终根据活动区域设置选择正确的目录。

    就我而言,它们位于models\src\main\assets\sync\&lt;language_directory&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多