衆所周知,Qt進入5.x時代後,Qt自帶的翻譯還停留在4.x時代,貌似中文的翻譯文件完全沒變,用MD5值對比都是一樣的,導致加載了Qt的翻譯後,某些自帶控件上的文字仍然是英文。沒辦法,自食其力,豐衣足食,自己翻譯吧。
爲了補全(當然不是全部,只翻譯自己用到了的)那些翻譯,可以在代碼中加入如下代碼
static const char *Translation[] = { QT_TRANSLATE_NOOP("QPlatformTheme", "OK"), QT_TRANSLATE_NOOP("QPlatformTheme", "Save"), QT_TRANSLATE_NOOP("QPlatformTheme", "Save All"), QT_TRANSLATE_NOOP("QPlatformTheme", "Open"), QT_TRANSLATE_NOOP("QPlatformTheme", "&Yes"), QT_TRANSLATE_NOOP("QPlatformTheme", "Yes to &All"), QT_TRANSLATE_NOOP("QPlatformTheme", "&No"), QT_TRANSLATE_NOOP("QPlatformTheme", "N&o to All"), QT_TRANSLATE_NOOP("QPlatformTheme", "Abort"), QT_TRANSLATE_NOOP("QPlatformTheme", "Retry"), QT_TRANSLATE_NOOP("QPlatformTheme", "Ignore"), QT_TRANSLATE_NOOP("QPlatformTheme", "Close"), QT_TRANSLATE_NOOP("QPlatformTheme", "Cancel"), QT_TRANSLATE_NOOP("QPlatformTheme", "Discard"), QT_TRANSLATE_NOOP("QPlatformTheme", "Help"), QT_TRANSLATE_NOOP("QPlatformTheme", "Apply"), QT_TRANSLATE_NOOP("QPlatformTheme", "Reset"), QT_TRANSLATE_NOOP("QPlatformTheme", "Restore Defaults"), QT_TRANSLATE_NOOP("QColorDialog", "Pick Screen Color") };
以上例子可以翻譯QMessageBox和QDialogButtonBox之類的按鈕文本(最後一個如你所見是QColorDialog中的)。加入以上代碼後就如平常爲自己的程序翻譯那樣操作即可。
QT_TRANSLATE_NOOP
例子中用到的這個宏是Qt自帶的用來標記動態翻譯文本的,第一個參數是類名,第二個翻譯的文本,詳細請自行查閱Qt文檔。
需要注意的一點是,Qt的缺失的翻譯有時並不是直接出現的我們所見的控件類裏,如之前的例子,這些文本出現在不止一個類中,但用的都是完全相同的文本,這時就要看源碼(好麻煩),找出文本的歸屬類。