1. 编写代码注意事项
建立UI时尽量用英文名,中文可能会乱码;
UI中的text属性要保留“可翻译的”;
代码写的setText,必须加入tr做前缀:label->setText(tr("TXT_HELLO_WORLD","Hello World!")),前一个参数是翻译ID,后一个是注释(默认显示)。
2.创建语言文件
修改pro文件,加入语言文件,如:
TRANSLATIONS += lang_en.ts \
lang_zh.ts \
lang_la.ts \
然后用Qt语言家生成对应翻译文件
3.1 静态翻译,在main函数启动部分添加:
QString locale = QLocale::system().name());
QTranslator *translator = new QTranslator(app);
translator->load(QString("./language/" + locale)); // 会在当前目录下的language目录下寻找,可以不带".qm"后缀名
app->installTranslator(translator);
3.2 动态翻译
如建立一个翻译按钮button,建立槽,然后输入
void Dialog_Language::on_btn_clicked()
{
static QTranslator *trans;
//判断trans不为NULL则remove,delete,赋值NULL
trans->load(":/language/zh_CN.qm");
qApp->installTranslator(trans);
ui->retranslateUi(this);
}
可完成当前界面的翻译。如果每个页面都需要,则需要在每个界面加入
void Dialog_Language::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
注意:程序中如果有settext方式显示的label,需要单独写刷新Ui的函数。