48

是否可以在没有 Lint 抱怨MissingTranslation的情况下在单独的资源文件中翻译一些字符串,但不是全部?

例如:我的应用程序的字符串都在res/values/strings.xml中。其中一根弦是

<string name="postal_code">Postal Code</string>

由于“邮政编码”在美国通常称为“邮政编码”,因此我想添加另一个资源res/values-en-rUS/strings.xml,其内容为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="postal_code">Zip Code</string>
</resources>

但是,Lint 抱怨values/strings.xml中的其他字符串,而不是values-en-rUS/strings.xml中的其他字符串

tools:ignore我意识到您可以通过在values/strings.xml中指定来抑制警告。但这是不可取的,因为 Lint 警告在翻译成另一种语言时实际上很有用。

相反,是否可以抑制values-en-rUS/strings.xml文件中的警告,例如告诉 Lint 在查找丢失的翻译时不要使用该文件作为标准?

4

8 回答 8

69

禁用 MissingTranslations 检查的一个好方法是在模块特定build.gradle文件中添加选项。

android {

    lintOptions{
        disable 'MissingTranslation'
    }

    //other build tags
}

如果字符串不存在于特定于语言环境的字符串文件中,它将从默认文件中获取字符串,该文件通常为strings.xml.

于 2015-09-20T06:14:59.263 回答
41

我根据这个答案找到了一个更好的解决方案:https ://stackoverflow.com/a/13797364/190309

只需添加ignore="MissingTranslation"到您的string.xml,例如:

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.android.com/tools"
  tools:ignore="MissingTranslation" >

  <!-- your strings here; no need now for the translatable attribute -->

</resources>
于 2015-02-01T03:00:46.830 回答
25

Lint 支持部分区域翻译,但需要知道默认字符串是什么语言。这样,它可以将部分区域翻译与不同语言环境中的缺失翻译区分开来。

要在 中指定语言环境values/strings.xml

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

运行时引用 lint 命令行工具lint --show

By default this detector allows regions of a language to just provide a
subset of the strings and fall back to the standard language strings. [...]

You can tell lint (and other tools) which language is the default language
in your res/values/ folder by specifying tools:locale="languageCode" for
the root <resources> element in your resource file. (The tools prefix
refers to the namespace declaration http://schemas.android.com/tools.)

来源:https ://android.googlesource.com/platform/tools/base/+/master/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/TranslationDetector.java# 88

将语言环境规范添加到您的默认语言文件中,您应该不会收到该错误en-rUS,但仍会收到任何其他丢失翻译的通知。

于 2015-04-28T22:35:27.940 回答
15

这似乎还没有回答,所以我向您展示一个解决方案:

在您的 DEFAULT xml 文件中,您可以定义不需要翻译的字符串,如下所示:

<string name="developer" translatable="false">Developer Name</string>

这个字符串不需要翻译,lint 也不会抱怨它......

于 2016-06-17T18:46:57.410 回答
14

这是一个瑞士刀答案,因此您可以根据您所处的情况忽略缺少的翻译消息:

  • 忽略所有MissingTranslation消息:

    编辑您的build.gradle文件:

    android {
        lintOptions{
            disable 'MissingTranslation'
        }
    }
    
  • 忽略MissingTranslation具体resources.xml文件中的所有消息:

    <?xml version="1.0" encoding="utf-8"?>
    <resources
        xmlns:tools="http://schemas.android.com/tools"
        tools:ignore="MissingTranslation">
    
          <!-- your strings here; no need now for the translatable attribute -->
    
    </resources>
    
  • 仅忽略MissingTranslation一个字符串的消息:

    <string name="developer" translatable="false">Developer Name</string>
    
于 2018-11-08T11:05:18.760 回答
1

如果使用gradle 7的情况:

lint {
        disable("MissingTranslation")
    }
于 2021-08-10T07:06:45.077 回答
1

对于 lint 配置文件lint.xml

<issue id="MissingTranslation" severity="ignore" />
于 2021-07-27T09:46:51.723 回答
0

如果您使用的是 Eclipse,请查看 Lint 警告视图的工具栏按钮。其中之一称为“忽略文件”。这应该会有所帮助,但前提是 Lint 将错误分配给您的“美国”文件。该按钮只是修改项目中的 lint.xml 文件,因此您可以轻松地进行调查(和撤消)。

有关该文件特定抑制的更多详细信息,请参见http://tools.android.com/tips/lint/suppressing-lint-warnings

于 2013-08-15T11:44:35.543 回答