当前位置:编程学习 > wap >>

Qt多国语言(国际化)问题小结—

 
引言:目前,Qt作为图形开发软件使用的人群越来越多,很多公司的产品有多国语言支持的需求,笔者就教学与项目开发中的经历,小结了Qt多国语言(国际化)问题,仅供参考。
 
假设我们已经建好一个工程,且可以运行出基本的界面。
1、打开项目工程文件QTDemo.pro,添加如下语句:
TRANSLATIONS += en.ts zh_CN.ts zh_TW.ts
 
2、然后在命令行窗口中输入以下命令:
lupdate QTDemo.pro
这样就生成了3个语言文件:en.ts,zh_CN.ts,zh_TW.ts
 
3、用linguist(在QT安装目录下的bin目录中)打开zh_CN.ts(简体中文),选择“编辑”->“翻译文件设置…”,选择Chinese/China:选中某一个字符串,在译文文本框
中输入对应于中文的字符串:
同理,进行zh_TW.ts(繁体中文)文件的翻译,en.ts(英文)文件不用翻译。
 
4、用 lrelease QTDemo.pro  将对应的.ts文件生成.qm文件,.qm文件比较紧凑、体积小。
5、在程序中添加对国际化的支持,将main.cpp修改为如下内容:
      #include <QApplication>
      #include <QTranslator>
      #include "QtDemo.h"
      int main(int argc, char **argv)
      {
         QApplication app(argc, argv);
 
         //以下3句话是装载的程序
         QTranslator translator;
         translator.load(QString(argv[1]));
         app.installTranslator(&translator);
 
         QtDemo *dlg = new QtDemo;
         dlg->show();
         return app.exec();
      }     
 
重新执行make命令,生成可执行程序。 
在运行程序时通过传递命令行参数指定所使用的语言,注意不需要指定扩展名.qm,例如:
./QTDemo zh_CN  就出现中文的界面了,其他的依次类推。  
 

--------------------编程问答-------------------- 这东西有用。 --------------------编程问答-------------------- 嗯哪。还可以动态加载。。 --------------------编程问答-------------------- mark。
最近的工作中正好用到。 --------------------编程问答-------------------- --------------------编程问答-------------------- 好东西啊。 --------------------编程问答-------------------- 看代码如下:sound sound_array[MAX_SOUNDS]=
{
      {0,QT_TR_NOOP("Grand Piano 1")},
        {1,"Grand Piano 2"},
  };
  定义如下:
  struct sound
{
    int id;
    QString name;
  };
这个是我写的程序,我想用Qt linguist把字符串数组中的字符提取出来进行汉化 但是使用lupdate XXX.pro
后老是提示tr() cannot be called without context这个问题,我在mainwindow.cpp文件中使这样调用这个字符串数组的QString text = QString::number(sound_temp.id+1).sprintf("%03d",sound_temp.id+1)+ sound_temp.name;
        button_container_sound_left_and_right.
               get_button_by_index(i)->setText(tr(text.toLatin1()));

请问这个问题如何解决呢 实在是不懂,比较急切 --------------------编程问答--------------------
引用 6 楼 sdhwo 的回复:
看代码如下:sound sound_array[MAX_SOUNDS]=
{
      {0,QT_TR_NOOP("Grand Piano 1")},
        {1,"Grand Piano 2"},
  };
  定义如下:
  struct sound
{
    int id;
    QString name;
  };
这个是我写的程序,我想用Qt linguist把字符串数组中的字符提取出来进行汉化 但是使用lupdate XXX.pro
后老是提示tr() cannot be called without context这个问题,我在mainwindow.cpp文件中使这样调用这个字符串数组的QString text = QString::number(sound_temp.id+1).sprintf("%03d",sound_temp.id+1)+ sound_temp.name;
        button_container_sound_left_and_right.
               get_button_by_index(i)->setText(tr(text.toLatin1()));

请问这个问题如何解决呢 实在是不懂,比较急切


国际化只能翻译固定的字符串,不支持“符号变量”的翻译 --------------------编程问答-------------------- 那请问如何解决这个问题呢 因为项目要用 比较的急 求解 在线等待呢
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,