避免Android Lint抱怨未翻译的字符串

时间:2012-09-25 20:44:18

标签: android android-resources android-lint

是否可以指定value-*目录中的文件中的字符串故意不转换为其他语言?我有一堆常用于所有语言的字符串,不需要翻译,因此我在unlocalized-strings.xml目录中创建了一个values文件。运行Android Lint以检查它一直存在的问题一些翻译缺失..我不想在整个项目中禁用此检查,我只想在某些XML文件中禁用它..是否可能?

"title_widget_updater_service" is not translated in de, en, en-rUS, it

Issue: Checks for incomplete translations where not all strings are translated
Id: MissingTranslation

If an application has more than one locale, then all the strings declared in one language     
should also be translated in all other languages.

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 require all regions to 
provide a full translation by setting the environment variable 
ANDROID_LINT_COMPLETE_REGIONS.

如何定义未本地化字符串的区域

11 个答案:

答案 0 :(得分:222)

这是您的字符串文件中ignore命名空间的tools属性,如下所示:

<?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>

答案 1 :(得分:158)

我不知道如何忽略所有文件,但你可以使用以下字符串逐字地完成:

<string name="hello" translatable="false">hello</string>

答案 2 :(得分:153)

添加到build.gradle

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

答案 3 :(得分:23)

我知道有三种方式:

按值应用修改值:在translatable="false"定义上设置属性<string>

<string name="account_setup_imap" translatable="false">IMAP</string>

如果您有大量不应翻译的资源,可以将它们放在名为donottranslate.xml的文件中,而lint会将所有这些资源都视为不可翻译的资源。

我在浏览Hackers Keyboard project sources时发现的另一种方式:
您可以将前缀donottranslate-添加到资源文件中。 与前面的示例一样,lint将考虑所有这些不可翻译的资源 在您的情况下,您可以将unlocalized-strings.xml替换为donottranslate-strings.xml。 它似乎有效,但我还没有找到任何关于此提示的文档。

请参阅:Android Tools Project Site: Non-translatable Strings

答案 4 :(得分:12)

这是一个Android Studio解决方案,用于禁用此致命的Lint错误:

enter image description here

答案 5 :(得分:3)

我认为您需要而不是禁用lint是用属性

标记它们
translatable="false"

答案 6 :(得分:2)

创建一个文件名以&#34; donottranslate &#34;开头的资源文件(例如 donottranslate.xml donottranslate_urls.xml 等),lint在检查缺失的翻译时会完全忽略其字符串。

答案 7 :(得分:1)

如果你想在缺少翻译时检查lint,你可以去

&#34;项目属性 - &gt; Android Lint偏好设置 - &gt;选择MissingTranslation - &gt; Swtich在严重性中忽略&#34;,

希望这有助于其他人因为我遇到这个问题:)

答案 8 :(得分:1)

另一种方法是使用resValuebuildConfigField将字符串添加到gradle文件中。这样的事情:

buildTypes {
    debug {
        buildConfigField "string", "app_name1", "App Name"
        resValue "string", "app_name2", "App Name"
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField "string", "app_name1", "App Name"
        resValue "string", "app_name2", "App Name"
    }
}

用途:

// buildConfigField
BuildConfig.APP_NAME1

// resValue
getString(R.string.app_name2)

答案 9 :(得分:0)

要避免在Android Studio中出现警告,请打开偏好设置==&gt;检查,取消选中“不完整的翻译”。但它不会影响Gradle构建。

答案 10 :(得分:0)

还有一个“翻译编辑器-在翻译编辑器中为所有语言环境编辑翻译。”

只需在字符串上选中“不可翻译”框即可。