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


119

是否可以指定value-* 目录中文件中的字符串不是故意翻译成其他语言?我有一堆所有语言都通用的字符串,不需要翻译,因此我已经unlocalized-strings.xmlvalues目录中创建了一个文件。要在整个项目上禁用此检查,我只想在某些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.

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


Answers:


159

我不知道如何忽略所有文件,但是您可以使用以下命令逐个字符串地进行处理:

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

1
这给出了“不可翻译的资源应仅在基本值/文件夹中定义”。
anon58192932 2013年

2
没错。如果您不希望翻译字符串,则只能在“基本值/文件夹”中定义它,这意味着不要在翻译后的值/文件夹中输入字符串。
路易斯

1
@CyrilLeroux答案较为全面,应标记为正确答案,因为它显示了将所有不可翻译字符串放入一个文件的选项。
Yoel Gluschnaider

这行得通,但我认为不是通过将实际可翻译的字符串标记为“不可翻译”以抑制错误消息来解决问题的最佳方法。我们只是选择暂时不翻译某些字符串。但这并不意味着它们不可翻译。
冯子立

我只想用一种语言输入字符串,而这是德语(de)语言(不是默认的英语)。我把它放在那里,当我尝试发布版本时,它给了我错误。在这种情况下该怎么办?
阿纳拉·梅塔

227

它是您的字符串文件中名称空间的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>

<resources tools:ignore =“ MissingTranslation”>给我错误分析XML:未绑定前缀
anon58192932 2013年

5
这很好用,但是我必须去确定Project->Clean地删除错误。
xonya 2013年

至少eclipse并没有强迫我们翻译所有内容,包括ids.xml和analytics.xml之类的奇数字符串文件夹。
Androidcoder 2015年

2
仅用两行代码即可解决所有问题,这是应该接受的答案。
nhoxbypass

153

添加到build.gradle

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

7
唯一可用于处理自动生成的字符串资源的解决方案。
SqueezyMo 2015年

6
不,它不应该基于以下问题:“我不想对整个项目禁用此检查”
Yoel Gluschnaider

@Giraffe Lion您应该将其发布为其他问题并自己回答,感谢您的解决方案,以前我不得不手动禁用它。
Diljeet

1
这禁用了整个检查,应尽可能避免。我不明白为什么它有这么多票。
塔斯玛尼亚克

23

我知道3种方法:

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

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

如果您有很多不应该翻译的资源,则可以将它们放在一个名为的文件中,donottranslate.xml并且lint会将其视为所有不可翻译的资源。

我在浏览Hackers Keyboard项目源代码时发现的另一种方法:
您可以将前缀添加donottranslate-到资源文件中。与前面的示例一样,lint将考虑所有这些资源都是不可翻译的资源。
你的情况,你可以替换unlocalized-strings.xmldonottranslate-strings.xml。它似乎可行,但是我没有找到有关此技巧的任何文档。

请参阅:Android工具项目站点:不可翻译的字符串


的确,如果我们将字符串放入文件中donottranlate.xml,就不需要再添加translatable="false"标签了吗?
Yuchen Zhong

是的 我在所有项目中都使用了donottranslate-strings.xml文件。工作良好。试试看,它非常有用!
西里尔·勒鲁

12

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

在此处输入图片说明


2
这可能是一个令人讨厌的错误,但是当您不小心忘记将新字符串转换为您的一种应用程序语言时,它可以为您节省。
伊拉德·纳瓦


2

创建一个以“ donottranslate ” 开头的文件名的资源文件(例如,donottranslate.xmldonottranslate_urls.xml等),当检查缺少的翻译时,lint将完全忽略其字符串。


1

如果您想关闭检查丢失的翻译的棉绒,可以去

“项目属性-> Android Lint首选项->选择MissingTranslation->要严重程度忽略的重载”,

希望这可以帮助其他人,因为我刚遇到这个问题:)


2
有没有办法在Android Studio中做到这一点?我无法找到有关皮棉设置
adrian_88

1

另一种方法是使用resValue或将字符串添加到gradle文件中buildConfigField。像这样:

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)

0

为避免在Android Studio中出现警告,请打开“首选项” ==>“检查”,然后取消选中“翻译不完整”。但这不会影响Gradle的构建。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.