127

是否可以指定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.

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

4

11 回答 11

237

它是您的字符串文件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>
于 2012-12-10T08:32:57.533 回答
162

我不知道如何忽略所有文件,但您可以使用以下字符串逐个字符串执行此操作:

<string name="hello" translatable="false">hello</string>
于 2012-09-25T23:54:53.460 回答
153

添加到build.gradle

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}
于 2015-10-13T09:09:09.843 回答
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 工具项目网站:不可翻译的字符串

于 2014-05-05T10:21:30.070 回答
13

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

在此处输入图像描述

于 2014-09-24T23:57:35.257 回答
2

我认为你需要而不是禁用 lint 是用属性标记它们

translatable="false"
于 2012-09-25T21:26:25.067 回答
2

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

于 2015-07-01T14:02:50.623 回答
1

如果你想关闭 lint 检查丢失的翻译,你可以去

“项目属性 -> Android Lint 首选项 -> 选择 MissingTranslation -> 切换到忽略严重性”,

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

于 2014-04-29T09:51:10.930 回答
1

resValue另一种方法是使用or将字符串添加到 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)
于 2016-05-17T23:31:59.337 回答
0

为避免在 Android Studio 中出现警告,请打开 Preferences ==> Inspections,取消选中“Incomplete translations”。但它不会影响 Gradle 构建。

于 2014-10-10T18:21:23.853 回答
0

还有“翻译编辑器”(右击string.xml“打开翻译编辑器”)。

然后选中字符串上的“不可翻译”框。

https://developer.android.com/studio/write/translations-editor

于 2019-03-06T08:37:56.507 回答