最佳实践:针对语言无关字符串的处理方法

3

我的安卓应用包含许多与语言无关的字符串,例如资费和支持电话号码。我已经在/res/values 中放置了一个XML文件,其中包含如下内容:

<string name="helpdesk_number">0900 12345678</string>
<string name="helpdesk_tariff">60p</string>
<string name="helpdesk_address1">221B Baker Street</string>
<string name="helpdesk_address2">London NW1 6XE</string>

Lint报告说这些字符串没有被翻译成其他语言:

区域设置de缺少以下内容的翻译: helpdesk_number, helpdesk_number, helpdesk_address1, helpdesk_address2... (另外还有56个)

虽然在其他语言中显示不同的费率可能是有意义的,但客服只在一个国家。

是否将这些字符串复制到其他语言中是有意义的?还是有一些方法可以让Lint忽略这些特定的字符串(或字符串文件)?

6个回答

5
即将到来的(希望很快)ADT17将提供一些功能,以忽略某些lint警告:

http://tools.android.com/recent/ignoringlintwarnings

http://tools.android.com/tips/lint/suppressing-lint-warnings

使用ADT 17,您可以在项目文件夹中放置一个lint.xml文件,其中包含:<issue id="MissingTranslation" severity="ignore" />。或者您也可以通过每个字符串执行:tools:ignore="MissingTranslation"。但是文档并不完全清楚,我目前没有时间进行beta测试。跟进一下:ADT17在你提问后不久发布,应该解决了你的问题!

我在开发者预览版中看到了一些相关的注释,但没有意识到它是如此具体。迫不及待想试试! - Paul Lammertsma
ADT版本17确实可以忽略单个资源文件的MissingTranslation Lint警告。 - Paul Lammertsma

4
在最近的 Lint 版本中,您可以像这样忽略“MissingTranslation”字符串:具体的字符串。 strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>    

    <!--suppress MissingTranslation -->
    <string name="some_string">ignore my translation</string>
    ...

</resources>

http://tools.android.com/tips/lint/suppressing-lint-warnings


3

来自 Lint 工具的信息:

如果该字符串不应翻译,您可以在元素上添加属性 translatable="false",或者在名为 donottranslate.xml 的资源文件中定义所有不需翻译的字符串。另外,您还可以使用 tools:ignore="MissingTranslation" 属性忽略此问题。

只需在默认 res/values 文件夹中创建一个名为 "donottranslate.xml" 的文件,Lint 将忽略它。我将所有我的应用程序键/ID,以及首选项都放在这里,因为它们不需要被“翻译”,并且只会占用其他文件中的空间。


3

避免出现此消息的另一种方法是将其添加到您的资源文件中:

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

1
 > Best practice for language-independent strings

在我的应用程序中,我有两个字符串资源文件,一个名为“NonTranslatabable.xml”,将接收那些不需要被翻译的字符串(例如appName、fileNames等)。
当将应用程序翻译成其他语言时,我无需考虑哪些字符串需要翻译。

谢谢,但那实际上是我的当前情况。Lint会抱怨该文件中的字符串没有翻译。 - Paul Lammertsma
抱歉,我误解了你的问题标题。 - k3b

0
将以下内容添加到Gradle应用程序文件的“android”部分:

lintOptions {
    disable 'MissingTranslation'
}

这将完全禁用lint检查,我不建议这样做。 - Paul Lammertsma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接