2017-07-16 66 views
0

我正在開發一個在Linux和Windows上運行的Qt應用程序。我在德語區域。爲什麼我需要一個QTranslator來處理Windows上的QMessageBox中的本地化按鈕文本?

在Linux上構建它時,我得到了e顯示的標準按鈕的正確翻譯。 G。一個QMessageBox::questionQMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel按鈕設置(在我的情況下,「Ja」,「Nein」和「Abbrechen」)。但是,如果我在Windows上構建代碼,則只能獲得這些按鈕的C語言環境(英文)文本(「是」,「否」和「取消」)。

經過一番搜索,我加入

#include <QTranslator> 
#include <QLibraryInfo> 

QTranslator qtTranslator; 
if (qtTranslator.load(QLocale::system(), QString::fromUtf8("qt"), QString::fromUtf8("_"), 
         QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { 
    app.installTranslator(&qtTranslator); 
} 

main.cpp發現了一個全球工作液。

使用這個,我也得到Windows上的翻譯字符串。然而,在Linux上,qtTranslator.load調用失敗,因此,我之前的狀態沒有任何反應,所以我最終將代碼放在#ifdef Q_OS_WIN塊中。

這有用,但對我來說似乎有點不好意思。另外,我不明白爲什麼我會在Linux上獲取翻譯的字符串,而不是在Windows上。

是我這樣做的正確解決方案嗎?如果是這樣,爲什麼我需要Windows上的附加代碼?

回答

0

試着替換你的代碼並進行測試。

static QTranslator qtTr; 
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); 
installTranslator(&qtTr); 
+0

我不認爲這會改變任何事情。在我的Linux機器上,'QLibraryInfo :: location(QLibraryInfo :: TranslationsPath)'給了我'/ usr/share/qt5/translations',它甚至不存在。所以它會在Linux上再次失敗。那麼,在Windows上,它的工作原理就像我在上面發佈的那樣...我仍然想知道爲什麼我需要在Windows上而不是在Linux上的代碼! –

+0

@TobiasLeupold您使用的是哪個版本的qt? – iMashine

+0

首先5.6.2,然後是5.7.1。兩個版本的行爲相同。 –

相關問題