检查字符串是否等于多语言应用程序中的qsTr字符串是否安全 - qml

时间:2016-07-25 21:30:06

标签: qt qml

那么如果我有以下属性怎么办:

property string someString: qsTr("Text")

我有以下功能:

function isEqual(toThisString) {
  if (someString === toThisString) {
    return true
  } else 
    return false
  }
}

我的问题是,如果我的应用程序翻译了除英语之外的其他语言,该怎么办?该功能是否仍会与" Text"或者它会与翻译后的字符串进行比较吗?

1 个答案:

答案 0 :(得分:3)

Qt的一个例子:

const QString english = "Hello world");
const QString spanish = QObject::tr(english); // Hola mundo

是平等吗?

qDebug() << "Is equal? " << (english == spanish); 
qDebug() << "Is equal? " << (QObject::tr(english) == spanish);

结果:

Is equal? false
Is equal? true

您必须翻译每个字符串,并且应该完全相同的字符串。这很难管理,看起来像灾难的食谱。

您必须使用替代数据字段来比较值,避免使用字符串。 QCombobox的示例:

enum Countries {EEUU = 0, Spain, France};
QCombobox* combo = new QCombobox;
combo->addItem(QObject::tr("EEUU"), EEUU);
combo->addItem(QObject::tr("Spain"), Spain);
combo->addItem(QObject::tr("France"), France);

要获取所选国家/地区或与组合模型中的字段进行比较,您可以使用currentData()函数或类似的内容。