您的位置:首页 > 编程语言 > Qt开发

QT多国语言动态切换常见例子

2016-03-31 12:04 746 查看
QT多国语言需要用到三个工具:

l Lupdate:生成ts文件

l Linguist:翻译ts文件中的字符串

l Lrelease:生成qm文件

这三个工具都是QT自带的工具,在相关的安装路径下。

1. 准备一个界面工程

新建工程命名为: cabagge_langsw, 使用设计师设计界面设计如下



设置下拉框内容的时候不用翻译,其他显示的字符串需要翻译

如果手工代码更新界面的内容,需要在字符串前面使用tr函数

2. 配置ts文件

在.pro中添加

TRANSLATIONS= lang_en.ts \

lang_zh.ts



需要支持多少种语言,则就添加多少个文件,每个文件对应一种语言的翻译

3. 生成.ts文件

工具->外部->Qt语言家->更新翻译,将生成翻译文件ts文件(lang_en.ts
和lang_zh.ts )





【注意】这一步一定要在编译完后再做,因为ui_xxx.h编译后才生成.

4. 使用linguist.exe翻译文件

Linguist.exe在QT的安装路径下,

如我的是在:D:\DevSoft\Qt\Qt5.4.2\5.4\mingw491_32\bin

通过Linguist打开.ts文件,给每个需要翻译的字符添加对应的翻译语言



5. 发布生成qm文件

每个字符翻译完之后,需要转换为qm文件



在当前路径下生成对应的qm文件。

每个ts文件都重复做上面两个步骤。

6. 添加代码:切换时更新翻译语言的版本



添加切换下拉框的变化的槽函数:

[cpp] view
plain copy

//下拉框的切换的槽函数

void Widget::on_comboBox_sw_currentIndexChanged(const QString &arg1)

{

//判断是哪一个语言

QString lang = "zh.qm";

if(arg1 == "English"){

lang = "en.qm";

}

//安装语言翻译器

static QTranslator* translator = NULL;

if (translator != NULL)

{

qApp->removeTranslator(translator);

delete translator;

translator = NULL;

}

translator = new QTranslator;

QString qmFilename = "lang_" + lang;

//这里用了绝对路径你要更改回来哦

if (translator->load(

QString("G:/WorkingSpace/Qt/2016.3/cabagge_langsw/"

)+qmFilename))

{

bool fb = qApp->installTranslator(translator);

}

}

7. 添加更新界面字符串的响应

调用installTranslator方法后,系统会自动给每个窗体发送信号并告知changeEvent槽event产生,在要切换语言的每个窗体中都要重写changeEvent这个方法,格式基本差不多:

[cpp] view
plain copy

void Widget::changeEvent(QEvent *e)

{

QWidget::changeEvent(e);

switch (e->type())

{

case QEvent::LanguageChange:

ui->retranslateUi(this);

//还有其他手工更新界面的内容

break;

default:

break;

}

}

8. 效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: