Qt qsTr()处理复数

时间:2014-06-18 02:56:13

标签: qt translation qml tr

我正在开发和应用并希望翻译一些文本,问题是我想在QML中处理复数形式。

在c ++中,处理复数的方法很简单:

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

当我lupdate时,在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 im写作翻译:

%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

提前致谢

1 个答案:

答案 0 :(得分:3)

我无法接受这不起作用,所以我更进一步寻找解决方案,似乎很明显,但我不这么认为。

无效

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

有效,因为我们使用变量N

    var n = map.radio;
    var first = qsTr("%n songs", "0", n)