在macOS平臺上,系統會爲應用程序菜單添加一些額外的菜單項。先來看一些典型的例子:ide
這個是Qt Creator的菜單,系統爲應用程序菜單添加了一些桌面顯示操做相關的菜單項;工具
這個是Qt Designer的應用程序菜單,也添加了一些額外的菜單項。而且咱們能夠注意到,這些菜單項在中文語言環境是翻譯好的。那麼咱們本身的應用程序,怎麼去讓它們也翻譯好呢?ui
Qt應用程序的國際化都是經過ts文件來作翻譯的。經過lupdate程序掃描源代碼中被tr()宏包裹的字符串,獲得須要翻譯的字符串。可是這些系統添加的字符串,並無存在咱們的源碼當中。這個應該如何處理嗯?經過網上的一番搜尋發現,有一個直接且簡單的方法,直接在ts文件裏面添加這些字符串並作好翻譯便可。以下所示:spa
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE TS> 3 <TS version="2.1" language="zh_CN"> 4 <context> 5 <name>demoMainWindow</name> 6 <message> 7 <location filename="../mainwindow.ui" line="14"/> 8 <source>MainWindow</source> 9 <translation>主窗口</translation> 10 </message> 11 <message> 12 <location filename="../mainwindow.ui" line="28"/> 13 <source>File</source> 14 <translation>文件</translation> 15 </message> 16 <message> 17 <location filename="../mainwindow.ui" line="40"/> 18 <source>Edit</source> 19 <translation>編輯</translation> 20 </message> 21 <message> 22 <location filename="../mainwindow.ui" line="50"/> 23 <source>View</source> 24 <translation>視圖</translation> 25 </message> 26 <message> 27 <location filename="../mainwindow.ui" line="57"/> 28 <source>Settings</source> 29 <translation>設置</translation> 30 </message> 31 <message> 32 <location filename="../mainwindow.ui" line="65"/> 33 <source>Help</source> 34 <translation>幫助</translation> 35 </message> 36 <message> 37 <location filename="../mainwindow.ui" line="81"/> 38 <source>Open File</source> 39 <translation>打開文件</translation> 40 </message> 41 <message> 42 <location filename="../mainwindow.ui" line="86"/> 43 <source>Open Project</source> 44 <translation>打開工程</translation> 45 </message> 46 <message> 47 <location filename="../mainwindow.ui" line="91"/> 48 <source>Open Folder</source> 49 <translation>打開文件夾</translation> 50 </message> 51 <message> 52 <location filename="../mainwindow.ui" line="96"/> 53 <source>Recent</source> 54 <translation>最近文件</translation> 55 </message> 56 <message> 57 <location filename="../mainwindow.ui" line="101"/> 58 <source>Save</source> 59 <translation>保存</translation> 60 </message> 61 <message> 62 <location filename="../mainwindow.ui" line="106"/> 63 <source>Quit</source> 64 <translation>退出</translation> 65 </message> 66 <message> 67 <location filename="../mainwindow.ui" line="111"/> 68 <source>Redo</source> 69 <translation>重作</translation> 70 </message> 71 <message> 72 <location filename="../mainwindow.ui" line="116"/> 73 <source>Undo</source> 74 <translation>撤銷</translation> 75 </message> 76 <message> 77 <location filename="../mainwindow.ui" line="121"/> 78 <source>Cut</source> 79 <translation>剪切</translation> 80 </message> 81 <message> 82 <location filename="../mainwindow.ui" line="126"/> 83 <source>Paste</source> 84 <translation>粘貼</translation> 85 </message> 86 <message> 87 <location filename="../mainwindow.ui" line="131"/> 88 <source>Delete</source> 89 <translation>刪除</translation> 90 </message> 91 <message> 92 <location filename="../mainwindow.ui" line="136"/> 93 <source>Tile</source> 94 <translation>平鋪</translation> 95 </message> 96 <message> 97 <location filename="../mainwindow.ui" line="141"/> 98 <source>Stack</source> 99 <translation>堆疊</translation> 100 </message> 101 <message> 102 <location filename="../mainwindow.ui" line="146"/> 103 <source>Preference</source> 104 <translation>偏好設置</translation> 105 </message> 106 <message> 107 <location filename="../mainwindow.ui" line="151"/> 108 <source>Log</source> 109 <translation>日誌</translation> 110 </message> 111 <message> 112 <location filename="../mainwindow.ui" line="156"/> 113 <source>Tools</source> 114 <translation>工具</translation> 115 </message> 116 <message> 117 <location filename="../mainwindow.ui" line="161"/> 118 <source>About Demo</source> 119 <translation>關於Demo</translation> 120 </message> 121 <message> 122 <location filename="../mainwindow.ui" line="166"/> 123 <source>Check for updates</source> 124 <translation>檢查更新</translation> 125 </message> 126 <message> 127 <location filename="../mainwindow.ui" line="171"/> 128 <source>Website</source> 129 <translation>官網</translation> 130 </message> 131 <message> 132 <location filename="../mainwindow.ui" line="176"/> 133 <source>Tutorial</source> 134 <translation>教程</translation> 135 </message> 136 </context> 137 <context> 138 <name>MAC_APPLICATION_MENU</name> 139 <message> 140 <source>Services</source> 141 <translation>服務</translation> 142 </message> 143 <message> 144 <source>Hide %1</source> 145 <translation>隱藏 %1</translation> 146 </message> 147 <message> 148 <source>Hide Others</source> 149 <translation>隱藏其餘</translation> 150 </message> 151 <message> 152 <source>Show All</source> 153 <translation>顯示全部</translation> 154 </message> 155 <message> 156 <source>Preferences...</source> 157 <translation>偏好設置…</translation> 158 </message> 159 <message> 160 <source>Quit %1</source> 161 <translation>退出 %1</translation> 162 </message> 163 <message> 164 <source>About %1</source> 165 <translation>關於 %1</translation> 166 </message> 167 </context> 168 169 </TS>
手動添加一個context,並在該context下面添加翻譯。而後用lupdate更新ts文件便可。這樣,咱們本身的應用程序也能夠翻譯好了:翻譯
爲了契合不一樣平臺的使用習慣,Qt給菜單添加了Menu Role這樣一個定義。經過定義不一樣的Menu Role,mac系統會調整應用程序的位置,以保證平臺習慣的統一。Qt庫自己已經定義了幾個經常使用的Role:3d
這些Role類型的菜單項都會被系統從新調整位置到應用菜單裏。若是咱們還有一些其餘的菜單項,也想放到應用菜單裏面,應該怎麼作呢?其實也很是簡單,直接將菜單的Role設置爲ApplicationSpecificRole便可。按照設置順序,各個菜單項將依次出如今應用菜單中。好比說上面截圖中的Check for Updates菜單項,就是經過設置ApplicationSpecificRole定義來實現的。日誌