读书人

求QML兑现多语言的方法!

发布时间: 2012-10-26 10:30:59 作者: rapoo

求QML实现多语言的方法!!
求QML实现多语言的方法,在QT中写入一些英文字符串,现在要求多加一项功能,可以改变页面现实语言,就是说可以改变现有英文显示为中文现实,请问如何实现!?

[解决办法]
把字符串用qsTr(“ssss”);
包裹起来

然后就和Qt国际化步骤差不多。。


=================
在 QML 中使用中文,目前似乎只有两种方式

使用 Qt 的国际化功能(与QtScript完全一样,使用 qsTr())
使用 unicode 的转义字符("\uxxxx")

例子

main.cpp

加载翻译文件
加载qml文件

#include <QtCore/QTranslator>
#include <QtGui/QApplication>
#include <QtDeclarative/QDeclarativeView>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QTranslator translator;
translator.load("first_zh_CN.qm", "i18n");
app.installTranslator(&translator);

QDeclarativeView view;
view.setSource(QUrl::fromLocalFile("first.qml"));
view.show();

return app.exec();
}

first.qml

待翻译字符串 qsTr("text")
"我是中文"的unicode表示 "\u6211\u662f\u4e2d\u6587"

Rectangle {
id: page
width: 100
height: 100
color: "red"
Text {
id: s1
x: 35
y: 15
text: qsTr("text")
}
Text {
id: s2
x: 35
y: 63
text: "\u6211\u662f\u4e2d\u6587"
}
}

提取或更新待翻译字符串

lupdate first.qml -ts i18n/first_zh_CN.ts

调用 linguist 翻译文本,并发布 first_zh_CN.qm 文件
[解决办法]
ctranslator.h

C/C++ code
#ifndef CTRANSLATOR_H#define CTRANSLATOR_H#include <QTranslator>class CTranslator : public QTranslator{    Q_OBJECTprivate:    /**     * 构造函数     *     * @param parent 父对象     */    CTranslator(QObject *parent = 0);// 公有槽public slots:    /**     * 读取翻译文件     *     * @param filename 文件名     */    void load(const QString &filename);// 信号signals:    /**     * 语言改变     */    void languageChanged();// 静态方法public:    /**     * 获取单实例     *     * @return 指向单实例的指针     */    static CTranslator *instance();};#endif // CTRANSLATOR_H 

读书人网 >QT开发

热点推荐