Существует две формы функции 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 как множественное число, но знает ли кто-нибудь, локализует ли это число? Я не могу найти ничего, что бы говорило так или иначе в любой документации.