一、翻译
在macOS平台上,系统会为应用程序菜单添加一些额外的菜单项。先来看一些典型的例子:
这个是Qt Creator的菜单,系统为应用程序菜单添加了一些桌面显示操作相关的菜单项;
这个是Qt Designer的应用程序菜单,也添加了一些额外的菜单项。并且我们可以注意到,这些菜单项在中文语言环境是翻译好的。那么我们自己的应用程序,怎么去让它们也翻译好呢?
Qt应用程序的国际化都是通过ts文件来做翻译的。通过lupdate程序扫描源代码中被tr()宏包裹的字符串,得到需要翻译的字符串。但是这些系统添加的字符串,并没有存在我们的源码当中。这个应该如何处理嗯?通过网上的一番搜寻发现,有一个直接且简单的方法,直接在ts文件里面添加这些字符串并做好翻译即可。如下所示:
1 2 34 5 137demoMainWindow 67 118 12 1613 17 2118 22 2623 27 3128 32 3633 37 4138 42 4643 47 5148 52 5653 57 6158 62 6663 67 7168 72 7673 77 8178 82 8683 87 9188 92 9693 97 10198 102 106103 107 111108 112 116113 117 121118 122 126123 127 131128 132 136133 138 168 169MAC_APPLICATION_MENU 139140 143144 147148 151152 155156 159160 163164 167
手动添加一个context,并在该context下面添加翻译。然后用lupdate更新ts文件即可。这样,我们自己的应用程序也可以翻译好了:
二、菜单项重排
为了契合不同平台的使用习惯,Qt给菜单添加了Menu Role这样一个定义。通过定义不同的Menu Role,mac系统会调整应用程序的位置,以保证平台习惯的统一。Qt库本身已经定义了几个常用的Role:
这些Role类型的菜单项都会被系统重新调整位置到应用菜单里。如果我们还有一些其他的菜单项,也想放到应用菜单里面,应该怎么做呢?其实也非常简单,直接将菜单的Role设置为ApplicationSpecificRole即可。按照设置顺序,各个菜单项将依次出现在应用菜单中。比如说上面截图中的Check for Updates菜单项,就是通过设置ApplicationSpecificRole定义来实现的。