Sam*_*mer 3 qt translation localization pluralize
QObject::tr()我一直用于翻译包含数字的字符串的函数有两种形式:
tr("There are %n foo(s)", 0, foo.size());
tr("%1: %2").arg(QLocale().toString(bar.size())).arg(bar.name());
Run Code Online (Sandbox Code Playgroud)
除了您希望在同一个字符串中进行本地化和多元化之外,这些会占用您希望字符串中的数字的大多数情况.当然你可以打破翻译,但是你必须猜测这个字符串是否会在所有语言的相同位置中断(我决定大部分时间没有资格做出决定).
该QLocale文档指出...
当格式字符串中的位置说明符包含"L"时,QString :: arg()使用默认语言环境格式化数字,例如"%L1"
......所以第二种形式可以改写为......
tr("%L1: %2").arg(bar.size()).arg(bar.name());
Run Code Online (Sandbox Code Playgroud)
......这表明你可以将第一个表格重写为......
tr("There are %Ln foo(s)", 0, foo.size());
Run Code Online (Sandbox Code Playgroud)
这将编译并在Linguist中显示为多元化,但有人知道这是否也将本地化数字?我在任何文档中都找不到任何说法.
是的,它会起作用:
#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();
}
Run Code Online (Sandbox Code Playgroud)
如果运行英语则输出:
"There are 123456 foos"
"There are 123,456 foos"
Run Code Online (Sandbox Code Playgroud)
如果运行德语输出(向任何实际的德语人士道歉):
"Es gibt 123456 fooen"
"Es gibt 123.456 fooen"
Run Code Online (Sandbox Code Playgroud)
唯一奇怪的事情是:
%Ln单数和复数翻译,而不仅仅是通常的翻译%n.| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |