面向区域用户的有效Android资源覆盖

时间:2019-02-14 18:35:27

标签: android android-studio internationalization

我有一个最初使用英国英语编写的应用程序,因此res/values/strings.xml中的所有字符串都使用英国英语。

我想提供美国英语的“翻译”。在大多数情况下,美国和英国的英文完全相同,因此在美国翻译文件中,我只想指定一些会受到影响的字符串更改(大约120个中的10个)。

我尝试创建一个res/values-en-rUS/strings.xml文件(此名称由Android Studio提供),在其中我仅添加了这10个不同的字符串。但是Android Studio在我的主strings.xml中给我所有其余字符串:"XXX" is not translated in "en" (English)的错误。

那么,我如何才能有效地提供美国英语的翻译-即仅指定10行,而不必重复所有其他行?复制总是不利于代码维护!

1 个答案:

答案 0 :(得分:2)

您可以使用translatable="false"设置来标记不应翻译的字符串资源。像这样:

<resources>
    <string name="app_name" translatable="false">EasyApp</string>
    <string name="action_settings">Settings</string>
    <string name="easy_app">I am a Simple App!</string>
    <string name="next_page">Next Page</string>
    <string name="second_page_message">I am the Second Page!</string>
    <string name="title_activity_second">SecondActivity</string>
</resources>

在上面的示例中,无需在其他语言环境中翻译app_name。这样,您可以在默认的strings.xml中提供英国版本,并用translatable="false"标记您要在美国版本中维护的所有资源都相同。在res/values-en-rUS/strings.xml中,您只需要添加需要以美式英语维护的邮件即可。

请注意,如果您打算使用其他语言环境/语言,则此方法可能不合适,因为您可以通过这种方式指定translatable="false"资源在所有语言环境中都是相同的。

如果需要更多详细信息,可以检查Configure untranslatable section行。