默认语言的 MissingTranslation(“...”未在 "en" 中翻译)

MissingTranslation for default language ( "..." is not translated in "en")

我想生成一个签名的 apk 并得到以下错误:

Error:(65) Error: "..." is not translated in "en" (English) [MissingTranslation]

我的项目仅包含默认文件夹(没有语言插件),例如 values 文件夹和一种语言,即德语(意思是,我有一个 values-de 文件夹)

我的默认语言是英文,所以所有不属于特殊语言的资源都应该是英文的。

问题

为什么 android studio 告诉我,它缺少 en 语言,尽管我没有一个 en-folder?也许 en-folder 是 gradle 导入的一部分?我能以某种方式排除它们吗?实际上,我不知道 en 是从哪里来的,因为我没有在任何地方使用它...

示例

我只有valuesvalues-de文件夹!

values 我有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="pause_alarms">
        <item>Silent</item>
        <item>Vibrate</item>
        <item>Sound</item>
        <item>Vibrate + Sound</item>
    </string-array>
</resources>

values-de 我有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="pause_alarms">
        <item>Leise</item>
        <item>Vibrieren</item>
        <item>Ton</item>
        <item>Vibrieren + Ton</item>
    </string-array>
</resources>

也许构建被字符串数组弄糊涂了?将数组仅放在一个值文件夹中并将字符串定义为外部资源是一种很好的做法。因此,与其输入,不如这样做:

<string-array name="pause_alarms">
    <item>@string/silent</item>
    <item>@string/vibrate</item>
    ... etc ...
</string-array>

然后在res/values/strings.xml

<string name="silent">Silent</string>
<string name="vibrate">Vibrate</string>
 ... etc ...

并在 res/values-de/strings.xml

<string name="silent">Leise</string>
<string name="vibrate">Vibrieren</string>
 ... etc ...

这样您就不必保持 2 个字符串数组最新并按顺序同步,只需原始字符串值即可。

"en" 事情很奇怪 - 在本地化文档中,Google 从未提及英语。他们只谈论 "default" 语言。有道理,因为价值观与语言无关。您可以用西班牙语编写默认值并有一个 values-en 文件夹,这没关系。

要检查的其他事项 - 您是否在项目文件夹中使用本地库?也许他们在 values-en 文件夹中有资源,这些资源正在被拾取并混淆构建系统?

我不知道 en 的来源,但是如果我在 xml 文件中定义默认资源的语言,如下所示

<resources
    xmlns:tools="http://schemas.android.com/tools"
    tools:locale="en">

错误消失...

可能,我只是猜测,一些 gradle 导入有 en 文件夹...

就我而言,问题是由于存在一个名为 values-en 的文件夹,该文件夹缺少其他文件夹中存在的一些文件。