Beinsearch
7/18/2017 - 3:06 AM

qt多语言 国际化

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的函数。