精华内容
下载资源
问答
  • Qt翻译

    2020-04-21 00:09:06
    如何进行翻译 第一步:写规范的代码 ... 如何翻译Qt 类 第一种:利用 QCoreApplication::tr() 函数 第二种:利用 QCoreApplication::translate() 函数 第三种:利用 QCoreApplication 类的 Q_DECLARE_T...

    如何进行翻译

    • 第一步:写规范的代码
      • 用 QString 包裹不需要翻译的文本
      • 用 tr() 包裹需要翻译的文本
      • 定义上下文
      • 如何翻译非 Qt 类
        • 第一种:利用 QCoreApplication::tr() 函数
        • 第二种:利用 QCoreApplication::translate() 函数
        • 第三种:利用 QCoreApplication 类的 Q_DECLARE_TR_FUNCTIONS 宏
        • 第四种:使用 QT_TR_NOOP() 宏和 QT_TRANSLATE_NOOP() 宏
      • 给翻译添加个注释
        • 第一种:添加注释的格式
        • 第二种:tr() 函数的双参数
      • 如何翻译复数?
    • 第二步:转成 ts 文件
      • 在 pro 文件中指定 ts 文件
      • 用 lupdate 生成 ts 文件
    • 第三步:翻译并生成 qm 文件
    • 最后一步:源代码中加载、安装翻译文件

     

    我们到底在翻译什么?

    大多数情况我们可能只进行文字上的翻译,比如英语翻译成汉语、俄语、日语等等这些肉眼就可以看得到的东西。但是你有想过阿拉伯文可是从右往左书写的;各国的货币符号可是不一样的(人民币是¥,美元是$);各国的大数表示方式可是不一样的,比如我们写100万就是“100 0000”,美国人习惯于“1,000,000”,中间的逗号咋办呀?要是静态的数字还好办,那万一要显示的数字是个变量就没辙了。所以“区域”的设置也属于翻译的一部分。

    除了肉眼能看到的以外,还有就是眼睛看不到的字符编码转换问题。这部分不是给用户看的,而是给程序员看的。假设我们得到一段以“KIO8-R”为编码格式的俄文字节流,我要怎么把这段数据转换成比如 GBK18030 编码的中文啊?所以“编码的转换”也属于翻译的一部分。Qt 也同样提供了针对这个问题的类

    综上所述,一个完整的翻译包括三部分:(1)文字的翻译;(2)区域格式的翻译;(3)语言编码的翻译。然鹅,绝大多数的新手可能只关注第一条而忽略了后两条。

     

    QLocale 类

    preview

     

    和翻译相关的 Qt 类

    Qt 的翻译功能很简单,所用到的工具类就那么几个,最常用的就是 QTranslator、QTextCodec、QLocale 这三个类。所有关于翻译的类及其说明如下:

    • QTranslator:存储翻译文件,执行翻译操作。
    • QLocale:存储本机的区域设置,还可以不同区域格式的转换。
    • QTextCodec:一个编/解码的小工具。
    • QTextDecoder:可以根据字节流的状态正确拼接字节流,从而进行解码操作,常用于网络。
    • QTextEncoder:可以根据字节流的状态正确拼接字节流,从而进行编码操作,常用于网络。
    • QCollator:基于不同区域来对比字符串的类。
    • QCollatorSortKey:用于加速一个字符串的排序。

    翻译流程框架图

    大致的流程是这样的:首先源代码产生 ts 文件,然后送给 Qt Linguist(Qt语言家)这个 Qt 自带的小工具进行处理产生 qm 翻译文件,最后源代码里加载这个 qm 翻译文件。

    感觉有一点迭代的意思,其实不影响翻译。因为最后一步进行加载 qm 翻译文件所写的代码已经没有和界面相关的字符串了。 

    第一步:写规范的代码

    (1)用 QString 包裹不需要翻译的文本。

    因为 QString 内部采用 Unicode 编码格式,而 Unicode 几乎能表达世界上任何一个语言,并且很多 Qt 库函数的参数也是 QString 类型,所以处理起来会比较方便。

    当然用 char* 也可以,但是便宜的时候 Qt 内部还是会转换成 QString,这就会带来一定的系统开销。关于 char* -> QString 的转换问题,Qt 默认会把 char* 当成 UTF-8 编码格式。因此如果 char* 中的内容是其他编码格式的,需要用 QTextCodec 类来转换。

    (2)用 tr() 包裹需要翻译的文本

    回顾本文最开头的概述,那么凡是你要进行翻译的文本都要用 tr() 函数来包裹。这个 tr() 是 QObject 类的一个函数,用它包裹的文本会被 Qt Linguist(Qt语言家)捕捉到从而进行翻译工作。或者你也可以这样理解,用 tr() 包裹的文本会添加到 ts 文件中。关于 ts 文件在下文会说到。例如我们的示例工程就是这样写的:

     QML 的翻译是用 qsTr() 来代替 tr() 函数。

    (3)定义上下文

    什么叫上下文?请看下图,上下文一般指这个要翻译的文本属于哪个类。QObject 类及其子类只要使用了 Q_OBJECT 宏,默认是当前类作为上下文。

    当然你也可以显示的调用某个类的 tr() 函数来改变文本所属的上下文。比如还是下图,如果直接写 tr("Hello"),那么打开 Qt Linguist 的话这一条会属于 MainWindow 这个上下文。但我这里写 QScroller::tr("Hello") 的话,图中显示就是属于 QScroller 这个类作为上下文。

    (4)如何翻译非 Qt 

    QObject 类有现成的 tr() 函数可以方便使用,但是如果是非 QObject 类没有 tr() 函数怎么办呢?方法有四种:

    第一种:利用 QCoreApplication::tr() 函数

    用 QCoreApplication::tr() 这个函数来包裹要翻译的文本,只有这样才能被 Qt Linguist 捕捉到。

    第二种:利用 QCoreApplication::translate() 函数

    第三种:利用 QCoreApplication 类的 Q_DECLARE_TR_FUNCTIONS 宏

    使用这个宏当然要 #include <QCoreApplication> 啦。使用之后就可以用 tr() 函数了。

    内部的原理依靠元对象系统,使用该宏后会自动在该类添加如下两个静态函数。这样就可以用啦。

    static inline QString tr(const char *sourceText, const char *comment = 0);
    static inline QString trUtf8(const char *sourceText, const char *comment = 0);

     第四种:使用 QT_TR_NOOP() 宏和 QT_TRANSLATE_NOOP() 宏

    (5)给翻译添加个注释

    添加注释可以更好的帮助翻译人员进行理解这个文本的含义,尤其是不同语境下有不同含义时。添加注释有两种方法,一种是采用固定的注释格式,另一种就是利用 tr() 的第二个参数。

    (6)如何翻译复数?

    有时候会遇到这样一个场景,英语中有这样两句话: 

    I have 1 book.
    I have 2 books.

     

    int n = books.count();
    showMessage(tr("I have %n book(s).", "", n));

     上述代码的 tr() 函数,第一个参数是实际展示的文本,变量用 %n表示,就好比 %1、%2等之类的。book 的复数形式用括号括起来,翻译之后就会根据数来显示不同的形式;第二个参数是注释用的,这里面写不写看你自己,反正是给翻译人员看的;第三个就是这个变量 n。

    翻译后的中文:我有%n本书

    第二步:转成 ts 文件,注意转换之前要保存

    三步:翻译并生成 qm 文件

    用 Qt Linguist 打开 ts 文件并翻译后记得时刻保存,至此 ts 文件制作完毕,接下来就是 qm 文件的生成。

    qm 文件生成可以直接在 Qt Linguist 里点击“文件”-“发布”,或者在 Qt Creator 中点击“工具”-“外部”-“Qt语言家”-“发布翻译(lrelease)”都可以。

    至此,qm 文件生成完毕。

    最后一步:源代码中加载、安装翻译文件

    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QTranslator translator;
        translator.load("app_zh");
        app.installTranslator(&translator);
        return app.exec();
    }

    多说两句,在上文第二步我们说过,翻译文件的命名如果遵循 Qt 的规范写的话会自动被识别这是哪个语言的翻译文件,比如“app_zh.ts”中的“zh”。所以高手们用 QTranslator:: load() 函数一般是这样的:

    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QString locale = QLocale::system().name();
        QTranslator translator;
        translator.load(QString("app_") + locale);
        app.installTranslator(&translator);
        return app.exec();
    }

    你看,用 QLocale 直接就能获得计算机的区域设置“zh”了。如果这个程序在德语的操作系统环境下就会加载“app_de.qm”文件。

     

    修改.ts文件,翻译QFileDialog

    在ts文件新增翻译

    <context>
        <name>QFileDialog</name>
        <message>
            <location filename="D:/Qt/Qt5.13.0/5.13.0/Src/qtbase/tests/auto/tools/uic/baseline/qfiledialog.ui" line="71"/>
            <source>Back</source>
            <translation>往前</translation>
        </message>
    </context>

     

    使用ts文件生成qm文件

    lrelease.exe xx.ts -qm xx.qm

    加载qm文件

     

     

     

    翻译原生 widgets(QTextEdit 右键菜单等)

    修改 E:\Qt\Qt5.13.0\5.13.0\Src\qtbase\src\widgets 的widgets.pro文件,新增 TRANSLATIONS += widgets.ts

    widgets.ts是收集的翻译文件名也可以取其它名字

    使用命令行,lupdate widgets.pro   ,生成widgets.ts

    用 Qt Linguist 打开 widgets.ts,找到需要翻译的部件,进行翻译。以 QTextEdit 右键菜单(复制、粘贴)为例,由于 QTextEdit 右键菜单通过 QWidgetTextControl 实现,找到 QWidgetTextControl

    &Undo -> 撤销
    &Red -> 重做
    Cu&t -> 剪贴
    &Copy -> 复制
    Copy &Link Location -> 复制链接地址
    &Paste -> 粘贴
    Delete -> 删除
    Select All -> 全选

    保存翻译后的文件,选择:文件 -> 发布,这时会生成一个名为 widgets.qm 的文件(也可使用 lrelease widgets.ts 来生成)

     

    展开全文
  • 源文件是给客户提供的excel翻译文件。从excel中读取数据后存入ts翻译文件。qt5.5编译。可根据自己需要修改代码并运行。
  • Qt翻译源码翻译文件(解决QTextEdit没有翻译的版本) // Qt中文翻译 QTranslator qtTranslator; { QDir dir(qApp->applicationDirPath() + "/translations"); dir.setFilter(QDir::Files | QDir::Hidden | QDir:...
  • 由于QTextEdit中使用的对象QWidgetTextControl中的复制、粘贴等右键菜单项在qt_zh_CN.qm中没有被翻译,需要自己翻译Qt 部件相关的模块为widgets,进入 widgets 源码相关路径(例如,C:\Qt\Qt5.9.1\5.9.1\Src\qtbase\...
  • QT翻译家 使用Qtlinguist

    2020-05-27 00:38:54
    1 修改*.pro文件,添加TRANSLATIONS = *.ts。 TRANSLATIONS = ./fanyi.ts ...Qt语言家—>更新翻译 QApplication a(argc, argv); QTranslator *translator = new QTranslator; QApplication::installTran

    1 修改*.pro文件,添加TRANSLATIONS = *.ts。

    TRANSLATIONS = ./fanyi.ts
    

    2
    注意:在源代码里用tr("")或者相关的宏把要翻译的部分标出来。

    接下来,执行lupdate,这个命令可以在 工具—>外部—>Qt语言家—>更新翻译
    在这里插入图片描述

      QApplication a(argc, argv);
        QTranslator *translator = new QTranslator;
    
        QApplication::installTranslator(translator);
          if(translator->load("./fanyi.qm")){
              qDebug()<<"open";
          }
    

    在这里插入图片描述
    用linguist工具 翻译
    执行lrelease .pro命令,生成.qm文件
    在源文件添加代码,载入*.qm

    展开全文
  • 在pro文件添加翻译的文件名,我这里有三种,因此添加了三个,名称可以自己修改,后缀为.ts TRANSLATIONS += lang_chinese.ts \ lang_english.ts \ lang_russian.ts 打开Qt自带的命令行窗口,调用一次...

    在pro文件添加翻译的文件名,我这里有三种,因此添加了三个,名称可以自己修改,后缀为.ts

    TRANSLATIONS    +=  chinese.ts \
                        english.ts \
                        russian.ts

    打开Qt自带的命令行窗口,调用一次lupdate,但是要加上-no-obsolete参数,其中红色椭圆为你的工程目录。

     

    完整命令:lupdate test.pro -no-obsolete

    展开全文
  • qt 简单翻译软件.zip

    2020-07-19 15:59:50
    使用qt开发的一个简单翻译软件,使用了get请求,请求有道翻译,对数据进行了json解析,解析了比较复杂的json数据
  • Qt翻译——简洁步骤

    2020-09-25 19:10:56
    2、程序中要翻译的字段,用 tr(“字段”) 扩起来,不然qt识别不了 3、点击lupdate 生成 .ts 文件 4、将 .ts 文件放到 资源目录下,这样就可以直接在代码里看到 .ts 文件中的内容,并对其进行翻译。如图: 5、翻译好...

    1、在 .pro 文件中注明生成的 .ts 文件名称

    TRANSLATIONS+=cn.ts\
                  en.ts
    

    2、程序中要翻译的字段,用 tr(“字段”) 扩起来,不然qt识别不了

    3、点击lupdate 生成 .ts 文件lupdate
    4、将 .ts 文件放到 资源目录下,这样就可以直接在代码里看到 .ts 文件中的内容,并对其进行翻译。如图:
    在这里插入图片描述
    5、翻译好后,点击 lrelease 生成最终的 .qm 文件
    在这里插入图片描述
    6、使用翻译文件
    声明QTranslator对象

    QTranslator translator;
    

    在程序开头导入 .qm 文件

    translator.load(":/cn.qm");
    qApp->installTranslator( &translator );
    

    7、切换语言:可以放到槽函数里进行

    void MainWindow::slot_cBox(int index)
    {
        qDebug() << "index:" << index;
        switch (index) {
        case 0:							 // 路径不要搞错
            translator.load(":/cn.qm");  // : 表示源文件所在路径,不要写成 ./ 会出错(当前路径:构建目标程序所在路径)  
            break;
        case 1:
            translator.load(":/en.qm");
            break;
        default:
            break;
        }
        qApp->installTranslator( &translator );
    
        this->refresh();				//切换语言后重新刷新下界面
    }
    

    8、以后有更改新增翻译字段,先点击下lupdate更新下 .ts 文件,之后再到 .ts 文件中进行更改或翻译,翻译好后再点击 lrelease 生成 .qm 文件

    展开全文
  • 本软件是Qt翻译文件转换工具,可以完成ts与excel的互相转换,转换后的文件可以用Qt自带的Linguist正常查看使用。
  • Qt ts翻译文件导出excel

    2018-10-25 18:32:01
    ts翻译文件导出为excel。qt5.5编译。包含代码及可执行程序。
  • qt翻译

    千次阅读 2016-03-14 19:34:58
    Qt翻译分为三步:  1.运行lupdate,从应用程序中提取所有经tr()标识过的字符串。生成一个后缀为*.ts的文件。  2.使用Qt Linguist翻译这个*.ts。然后用其生成*.qm。  3.在应用程序中用QTranslator这个...
  • 实现Qt国际化语言包过程,Qt实现国际化,生成、加载翻译文档
  • Qt翻译用法就是使用tr(),把需要翻译的内容包含起来,生成翻译文件.ts,就能够使用qt的翻译工具或者直接打开进行翻译,具体得用法就不详细说了。 其中tr(),是有三个参数的 第一个参数就是需要翻译的内容,第二个...
  • QT 翻译文件.ts .qm

    2020-09-21 15:50:01
    2、如图进入QT 自带的cmd命令下 3、打开刚才工程目录.pro所在地址 4、输入lupdate -verbose 工程名.pro,我这里是paint.pro 5、回车 6、.ts翻译文件已经生成了 7、现在可以对翻译文件进行编写了 8、编写完成...
  • Qt 批量翻译工具,可直接将ts文件转换为excel,编辑后再转换为Qt翻译文件。 比直接使用Qt翻译工具方便快捷
  • QT程序国际化操作,Qt本身支持多语言,尤其是多文件切换特别方便,使用ts文件即可,下面介绍基本使用方式,如下操作是基于VS2013 并且已安装QT VS TOOLS 插件,展示中文的翻译操作 二.使用步骤 1.添加翻译文件 ...
  • Qt翻译文件

    2019-07-16 16:49:00
    1 将Qt的内置对话框(如:颜色选择对话框)由英文翻译为中文 QTranslator default_trans; default_trans.load(QObject::tr("qt_zh_CN.qm"), QDir::currentPath()+"/translate"); QCoreApplication::...
  • Qt 翻译

    2021-02-20 16:37:43
    Qt 翻译
  • https://www.jianshu.com/p/324c05be9d55 https://github.com/Longxr/TSFileEditor
  • Qt翻译文件使用方法

    千次阅读 2017-10-06 10:01:16
    1) 在程序中加载翻译文件  QTranslator *translator = new QTranslator;  translator->load(QString(path)+QLatin1String("appName_") + QLocale::system().name());  installTranslator(translator); 2)
  • qt翻译家的使用

    千次阅读 2017-06-19 09:58:42
    QT显示中文最简单的方法就是利用国际化工具linguist,简单步骤如下: ...接下来,执行lupdate,这个命令可以在 工具—》外部—》Qt语言家—》更新翻译(lupdate)找到。(这个子菜单目录下面是发布翻译【lrelease
  • VS QT 翻译-实现语言切换

    千次阅读 2018-09-20 15:01:30
    VS2010建立的Qt工程(或项目)生成pro文件 利用VS2010建立的Qt工程(或项目)要使用Qt Creator开发时,需要生成pro文件。...翻译 Qt多语言国际化主要体现在界面的语言切换,语言切换的主体,即界面中需要...
  • Qt翻译对话框标准按钮.jpg
  • qttranslations:Qt翻译
  • 基于QT的中英文翻译动态切换,,采用QML的方式实现的。。
  • QT-Linguist Qt翻译工具

    千次阅读 2016-08-12 16:38:08
    QT-Linguist工具主要用在项目的多语言翻译处理过程中,所有先简单介绍一下整个多语言处理过程,最后介绍Linguist的用法。(一)QT项目实现多语言,必须做两件事:1)确保每一个用户可见的字符串都使用了tr()函数。 ...
  • Qt开发,遇到需要对动态ui界面进行翻译的人士
  • Qt项目文件 lupdate和lrelease依赖于应用程序的.proQt项目文件。在项目文件中必须有除了本地语言的之外的附加语言的TRANSLATIONS部分。一个比较有代表性的条目就像这样: TRANSLATIONS = tt2_fr.ts \ ...
  • Qt版本:5.6.0 msvc2013 32位 编译器:Visual Studio 2013 专业版 目的 在Qt程序中生成多语言处理所必需的.qm文件,然后添加到工程中并在程序中使用。 示例步骤 1.新建一个Qt Widgets工程,这里我取名为Linguist,...
  • Qt翻译功能最近用得好好的,却是一份新需求导致对这一功能的思考。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,189
精华内容 6,875
关键字:

qt翻译