strings.xml中的CHAR_LIMIT的目的是什么?

What is the purpose of CHAR_LIMIT in strings.xml?

为什么有些 Android 项目会在 strings.xml 中每个字符串上方的注释中列出一个 "CHAR_LIMIT"?例如,来自 https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/strings.xml:

<!-- [CHAR LIMIT=25] String for confirmation button to enable a feature gated by the battery saver warning-->
<string name="confirm_battery_saver">OK</string>
<!-- [CHAR_LIMIT=NONE] Battery saver: Feature description, with a "learn more" link. -->
<string name="battery_saver_description_with_learn_more">To extend battery life, Battery Saver:\n&#183;Turns on Dark theme\n&#183;Turns off or restricts background activity, some visual effects, and other features like \u201cHey Google\u201d\n\n<annotation id="url">Learn more</annotation></string>

谷歌搜索出现了一些其他例子,但没有解释。我不相信 Android 文档涵盖了这一点。而且不像 <xliff:g> 这样的标签,它似乎不是 Android 的官方功能组件。我最好的猜测是,这是一些项目用来指示 "when you translate this, make sure the translated version doesn't have more than X characters or else it will break the UI!" 或者,反之亦然,"if you're using this String, make sure the UI still looks good with a String X characters long"

的约定

我的想法是 UI 应该始终构建得尽可能灵活,考虑到不同长度的翻译的可能性,以及不同文本大小的可能性。此外,翻译人员应努力使译文与原文的大小大致相同,而不是在翻译时从 10 个字符变成 50 个字符。所以我认为这个 "CHAR_LIMIT" 完全没有必要,可以删除。 (我问,因为我正在修改一个使用它的旧开源项目。)

我对 "CHAR_LIMIT" 的理解是否正确,或者它的用途是什么,应该使用它吗?

when you translate this, make sure the translated version doesn't have more than X characters or else it will break the UI!" Or perhaps, vice versa, "if you're using this String, make sure the UI still looks good with a String X characters long

我的理解大概就是这样。

我搜索了一下这条线索的用处,只找到一个地方:stringslint.py。这是一个似乎用于 strings.xml 文件的 lint 脚本。也许您正在谈论的项目使用了这个脚本?文件文档说:

Enforces common Android string best-practices. It ignores lint messages from a previous strings file, if provided.

Usage: stringslint.py strings.xml
Usage: stringslint.py strings.xml old_strings.xml

In general:

  • Errors signal issues that must be fixed before submitting, and are only used when there are no false-positives.
  • Warnings signal issues that might need to be fixed, but need manual inspection due to risk of false-positives.
  • Info signal issues that should be fixed to match best-practices, such as providing comments to aid translation.

这与您所说的一致。它是翻译人员的线索,但也可用于 lint 检查,因此语法易于解析。

我还尝试搜索解释如何翻译 Android 系统的页面,希望在某处提及 CHAR LIMIT。但是好像社区不能贡献自己的翻译,所以我没有找到这样的页面。

请注意,对于某些字符串资源,还有一个以相同方式声明的 BACKUP_MESSAGE_ID。好像跟系统设置app有关,不过我就不知道了。

编辑:我找到了另一个使用它的脚本:https://chromium.googlesource.com/chromium/src/+/master/tools/grit/grit/tool/android2grd.py,尽管这次是 CHAR-LIMIT