macOS平台下Qt应用程序菜单翻译及调整

时间:2024-01-25 09:23:52

一、翻译    

在macOS平台上,系统会为应用程序菜单添加一些额外的菜单项。先来看一些典型的例子:

这个是Qt Creator的菜单,系统为应用程序菜单添加了一些桌面显示操作相关的菜单项;

这个是Qt Designer的应用程序菜单,也添加了一些额外的菜单项。并且我们可以注意到,这些菜单项在中文语言环境是翻译好的。那么我们自己的应用程序,怎么去让它们也翻译好呢?

Qt应用程序的国际化都是通过ts文件来做翻译的。通过lupdate程序扫描源代码中被tr()宏包裹的字符串,得到需要翻译的字符串。但是这些系统添加的字符串,并没有存在我们的源码当中。这个应该如何处理嗯?通过网上的一番搜寻发现,有一个直接且简单的方法,直接在ts文件里面添加这些字符串并做好翻译即可。如下所示:

  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>
View Code

手动添加一个context,并在该context下面添加翻译。然后用lupdate更新ts文件即可。这样,我们自己的应用程序也可以翻译好了:

二、菜单项重排

为了契合不同平台的使用习惯,Qt给菜单添加了Menu Role这样一个定义。通过定义不同的Menu Role,mac系统会调整应用程序的位置,以保证平台习惯的统一。Qt库本身已经定义了几个常用的Role:

这些Role类型的菜单项都会被系统重新调整位置到应用菜单里。如果我们还有一些其他的菜单项,也想放到应用菜单里面,应该怎么做呢?其实也非常简单,直接将菜单的Role设置为ApplicationSpecificRole即可。按照设置顺序,各个菜单项将依次出现在应用菜单中。比如说上面截图中的Check for Updates菜单项,就是通过设置ApplicationSpecificRole定义来实现的。