Qt多国语言国际化

Qt自己提供了一种国际化的方案,而不是採用INI配置文件的方式。

使用QString。QTranslator等类和tr()函数可以非常方便的完毕增加国际化的支持。
(1)使用QString对象表示全部用户可见的文本,QString採用的是内部Unicode编码实现。
(2)使用tr()函数获取全部须要翻译的文本。
(3)使用QString::arg()组织动态文本。

eg:QString str = tr("Mission status: %1 of %2 are completed".arg(x).arg(y));
(4)使用QTranslator::load()和QCoreApplication::installTranslator()读取相应的翻译后的资源文件。并安装QTranslator对象。
详细操作例如以下:
第一步
在你的pro里面增加 TRANSLATIONS = xx.ts

第二步
用lupdate 操作pro 将要翻译的提取到ts文件。命令是 lupdate xx.pro

第三步
用 linguist 打开刚才的ts文件,linugist是在qt的bin的文件夹里面, 是一个界面工具 打开linguist 后用菜单条file ->open 打开 对应的ts文件 如刚才myexec_zh.ts 打开后你会看到左边是对应的类 右边的上半部 是对应的类里面tr 里面的内容 所以在程序里面 tr里面的都是e文 到这里就用上了下半部是你要翻译的语言的对应的东西,就是你输入中文的地方 要注意的就是 那些标点符号 不妨用e文输入状态的如save as.... 就应该是 另存为.... 而不是 另存为。。

。。

注意后面的标点的区别,当中绿色的表示翻译好了,叹号的表示没有翻译对,交叉的表示没有翻译

第四步
先用 linguist 菜单保存你翻译好的ts文件,接着用linguist界面工具里面菜单file里面的release...,点击这个就会弹出对话框 提示你输入 qm文件的文件名称。用默认的就能够了。按确定后你会在ts文件所在的文件夹看到一个qm后缀名的个文件,这就程序翻译器要用到的文件。

第五步。在你的程序里面使用刚才得到的qm文件,方法例如以下:

int main(int argc,char **argv)
{
  QApplication app(argc,argv);

  QTranslator qtTranslator(0);
  qtTranslator.load("test.qm", ".");  //和名字对应
  app.installTranslator(&qtTranslator);

  Window window;
  window.setFont(QFont("unifont", 16)); //设置字体
  window.setMaximumSize(0, 0);
  window.showMinimized();
  return app.exec();
}
注意要在界面的前面安装翻译器。
 
对于须要动态改变语言的,假设已经安装了第一步
在你的pro里面增加 TRANSLATIONS = xx.ts

第二步
用lupdate 操作pro 将要翻译的提取到ts文件 命令是 lupdate xx.pro

第三步
用 linguist 打开刚才的ts文件,linugist是在qt的bin的文件夹里面, 是一个界面工具 打开linguist 后用菜单条file ->open 打开 对应的ts文件 如刚才myexec_zh.ts 打开后你会看到左边是对应的类 右边的上半部 是对应的类里面tr 里面的内容 所以在程序里面 tr里面的都是e文 到这里就用上了下半部是你要翻译的语言的对应的东西。就是你输入中文的地方 要注意的就是 那些标点符号 不妨用e文输入状态的如save as.... 就应该是 另存为.... 而不是 另存为。。。。注意后面的标点的区别,当中绿色的表示翻译好了。叹号的表示没有翻译对,交叉的表示没有翻译

第四步
先用 linguist 菜单保存你翻译好的ts文件。接着用linguist界面工具里面菜单file里面的release...,点击这个就会弹出对话框 提示你输入 qm文件的文件名称,用默认的就能够了。

按确定后你会在ts文件所在的文件夹看到一个qm后缀名的个文件。这就程序翻译器要用到的文件。

第五步。在你的程序里面使用刚才得到的qm文件 方法例如以下

int main(int argc,char **argv)
{
  QApplication app(argc,argv);

  QTranslator qtTranslator(0);
  qtTranslator.load("test.qm", ".");  //和名字对应
  app.installTranslator(&qtTranslator);

  Window window;
  window.setFont(QFont("unifont", 16)); //设置字体
  window.setMaximumSize(0, 0);
  window.showMinimized();
  return app.exec();
}
注意一定要在安装界面前安装翻译器。
 
对于须要动态改变语言的情况。能够定义一个static的QTranslator对象以方便移除和又一次安装。

