6

我有一个翻译成 3 种语言的应用程序:英语、德语、波兰语

所以我有这三个文件夹用于项目中的语言:

values
strings.xml

values-en
strings.xml

values-de
strings.xml

values-pl
strings.xml

我已经意识到,如果我将所有字符串放入 values 文件夹中并且波兰语版本中缺少一些字符串,则应用程序在访问波兰语版本中缺少的字符串时会崩溃。

如果系统在 values-pl 文件夹中没有找到它,我本来希望系统只是从默认值文件夹中获取字符串。

有没有办法捕捉这些潜在的丢失字符串崩溃?即使我可以在编译器中收到任何语言的字符串丢失的警告,也可以吗?

编辑和添加

实际上,默认值中也缺少另一个字符串....所以感谢您的回答/评论!

但是现在我还测试了默认 strings.xml 文件中只缺少一个字符串但存在于所有其他文件中的情况。我没有得到任何警告或其他任何东西。

因此,在这种情况下,如果所有字符串都存在于 de,en,pl 中,但默认情况下缺少一个,则应用程序会在中国崩溃(我当然理解,因为缺少默认值)。

但困扰我的是,我找不到任何方法来检查代码中所有引用字符串的完整性。这就是我访问缺少的字符串的方式:

context.getString(R.string.MYTRING_abc),
4

3 回答 3

3

In eclipse menu Window --> Properties --> Android --> Lint Error Checking in the Correctness:Messages section set MissingTranslation to Error in the Severity box. When compile in your default values string.xml each untranslated string would be marked. Most of the time after build you have to click the refresh icon in the Link Warnings window (next to Outline window) to have these errors shown.
If there is error after fixing them you have to clean your project, otherwise Eclipse won't built and still show these errors.

于 2013-04-25T22:37:01.157 回答
2

如果系统在 values-pl 文件夹中没有找到它,我本来希望系统只是从默认值文件夹中获取字符串。

它适用于<string>s,但不适用于 s 的元素<string-array>。如果其中一个翻译<string-array>的元素数量不正确,则如果应用程序尝试访问缺少的元素,您将遇到崩溃。过去几年我的解决方案是将每个字符串数组存储在一个非翻译的 XML 文件中,引用可翻译的字符串。

资源/值/misc.xml:

<?xml version="1.0" encoding="utf-8"?>
<!-- Resources that are neither styles nor strings to be translated. -->
<resources>
  <string-array name="notification_line_content_entries">
    <item>@string/time_remaining</item>
    <item>@string/time_since_status_change</item>
    <item>@string/vital_signs</item>
  </string-array>
</resources>

这样,如果一个独立的字符串没有被翻译,该数组仍然有效,并且您会退回到该特定值的默认翻译。

当然,另一种可能性是,正如评论中所建议的那样,您没有为res/values/.

于 2013-04-25T22:51:55.347 回答
1

Android Studio中:

Settings -> Editor -> Inspections -> (search for or find) Incomplete translation

设置为infowarningError阻止在您按下 时创建应用程序create signed APK

根据我自己的经验,我只在创建构建时收到此错误(通过 USB 调试进行非调试,这意味着当它是签名构建时)但将不完整的翻译更改为warning(所以我收到通知它尚未完成,但是万一我忘记了,它不会被忽略)(或info就此而言)允许构建应用程序,并且它的功能就像在不完整翻译进入默认值的调试中一样。

但是,如果您在调试时也遇到错误,这应该仍然有效并防止在创建 APK 时崩溃

于 2017-06-07T19:19:05.203 回答