2016-01-27 6 views
1

Есть ли способ получить исходный язык независимого от текста текста QString, который был помечен для перевода? Вот упрощение моего кода:От перевод: оригинал Текст QString

QString MyClass::getError() 
{ 
    QString errorText = tr("hardError1"); 
    return errorText; 
} 

Проблема заключается в том, что следующее:

if (getError().contains("hard")) 
{ 
//do something 
} 

не будет работать должным образом, если пользователь изменяет язык!

+5

Вот почему ваша внутренняя логика не может полагаться на манипуляции строки пользовательского интерфейса. Во всяком случае, ограничьте использование переведенных строк до самой точки, где отображается строка, и используйте псевдонимы везде в вашем приложении. –

+2

Вот почему в такой ситуации у вас есть два значения: текст ошибки (считываемый человеком) и код ошибки (машиночитаемый). Код ошибки обычно представляет собой перечисление. –

ответ

1

Таким образом, после дальнейшего чтения документации я нашел решение, которое, кажется, работает, и хотел опубликовать свои выводы на будущее:

1) Строки могут быть помечены для перевода с помощью: QT_TRANSLATE_NOOP(context, text)

2) Чтобы явно получить перевод, используйте QCoreApplication::translate() для C++ и 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 
+0

Просто добавьте: Это ... qDebug() << QCoreApplication :: translate ... не будет работать для unicode в Windows для языков Unicode, так как qDebug не поддерживает строки Unicode на этой платформе. – FourtyTwo

3

MyClass должен содержать как коды ошибок, так и строки ошибок. Для программной логики используйте коды ошибок. Для пользовательского интерфейса используйте строки ошибок.

0

Есть ли способ получить исходный язык независимого от текста текста QString, который был помечен для перевода?

Нет, нет. После перевода строки это просто регулярная строка.

Если вы должны использовать строки, то ваш класс должен вернуть нетранслируемую строку, и преобразование должно быть выполнено перед выходом.

Ошибки обычно не являются строками, поэтому метод может захотеть вернуть какой-либо объект ошибки или код ошибки.