前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt 语言国际化

PyQt 语言国际化

作者头像
AnRFDev
发布2021-02-01 15:01:02
9710
发布2021-02-01 15:01:02
举报
文章被收录于专栏:AnRFDev

PyQt4 语言国际化

使用pylupdate4将界面的py文件转成ts文件。

进入py文件所在目录,执行转换命令。

代码语言:javascript
复制
/d/python27/Lib/site-packages/PyQt4/pylupdate4 ui_main.py -ts zh_CN.ts

得到zh_CN.ts文件。这个文件本质上是xml文件。

当界面的py文件修改时,运行pylupdate4生成ts不会破坏原ts的翻译。

用Qt语言家(Linguist)打开zh_CN.ts文件。可以对相应的字符串进行翻译。 点击“发布”可获得zh_CN.qm文件。这就是qt的语言资源文件,是一个二进制文件。

创建app时,先加载语言资源文件zh_CN.qm

代码语言:javascript
复制
if __name__ == '__main__':
    configs.init_configs()  # 确定语言配置
    app = QApplication(sys.argv)
    trans = QTranslator()  # Setup locale, we need .qm files
    if configs.g_locale_type == configs.LOCALE_ZH_CH:
        trans.load("res/locale/zh_CN")  # No need suffix .qm
        app.installTranslator(trans)

    main_d = FAMainWindow()
    main_d.show()
    sys.exit(app.exec_())

App运行中切换语言

在程序运行时,我们可以选择当前显示的语言。不需要重新启动程序即可完成切换。

准备语言资源文件

以英文和简体中文为例,想要切换语言,需要这2种语言包

代码语言:javascript
复制
$ /d/python27/Lib/site-packages/PyQt4/pylupdate4 ui_main.py -ts zh_CN.ts
$ /d/python27/Lib/site-packages/PyQt4/pylupdate4 ui_main.py -ts en.ts

借助Qt语言家发布得到en.qmzh_CN.qm这2个文件,放在res/locale目录里

在UI上设置触发切换语言

界面上需要按钮或菜单栏的action;需要持有QTranslator

代码语言:javascript
复制
    self.trans = QTranslator()  # 初始化时获取 QTranslator
    self._init_trans()
    # 添加了action来触发切换动作
    self.connect(self.ma.actionEnglish, SIGNAL("triggered()"), self._trigger_english)
    self.ma.action_ZhCN.triggered.connect(self._trigger_zh_cn)

def _init_trans(self):
    ctx.read_locale_config()  # 自定义的方法,用来读取json文件中的配置
    if ctx.g_locale_type == ctx.LOCALE_ZH_CH:
        self._trigger_zh_cn()
    elif ctx.g_locale_type == ctx.LOCALE_EN:
        self._trigger_english()

def _trigger_english(self):
    print "[MainWindow] Change to English"
    self.trans.load("res/locale/en")
    _app = QApplication.instance()  # 获取app实例
    _app.installTranslator(self.trans)
    self.ma.retranslateUi(self)
    ctx.change_to_en()  # 将新的配置更新入json文件中

def _trigger_zh_cn(self):
    print "[MainWindow] Change to zh_CN"
    self.trans.load("res/locale/zh_CN")
    _app = QApplication.instance()
    _app.installTranslator(self.trans)
    self.ma.retranslateUi(self)
    ctx.change_to_zh_cn()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PyQt4 语言国际化
  • App运行中切换语言
    • 准备语言资源文件
      • 在UI上设置触发切换语言
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档