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