借鉴代码例如以下:
void LangSwitch::changeTr(const QString& langCode)
{
    static QTranslator* translator;

    if (translator != NULL)
    {
        qApp->removeTranslator(translator);
        delete translator;
        translator = NULL;
    }
    translator = new QTranslator;
    QString qmFilename = "lang_" + langCode;
    if (translator->load(QString("D:/QtPro/CH14/CH1402/LangSwitch/")+qmFilename))
    {
        qApp->installTranslator(translator);
    }
}
时间: 2024-12-09 04:02:54

Qt多国语言国际化的相关文章

android国际化应用——多国语言Values文件命名规则

在给自己的app适应国际化语种的时候,这个values文件夹是不可以随便命名的哦,按照以下对应的去命名才不会报错: android多国语言文件夹文件汇总如下: 维吾尔文(中国):values-ug-rCN 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-en-rUS 英语(英国):values-en-rGB 英文(澳大利亚):values-en-rAU 英文(加拿大):values-en-r

使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)

使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有自身的语言国际化,两者是不同的. 先来看最终效果: 前期准备: 这次创建一个 main window 在 menu bar 加一个 language 的 menu: 我们还要对 action 进行一些设置,如下: 生成 .py 文件: 生成代码: 1 # -*- coding: utf-8 -*-

(转)QT中文乱码与国际化支持

Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性.Qt本身提供的linguist工具,用来实现翻译过程十分方便.MFC中利用资源DLL切换资源,或使用多个RC文件进行不同语言版本编译等方法都十分麻烦,如果你曾经使用过MFC,QT解决多语言问题的便捷性绝对会让你感觉是一种享受.本文讨论以下几个方面内容: 1.  QT中解决中文乱码的方法: 2.  QT中实现国家化支持. 3.  对话框实现多语言 一.       中文乱码 1.  在程序中直接使用中文,需要在程序

C++ 软件开发多国语言解决方案汇总

暂时汇总出了以下几种方法 以Unicode为核心 采用 GNU gettext  基于Qt的多语言开发工具:Qt Linguist  以Unicode为核心 参考:http://www.ibm.com/developerworks/cn/linux/l-cn-ccppglb/ 多国语言的存在,使程序员在编码处理上花费了大量时间和精力:然而各种各样的乱码问题,如 XML 格式错误.文本显示异常.解析器异常等依然层出不穷.特别的,相对于 JAVA 语言,C/C++ 在处理编码问题上有更大的困难.本文

【大话QT之十四】QT实现多语言切换

功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言包. 实现方法: 为了支持国际化最关键的地方是制作多国语言包,然后再实现动态切换.QT里面既可以采用命令行也可以采用Qt Creator的界面操作来生成,这里我们利用Qt Creator来生成多国语言包.基本流程是,先生成ts文件,然后生成qm文件,最后通过QTranslator类来加载qm文件,实

QT实现多语言切换

功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言包. 实现方法: 为了支持国际化最关键的地方是制作多国语言包,然后再实现动态切换.QT里面既可以采用命令行也可以采用Qt Creator的界面操作来生成,这里我们利用Qt Creator来生成多国语言包.基本流程是,先生成ts文件,然后生成qm文件,最后通过QTranslator类来加载qm文件,实

多国语言解决方案gun.gettext + poedit

1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Localization,因为首字母I与末字母N之间共10个字母,又称为I10N.资源本地化就是要让这个软件产品使用当地的环境,如语言.文化.使用习惯等 一般涉及到具体国家的语言文件,以i10n来表示,而多国语言相关的解决方案以i18n表示. 2.关于gun.gettext wqe

c#开发之多国语言解决方案gun.gettext + poedit

1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Localization,因为首字母I与末字母N之间共10个字母,又称为I10N.资源本地化就是要让这个软件产品使用当地的环境,如语言.文化.使用习惯等 一般涉及到具体国家的语言文件,以i10n来表示,而多国语言相关的解决方案以i18n表示. 1.2.关于gun.gettext gun.gettext软件国际化

WinCE6.0多国语言软键盘

N久以前写过一篇<WinCE下自定义的大软键盘>,这个自定义软键盘就是为RM905a+项目来做的.RM905a+的系统分辨率是640*480,WinCE原生键盘小的太小,大的又太大.所以就去除了大软键盘其中很多没必要的按键,既满足了使用需求,又提高了用户体验,不至于一个软键盘就占了大半个屏幕.当然那时候没有美工可以帮忙,图片处理都是自己搞的,所以RM905a+的界面也都是一抹黑,其实就是用的最简单的MFC+高对比黑色的主题,虽然不太好看,但反而很像专业仪器. 后来做车载导航设备,在国外卖的不错