2016-01-27 126 views
1

有沒有一種方法可以獲得標記爲翻譯的QString原始語言獨立文本? 這裏是我的代碼的簡化:Ot translation:original QString text

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

的問題在於以下幾點:

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

如果用戶更改語言將無法正常工作!

+5

這就是爲什麼你的內在邏輯不能靠操縱UI字符串。如果有的話,將翻譯字符串的使用限制在顯示字符串的位置,並在整個應用程序的其他地方使用別名。 –

+2

這就是爲什麼在這種情況下,你有兩個值:錯誤文本(人類可讀)和錯誤代碼(機器可讀)。錯誤代碼通常是一個枚舉。 –

回答

1

所以,經過進一步的閱讀文檔,我發現,似乎工作的解決方案,並想後我的調查結果以供將來參考:

1)字符串可以使用被標記爲翻譯:QT_TRANSLATE_NOOP(context, text)

2)要明確獲得翻譯,請使用C++的QCoreApplication::translate()和QML的qsTranslate()。然後將在定義的上下文中搜索翻譯文件以找到合適的翻譯。如果沒有找到匹配,或者這兩個函數沒有被使用,你會得到原始文本。

這裏我張貼在我的問題的例子:

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

只需添加:This ... qDebug()<< QCoreApplication :: translate ...對於unicode語言的Windows上的unicode不起作用,因爲qDebug不支持此平臺上的unicode字符串。 – FourtyTwo

3

MyClass應該給你錯誤代碼和錯誤字符串。對於程序邏輯,使用錯誤代碼。對於UI,請使用錯誤字符串。

0

有沒有辦法讓QString的原始語言獨立文本標記爲翻譯?

不,沒有。一旦字符串被翻譯,它只是一個普通的字符串。

如果您必須使用字符串,那麼您的類應該返回未轉換的字符串,並且轉換應該在輸出之前完成。

錯誤通常不是字符串,所以該方法可能想要返回某種錯誤對象或錯誤代碼。