有两种形式的QObject::tr()
函数用于翻译包含数字的字符串:
tr("There are %n foo(s)", 0, foo.size());
tr("%1: %2").arg(QLocale().toString(bar.size())).arg(bar.name());
除了您希望在同一字符串中进行本地化和复数之外,这些帐户适用于您希望字符串中包含数字的大多数情况。当然你可以打破翻译,但是你必须猜测这个字符串是否会在所有语言的相同位置中断(我决定大部分时间没有资格)。
QLocale documentation表示......
QString :: arg()使用默认语言环境来格式化数字,当格式字符串中的位置说明符包含“L”时,例如“%L1”
...所以第二种形式可以改写为......
tr("%L1: %2").arg(bar.size()).arg(bar.name());
...这表明你可以将第一个表格重写为......
tr("There are %Ln foo(s)", 0, foo.size());
这将编译并在Linguist中显示为多元化,但有人知道这是否也会将数字本地化?我在任何文档中都找不到任何说法。
答案 0 :(得分:7)
是的,它会起作用:
#include <QtCore>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// QLocale::setDefault(QLocale(QLocale::German));
QLocale::setDefault(QLocale(QLocale::English));
QTranslator qtTranslator;
// qtTranslator.load("foo_de", qApp->applicationDirPath());
qtTranslator.load("foo_en", qApp->applicationDirPath());
a.installTranslator(&qtTranslator);
int foo_count = 123456;
QString str1 = QObject::tr("There are %n foo(s)", "foo", foo_count);
QString str2 = QObject::tr("There are %Ln foo(s)", "foo", foo_count);
qDebug() << str1;
qDebug() << str2;
return a.exec();
}
如果正在运行英语输出:
"There are 123456 foos"
"There are 123,456 foos"
如果运行德语输出(对任何实际的德语人士道歉):
"Es gibt 123456 fooen"
"Es gibt 123.456 fooen"
唯一奇怪的事情是:
%Ln
保留在单数和复数翻译中,而不仅仅是通常%n
。答案 1 :(得分:1)
(Qt 4.x) documentation here似乎意味着它会复数化和本地化,因为它是在“处理复数”一节下提出的。
后来的Qt 5.x documentation here似乎是一个逐字副本,这似乎很遗憾,因为这不是QObject::tr(...)
特别好记录的用法。