Qt qsTr () обработка множественного числа

Я разрабатываю и применяю и хочу перевести какой-то текст, проблема в том, что я хочу обрабатывать в QML множественные числа.

В С ++ способ обработки множественного числа очень прост:

int n = messages.count();
showMessage(tr("%n message(s) saved", 0, n));

и переведу без проблем

источник: https://doc.qt.io/qt-5/i18n-source-translation.html#handling-plurals

Когда я пытаюсь сделать то же самое с QML, не работает. После тщательного изучения некоторой литературы и некоторых комментариев я обнаружил «решение», что на самом деле люди сообщают об ошибке.

var second = qsTr("%b radios", "0", map.radio).arg(map.radio)

источник: https://bugreports.qt.io/browse/QTBUG-11579

Когда я обновляюсь, в QtLinguistic появляются два поля для формы множественного и единственного числа, но в приложении это не работает.

Я пробовал несколько модификаций, таких как:

    var a = map.totalSongs;
    var first = qsTr("%a songs", "0", parseInt(a))
    var second = qsTr("%b radios", "0", map.radio)

    var first = qsTr("%a songs", "0", parseInt(a)).arg(map.totalSongs)
    var second = qsTr("%b radios", "0", map.radio).arg(map.radio)

    var first = qsTr("%a songs", "0", a)
    var second = qsTr("%b radios", "0", b)

В QtLinguistic я пишу перевод:

%b radio - Singular
%b radios - Plural

Любая модификация не работает.

Может ли кто-нибудь сказать мне, как использовать qstr () для обработки множественного числа?

Другой вопрос, связанный с: допустим, я хочу иметь текст «% 1 песни -% 2 радио», где на испанском языке должно получиться

//As example
if(%1 = 10 && %2 = 10) => "10 canciones -  radios"
else if(%1 = 1 && %2 = 10) => "1 cancion - 10 radios"
else if(%1 = 10 && %2 = 1) => "10 canciones - 1 radio"

Как это сделать? Я думаю, что ни qstr (), ни tr () не могут справиться с этой ситуацией., Но просто хочу проверить это с вами, ребята: D

заранее спасибо


person David Sánchez    schedule 18.06.2014    source источник


Ответы (1)


Я не мог согласиться с тем, что это не работает, поэтому я пошел немного дальше и нашел решение, которое может показаться очевидным, но я не думаю, что это так.

Не работает

    var a = map.totalSongs;
    var first = qsTr("%a songs", "0", a)

Работает, потому что мы используем переменную N

    var n = map.radio;
    var first = qsTr("%n songs", "0", n)
person David Sánchez    schedule 18.06.2014
comment
Важно %n, а не имя переменной в коде! - person rubenvb; 19.05.2016
comment
Обратите внимание, что это указано в документации здесь: doc. qt.io/qt-5/i18n-source-translation.html#handling-plurals Вы также можете использовать% Ln, чтобы также использовать правила локализации для самого номера. - person André; 04.05.2017