PyQt4 国际化与本地化编程

安装PyQt4

首先安装 PyQt4 开发环境,使用以下命令进行安装:

1
$ sudo apt-get install python-qt4 python-qt4-dev pyqt4-dev-tools

注:笔者的机器安装的是 Ubuntu 12.04。

PyQt4 示例

安装完毕后,按照惯例,编写一个 mainwindow.py 验证下,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
# -*- coding: utf-8 -*-
#

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys

class MainWindow(QMainWindow):
def __init__(self, app, parent=None):
super(MainWindow, self).__init__(parent)

label = QLabel("Hello PyQt4!")
self.setCentralWidget(label)
self.setWindowTitle("PyQt4 main Window")

if __name__ == "__main__":
app = QApplication(sys.argv)

win = MainWindow(app)
win.show()

sys.exit(app.exec_())

国际化与本地化

处理字符串

将程序中所有需要做国际化与本地化处理的字符串用self.tr()方法处理。

1
2
3
label = QLabel(self.tr("Hello PyQt4!"))  
...
self.setWindowTitle(self.tr("PyQt4 main Window"))

添加代码

待字符串处理完后,还需在 QApplication 后面添加以下代码:

1
2
3
translator = QTranslator()
translator.load("zh_CN.qm")
app.installTranslator(translator)

生成 .ts 文件

在终端中,使用 pylupdate4 命令生成 .ts 文件,操作如下:

1
$ pylupdate4 mainwindow.py -ts zh_CN.ts

zh_CN.ts 的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="zh_CN">
<context>
<name>MainWindow</name>
<message>
<location filename="mainwindow.py" line="13"/>
<source>Hello PyQt4!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.py" line="15"/>
<source>PyQt4 main Window</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

翻译

使用编辑器打开 zh_CN.ts,并修改内容并保存:

1
2
3
4
5
6
7
8
9
10
11
<name>MainWindow</name>
<message>
<location filename="mainwindow.py" line="13"/>
<source>Hello PyQt4!</source>
<translation type="unfinished">你好,PyQt4!</translation>
</message>
<message>
<location filename="mainwindow.py" line="15"/>
<source>PyQt4 main Window</source>
<translation type="unfinished">PyQt4 主窗体</translation>
</message>

生成 .qm

使用 lrelease 工具生成 zh_CN.qm 文件,如下:

1
$ lrelease zh_CN.ts

运行

在终端中运行 mainwindow.py,如下:

1
$ python mainwindow.py

看到了什么?界面上出现了中文,说明本地化处理OK!