Есть ли способ получить исходный независимый от языка текст QString, помеченный для перевода?
Вот упрощение моего кода:
QString MyClass::getError()
{
QString errorText = tr("hardError1");
return errorText;
}
Проблема в том, что следующее:
if (getError().contains("hard"))
{
//do something
}
не будет работать должным образом, если пользователь меняет язык!
MyClass
должен дать вам как коды ошибок, так и строки ошибок. Для логики программы используйте коды ошибок. Для пользовательского интерфейса используйте строки ошибок.
Поэтому после дальнейшего прочтения документации я нашел решение, которое, кажется, работает, и хотел опубликовать свои выводы для дальнейшего использования:
1) Строки могут быть помечены для перевода с использованием: QT_TRANSLATE_NOOP(context, text)
2) Чтобы явно получить перевод, используйте QCoreApplication::translate()
для с ++ и qsTranslate()
для QML. Затем в файлах перевода будет выполнен поиск подходящего перевода в определенном контексте. Если совпадение не найдено или эти две функции не были использованы, вы получите исходный текст обратно.
Вот пример, который я разместил в своем вопросе:
QString MyClass::getError()
{
QString errorText = QT_TRANSLATE_NOOP("errorContex", "hardError1");
return errorText;
}
qDebug()<< getError(); //this will give you the original string
qDebug()<< QCoreApplication::translate("errorContex", getError()); //this will give you the translation of the string according to the set language
console.log(qsTranslate("errorContex", myclass.getError())) //this will give you the translation of the string in QML
Есть ли способ получить исходный независимый от языка текст QString, помеченный для перевода?
Нет там нет. После перевода строки это просто обычная строка.
Если вы должны использовать строки, то ваш класс должен вернуть непереведенную строку, и преобразование должно быть выполнено до вывода.
Ошибки обычно не являются строками, поэтому метод может захотеть вернуть какой-либо объект ошибки или код ошибки.