• QT国际化


    (1)基本操作步骤:
    1、编写源代码
    2、在*.pro文件中添加TRANSLATIONS += *.ts ,有多少中语言就添加多少个ts文件。
    3、运行lupdate *.pro 生成ts文件。lupdate会根据源代码中的内容提取出待翻译的字段,然后生成ts文件,ts文件是xml格式的。
    4、用qt linguist打开ts文件,并翻译相应字段
    5、运行lrelease *.pro生成qm文件。lrelease会根据ts文件生成二进制的qm翻译文件。
    6、在*.qrc文件中添加qm文件的路径,并编译源代码 (也可以直接使用qm文件)

    (2)

    对于main.cpp的修改,加入以下语句:

    QTranslator translator;
    translator.load("hellotr_la");
    app.installTranslator(&translator);
    对于.pro文件的修改,加一下语句:
    TRANSLATIONS=hellotr_la.ts

    (3)翻译文本的修改

    最常见的是将要翻译的字符串加上tr语句,tr语句的标准语法是

    QObject::tr(sourceText,comment);//tr是QObject的静态函数,所有继承自QObject都有。一般源代码使用Latin1时使用

    QObject::trUtf8(sourceText);//tr的兄弟,指定了其中内容的编码方式为UTF-8。

    注:对于任何变量tr是无效的。 

    在写代码的时候,我们可能希望把所有的字符串都放在一个地方,而方便于我们自己集中作改动。真正用到的时候,用一个字符常量指针去访问。
    那么我们可能想到这样写代码
    const char *appName=“OpenDrawer 2D”;//wrong,这种实现Qt不认识,无法作翻译 
    QString translated=tr(appName);
    const char *appName=QT_TR_NOOP(“OpenDrawer 2D”);//ok, 需要使用QT_TR_NOOP字串来提醒Qt系统该翻译的字串 
    QString translated=tr(appName);

    QT_TR_NOOP的语法是QT_TR_NOOP(sourceText),它还有两个变体,语法如下
    QT_TRANSLATE_NOOP ( context, sourceText )
    QT_TRANSLATE_NOOP3 ( context, sourceText, comment )

    还有一种情况是在一个字串中有一部分来源于变量。那我们看看两种正误的写法
    statusBar()->showMessage(tr(“Host ” + hostName+“ found”);////wrong 这种写法无法被正确识别 
    statusBar()->showMessage(tr(“Host %1 found”).arg(hostName);////ok 利用了QString的arg()函数。在翻译时,需保留%1 
    (4)QT中的例子:
    QApplication app(argc, argv);
    QString locale = QLocale::system().name();
    QTranslator translator;
    translator.load(QString("arrowpad_") + locale);

    app.installTranslator(&translator);

    参考

    http://blog.csdn.net/dbzhang800/article/details/6334852 

    http://www.cuteqt.com/blog/?p=59 

     http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/I18NSelectChange.html

  • 相关阅读:
    分布式事务之最终一致性BASE理论
    CAP理论
    Comparator中返回0导致数据丢失的大坑
    电脑主板分类
    SimpleDateFormat线程不安全
    Redis面试题
    JS闭包
    ES6将两个数组合并成一个对象数组
    视频色彩空间RGB、YUV、YCbCr
    c#接口作用的深入理解
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/2655599.html
Copyright © 2020-2023  润新知