众所周知,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的缺失的翻译有时并不是直接出现的我们所见的控件类里,如之前的例子,这些文本出现在不止一个类中,但用的都是完全相同的文本,这时就要看源码(好麻烦),找出文本的归属类。