专栏首页24K纯开源macOS平台下Qt应用程序菜单翻译及调整

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

一、翻译

在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>

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

二、菜单项重排

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 翻译 | Qt 5.15中自定义窗口的装饰

      这只是Qt 5.15中一个新功能的快速更新,我对此感到非常兴奋。传统上,窗口装饰一直是一件很无聊的事情。标题栏,边框,最小化,最大化,调整大小和退出,差不多...

    Qt君
  • Qt附加工具--多语言国际化

    Qt Assistant是可配置且可重新发布的文档阅读器,可以方便地进行定制并与Qt应用程序一起重新发布。Qt Assistant已经被整合进Qt Creato...

    DeROy
  • 12.QT4.7.4-解决WIN平台和Linux平台中文乱码,QLineEdit右击菜单中文显示

    张诺谦
  • xmake v2.5.1 发布, 支持 Apple Silicon 并改进 C/C++ 包依赖管理

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更...

    ruki
  • xmake v2.3.8 发布, 新增 Intel C++/Fortran 编译器支持

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更...

    ruki
  • Qt 5.14版本更新细节

      以下模块是Qt 5.14发行版的一部分,但已弃用,并考虑在后续的Qt发行版中删除:

    Qt君
  • .NET 6 预览版发布,Python的跨平台地位受到挑战

    跨平台是最近几年非常火的主题,因为现在的各种平台简直太多了。Windows、macOS、Linux、Android、iOS、Web、小程序、IoT等等。以后还可...

    蒙娜丽宁
  • Qt配置使用VS2010进行开发

    它包括跨平台类库、集成开发工具和跨平台 IDE。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

    阳光岛主
  • 吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料

    现在随着互联网的发展,越来越多的公司都鼓励Mac办公,属实MacOS系统对于我们的工作开发效率有很大提升,所以我们需要收集各种类别非常好用的 Mac 应用程序、...

    浅羽技术

扫码关注云+社区

领取腾讯云代金券