QObject::tr()
我一直在使用两种形式的函数来翻译包含数字的字符串:
tr("There are %n foo(s)", 0, foo.size());
tr("%1: %2").arg(QLocale().toString(bar.size())).arg(bar.name());
这些说明了大多数情况下,您需要在字符串中使用数字,除非您想在同一字符串中进行本地化和复数。当然,您可以分解翻译,但您必须猜测该字符串是否会在所有语言的相同位置中断(我大部分时间都没有资格做出这个决定)。
QLocale文档指出...
QString::arg() 在格式字符串中的位置说明符包含“L”时使用默认语言环境来格式化数字,例如“%L1”
...所以第二种形式可以重写为...
tr("%L1: %2").arg(bar.size()).arg(bar.name());
...这表明您可以将第一种形式重写为...
tr("There are %Ln foo(s)", 0, foo.size());
这将编译并在 Linguist 中显示为复数形式,但有谁知道这是否也会将数字本地化?我在任何文档中都找不到任何说明。