当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>Qt学习之路(34):国际化(下)</b>[VC/C++编程]

赞助商链接



  本文“<b>Qt学习之路(34):国际化(下)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

上次说了国际化的历程,目前来看一下具体的国际化的相关代码.

在代码中,我们利用tr()将需求翻译的字符串标志出来.lupdate工具就是提取出tr()函数中的相关字符串.tr()函数是QObject类的一个static函数,其签名以下:

static QString tr(const char *sourceText, const char *comment = 0, int n = -1);

固然我们只传了一个参数,但是实际上tr()函数是承受3个参数的.第一个参数是我们需求翻译的文字,假如利用qm文件有对应的字符串,则利用对应的字符串举行替换,不然将显示sourceText参数指定的字符串.第二个参数是一个注释,用于注释前面的sourceText的含义,比方 table一词既可以当作桌子翻译,又可以当作表格翻译,这时你就需求供应这个注释.大概你会问,利用翻译工具的时刻不是有源代码吗?问题是,有大概人家不利用这个翻译工具,而利用别的工具,这样就不能保证会有这个源代码的预览;并且,你的程序不一定必必要公布源代码的;翻译人员常常只得到我们导出的ts 文件,假如你加上注释,便可以便利翻译人员举行翻译.最后一个参数n用于指定字符串能否为复数.我们知道,很多语言,比方英语,很多名词的单复数情势是不相同的,为了办理这个问题,Qt在tr()函数中供应了一个参数n.请看以下代码:

int n = messages.count();
showMessage(tr("%n message(s) saved", "", n));

关于n的值的差别,Qt会翻译成差别的文字,比方:

 n  翻译后果 
 0  0 message saved 
 1  1 message saved
 2  2 messages saved
 5  5 messages saved

tr()函数是QObject的函数,假如你的类不是担当自QObject,就不能直接利用tr()函数.比方我们在main()函数中但愿增添一句设置MainWindow的title的代码:

w.setWindowTitle(tr("MyApp"));

直接这样写是无法通过编译的,因为main()函数是全局函数,所以这个tr()是找不到的.办理办法一是显式地调用QObject的函数:

w.setWindowTitle(QObject::tr("MyApp"));

大概,你可以利用QCoreApplication的translate()函数.你一定还记得,我们的main()函数的第一句老是 QApplication app;,其实,QApplication就是QCoreApplication的子类.所以,我们也能这样去写:

w.setWindowTitle(app.translate("MyApp"));

由于在Qt程序中,QCoreApplication是一个单例类,因此,Qt供应了一个宏qApp,用于很便利的拜候 QCoreApplication的这个单例.所以,在其他文件中,我们也可以直接调用qApp.translate()来替换tr(),不过这并没有必要.

假如你的翻译文本中包含了需求动态显示的数据,比方我们上次代码中的

QMessageBox::information(NULL, tr("Path"), tr("You selectedn%1").arg(path));

这句你当然可以写成

QMessageBox::information(NULL, tr("Path"), "You selectedn" + path);

但这种衔接字符串的方法就不可以利用tr()函数了!因此,假如你需求像C语言的printf()函数这种可以格局化输出并且需求翻译时,你必须利用我们例子中的%1加arg()函数!


  以上是“<b>Qt学习之路(34):国际化(下)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .