Qt 5.x 中文翻译缺失的一种解决办法

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

你可能感兴趣的:(qt,中文翻译,缺失)