【问题标题】:Avoid Android Lint complains about not-translated string避免 Android Lint 抱怨未翻译的字符串
【发布时间】:2012-09-17 10:19:37
【问题描述】:

是否可以指定 value-* 目录中的文件中的字符串故意不翻译成其他语言?我有一堆所有语言通用的字符串,不需要翻译,所以我在values 目录中创建了一个unlocalized-strings.xml 文件。运行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.

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

【问题讨论】:

标签: android android-resources android-lint


【解决方案1】:

就是你的字符串文件中tools命名空间的ignore属性,如下:

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

【讨论】:

  • 给我解析 XML 时出错:未绑定前缀
  • 这很好用,但我必须去Project-&gt;Clean 彻底消除错误。
  • 至少eclipse没有强迫我们翻译所有东西,包括像ids.xml和analytics.xml这样的奇怪的字符串文件夹。
  • 这应该是仅用 2 行代码即可解决所有问题的公认答案。
【解决方案2】:

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

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

【讨论】:

  • 这给出了'不可翻译的资源应该只在基值/文件夹中定义。
  • 没错。如果你不想翻译一个字符串,你应该只在“基本值/文件夹”中定义它,这意味着不要在翻译后的值/文件夹中输入字符串。
  • @CyrilLeroux 的答案更全面,应该标记为正确的答案,因为它显示了将所有不可翻译的字符串放在一个文件中的选项。
  • 这可行,但我认为通过将实际可翻译的字符串标记为“不可翻译”来抑制错误消息,这不是解决问题的最佳方法。我们只是选择暂时不翻译一些字符串。但这并不意味着它们不可翻译。
  • 我只想用一种语言输入字符串,那就是德语(de)语言(不是默认的英语)。我把它放在那里,当我尝试发布构建时,它给了我错误。这种情况该怎么办?
【解决方案3】:

添加到build.gradle:

android {
     lintOptions {
        disable 'MissingTranslation'
    }
}

【讨论】:

  • 处理自动生成的字符串资源唯一可行的解​​决方案。谢谢。
  • 不,不应该,基于以下问题:“我不想对整个项目禁用此检查”
  • @Giraffe Lion 你应该把它作为一个不同的问题发布并自己回答,谢谢你的解决方案,以前我不得不手动禁用它。
  • 这禁用了应尽可能避免的整个检查。我不明白为什么它有这么多票。
【解决方案4】:

我知道有3种方法:

按值应用修改值:在&lt;string&gt; 定义上设置属性translatable="false"

<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

【讨论】:

  • 如果我们把我们的字符串放到文件donottranlate.xml中,是不是就不需要再添加translatable="false"标签了?
  • 是的。我在所有项目中都使用了 donottranslate-strings.xml 文件。工作正常。试试看,很有用!
【解决方案5】:

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

【讨论】:

  • 这可能是一个烦人的错误,但当您不小心忘记将新字符串翻译成您的一种应用语言时,它可以为您节省时间。
【解决方案6】:

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

translatable="false"

【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

      “项目属性 -> Android Lint Preferences -> 选择 MissingTranslation -> Swtich To Ignore In Severity”,

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

      【讨论】:

      • 有没有办法在 Android Studio 中做到这一点?我找不到与 lint 相关的设置
      【解决方案9】:

      另一种方法是使用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)
      

      【讨论】:

        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2015-12-13
            • 1970-01-01
            • 2012-06-07
            • 2016-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多