具有多种语言支持的多种“风味”

时间:2018-09-25 09:46:13

标签: android multilingual android-productflavors

  1. 我有一个具有两种风格的应用-称它们为main和F1
  2. 该应用程序支持两种语言:英语(默认)和日语。
  3. 我也有4个strings.xml文件(用于每种口味/语言组合):

    • src/main/res/values/strings.xml
    • src/main/res/values-jp/strings.xml
    • src/f1/res/values/strings.xml
    • src/f1/res/values-jp/strings.xml
  4. 在每个strings.xml文件中,有一个名为“ x”的字符串,在每个文件中具有不同的值,除外文件src/f1/res/values-jp/strings.xml中,其中一个名为“ x“丢失。

用例:
手机语言为日语,选择风味F1。 “ x”值取自src / main / res / values-jp / strings.xml。

问题: 是否可以优先处理
src/f1/res/values/strings.xml 过度 src/main/res/values-jp/strings.xml

3 个答案:

答案 0 :(得分:0)

据我所知,没有办法更改资源的合并规则(有一种用于清单的方法,但我看不到任何针对资源的方法)。如here所述,合并规则如下:

<form method="post" action ="edit.php?edit_form=<?=$edit_id;?">

但是基于此,我期望资源合并优先build variant > build type > product flavor > main source set > library dependencies优先于src/f1/res/values/strings.xml,因为您正在构建src/main/res/values-jp/strings.xml风格。 因此,这可能是一个错误,但我自己尚未对此进行测试。

答案 1 :(得分:0)

尝试一下:

productFlavors {

    myFrenchFlavor {
     buildConfigField "String", "LOCALE", "\"fr\""
    }
    myEnglishFlavor {
      buildConfigField "String", "LOCALE", "\"en\""
    }
}

答案 2 :(得分:0)

我知道这是一个老问题,但发现它的人可能会从答案中受益。

从官方的documentation来看,资源名称限定符是这样定义的:

<块引用>

语言由两个字母的 ISO 639-1 语言代码定义, 可选后跟两个字母的 ISO 3166-1-alpha-2 区域代码 (以小写 r 开头)。

所以文件名应该是 src/main/res/values-ja 而不是 src/main/res/values-jp