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的缺失的翻譯有時並不是直接出現的我們所見的控件類裏,如之前的例子,這些文本出現在不止一個類中,但用的都是完全相同的文本,這時就要看源碼(好麻煩),找出文本的歸屬類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章