升级到Gradle 3.3后{MissingTranslation错误

时间:2017-03-14 14:09:38

标签: android-studio build localization android-gradle lint

自从升级到Gradle 3.3后,由于缺少翻译错误,我无法构建代码:

  

错误:xxx未翻译成“af”(南非荷兰语),“am”(阿姆哈拉语),“ar”(阿拉伯语),“az”(阿塞拜疆语),“az-AZ”(阿塞拜疆语:阿塞拜疆语),是“(白俄罗斯语),”bg“(保加利亚语),”ca“(加泰罗尼亚语),[...],”zh-TW“(中文:台湾),”zu“(祖鲁语)[MissingTranslation]

大多数报告的语言都是我的项目中包含的第三方模块支持的语言,现在它似乎定义了整个项目支持的语言,给出了所有未翻译的字符串的这种错误进入上述语言。在升级到Gradle 3.3之前,这没有造成任何问题。

我考虑了以下解决方案:

  1. 从其他模块中删除多余的翻译。我想避免这种情况,因为这些模块是外部的并且不必要地改变它们会真正损害我的项目的可维护性。
  2. 禁用“不完整翻译”Lint检查 - 关于SO的类似问题的最常见建议。这是次优的,因为我想知道我的代码中缺少的翻译(到目前为止工作)。除此之外,禁用检查并没有消除错误。
  3. 按照this answer中的说明在build.gradle中定义支持的配置。我喜欢这个选项(指定语言而不是依赖于模块中可用的翻译),但它也做了一些奇怪的事情:我发现了标记为translatable = false的字符串的翻译错误。
  4. 目前,我正在降级到之前的Gradle版本。但修复这些构建错误的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

希望自几个月前我发布这个问题以来可能有更正,我检查了情况。

似乎问题是Gradle插件2.3.0引入的,而不是我在问题中建议的Gradle 3.3本身。降级插件避免了错误,但很难成为长期解决方案。

我发现问题中的选项3是处理它的最佳方法:将其添加到应用程序的build.gradle:

android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

这在[{3}}中有描述,如上所述,也在Googles documentation中。它会删除所有不必要的资源 - 以及警告/错误。

引用文档:

  

Gradle资源缩减器仅删除应用程序代码未引用的资源,这意味着它不会删除不同设备配置的备用资源。如有必要,您可以使用Android Gradle插件的resConfigs属性删除您的应用不需要的备用资源文件。

     

例如,如果您使用的是包含语言的库   资源(如AppCompat或Google Play服务),然后是您的APK   包括那些中的消息的所有翻译语言字符串   库是否将您应用的其余部分翻译为相同的   语言与否。如果您只想保留您的语言   app正式支持,你可以使用指定那些语言   resConfig属性。未指定语言的任何资源都是   除去。

我得到的“误报”(缺少不可翻译字符串的翻译错误)是针对在多个模块中定义的字符串。重命名字符串或为它们提供翻译解决了这个问题。这也似乎是Gradle插件2.3.0引入的。

答案 1 :(得分:0)

In build.gradle add below code

lintOptions {
    disable 'MissingTranslation'
}