我現在正在翻譯我們的Qt gui。Qt tr似乎不適用於靜態常量成員?
我有以下代碼:
這似乎並沒有工作,雖然。
也就是說,上述常量的.ts文件中沒有條目。
如果我這樣做,那麼它的工作原理:
// another cpp file
editMenu->addAction(tr("foo"));
然而,這個常數在很多地方使用,我不想必須手動更新每個字符串文本。 (如果將來會改變)
任何人都可以幫忙嗎?
我現在正在翻譯我們的Qt gui。Qt tr似乎不適用於靜態常量成員?
我有以下代碼:
這似乎並沒有工作,雖然。
也就是說,上述常量的.ts文件中沒有條目。
如果我這樣做,那麼它的工作原理:
// another cpp file
editMenu->addAction(tr("foo"));
然而,這個常數在很多地方使用,我不想必須手動更新每個字符串文本。 (如果將來會改變)
任何人都可以幫忙嗎?
環繞你的文字中QT_TR_NOOP
宏:
// cpp file
const QString FooConstants::Foo = QT_TR_NOOP("foo");
editMenu->addAction(tr(FooConstants::Foo));
我覺得你的問題是,TR需要一個char *參數,而不是爲QString:
QString QObject::tr (const char * sourceText, const char * disambiguation = 0, int n = -1)
你可以改變類型FooConstants :: Foo,或者在創建菜單操作時將其轉換爲char *,例如:
const QByteArray byteArray = FooConstants::Foo.toLatin1();
char *data = byteArray.data();
editMenu->addAction(tr(data));
正如托馬斯提到的,你必須使用宏。
原因是Qt不知道默認翻譯哪些字符串,它掃描文件並查找一組模式。其中之一是tr("text")
,但如果您想使用常數,則必須在定義時使用QT_TRANSLATE_NOOP
或QT_TR_NOOP
明確標記。
爲什麼不使用一個定義: #define Foo tr(「foo」) – 2009-09-28 11:11:51
@Patrice:因爲它會導致比它的價值更多的麻煩。 – rpg 2009-09-28 12:11:35
我還沒有用過tr,但爲什麼不這樣做: const QString FooConstants :: Foo = QObject :: tr(「foo」); – Bill 2009-09-28 14:28:16