QT 国际化问题总结

有段时间使用QT进行国际化处理,现将项目中遇到的问题进行一一总结。

1.获取翻译词条。提取的词条的源文件所在的路径不能有空格,否则在使用lupdate时会提取词条失败。

2.自动化词条提取。提前将lrelease命令写入到批处理文件,然后再通过设置visual studio的自定义生成步骤,在每次编译前自动更新一次。如下图:

3.qt内置控件翻译。在项目中先加载qt自带的翻译文件(具体操作可百度),然后加载项目自己的翻译文件。需要注意的是QFileDialog总是翻译不过来,显示的是系统自带的。原因是在使用QFileDialog时需要修改其option属性,为QFileDialog::DontUseNativeDialog。

用法如下:

方法一:  

    QString qsFile = QFileDialog::getSaveFileName(this, tr("#Save RFID file "), "", tr("#Data File(*.dat)"),0,QFileDialog::DontUseNativeDialog);

方法二:

    QFileDialog::Options options;
    options |= QFileDialog::DontUseNativeDialog;

    QString selectedFilter;
    QString fileName = QFileDialog::getSaveFileName(this,
        QString("Save File"),
        m_strDefCSVFileName,
        QString("csv Files (*.csv)"),
        &selectedFilter,

        options);

方法三:

    QFileDialog* pFileDialog = new QFileDialog(this);
    pFileDialog->setOption(QFileDialog::DontUseNativeDialog);

4.文字翻译问题。基本上所有的文字通过使用tr(),都可以正常翻译。但还有些文字是需要使用QCoreApplication::translate()、QT_TR_NOOP() 和QT_TRANSLATE_NOOP()的。详细见qt助手。

说明:在qt自带的助手中搜索以下文字“Internationalization with QT”,重点查看 Use tr() for All Literal Text 这一节。

例如,在项目中预定义了一些错误提示信息,以避免重复写。

可以这么定义:

const char TheSampleIDIsWrong[] = QT_TRANSLATE_NOOP("AlarmMsg","#The sample id is wrong.");

const char SampleIDIsLong[] = QT_TRANSLATE_NOOP("AlarmMsg","#The length of Sample ID is more than 10.");

然后这么使用:

qsInfo =QCoreApplication::translate("AlarmMsg", SampleIDIsLong);

注意:“AlarmMsg”为上下文,其作用相当于类名、命名空间之类的。

5.词条翻译。提取出的翻译词条文件,即.ts文件,可以发给指定翻译人员翻译的。只需要给其单独安装qt 的 Linguist 软件。另外,Linguist是可以同时对同一个文件翻译多种语言的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值