• 10716阅读
  • 13回复

[提问]使用linguist翻译中文无效的问题 [复制链接]

上一主题 下一主题
离线priestmoon
 

只看楼主 倒序阅读 楼主  发表于: 2008-10-15
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
按照linguist文档先修改pro,再lupdate,接着生成qm文件,然后修改test.cpp,最后编译。
测试程序中只有一个QPushButton,但显示出来的仍然是英文"Quit",而不是翻译后的"退出"。
不知道是为何。但从test.cpp的代码中似乎找到一点线索:

  1. //test.cpp
  2. //Qt 4.4.3
  3. #include <QApplication>
  4. #include <QTranslator>
  5. #include <QWidget>
  6. #include <QPushButton>
  7. class MyWidget: public QWidget
  8. {
  9.     public:
  10.         MyWidget(QWidget *parent = 0);
  11. };
  12. MyWidget::MyWidget(QWidget *parent)
  13. : QWidget(parent)
  14. {
  15.     QPushButton *quit = new QPushButton(tr("Quit"), this);
  16.     connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
  17. }
  18. int main(int argc, char** argv)
  19. {
  20.     QApplication app(argc, argv);
  21.     QTranslator translator;
  22.     bool loaded = translator.load("test_ch");
  23.     if(loaded) {     
  24.         app.installTranslator(&translator);
  25.         MyWidget test;
  26.         test.show();
  27.     }
  28.     return app.exec();
  29. }


以上代码中定义一个bool类型的loaded变量,用于测试translate.load()的运行情况。如果成功load,那么就能显示主窗口,反之则什么也不显示。
实际操作的情况就是什么也不显示,说明load失败。不过我不清楚究竟是哪里出了问题。
下面的附件压缩包中包含了pro文件,ts文件,qm文件和cpp文件。希望高手能够指点迷津,谢谢!

test.rar test.rar (2 K) 下载次数:17


离线yfx2003

只看该作者 1楼 发表于: 2008-10-16
还是直接参阅下 c++ gui qt4编程 一书的第18章,里面给出了“官方”的步骤

估计是哪里不大规范所致
www.qtcn.org/gpq4/
ajaxref.okajax.com/
离线neohope

只看该作者 2楼 发表于: 2008-10-16
"Quit"=>
退出(&Q)

可能是你选中了检测快捷键而你没提供?
翻译文字左边的问号或叹号改成对号试试

另外在命令行下,运行lupdate和翻译的输出发上来看看
离线priestmoon

只看该作者 3楼 发表于: 2008-10-21
To 1楼
书中提到的linguist方法,与文档中的完全相同,但还是不行。。。。

To 2楼
test中只有一个按钮("Quit"),没有设置快捷键。lupdate能正常工作,linguist里面也都打上勾了(绿色的),然后保存—发布。也就是说能生成正常的.ts和.qm文件且与源文件处于同一路径,.pro中也加上了TRANSLATIONS = test_ch.ts。
会不会是load的问题呢? 是不是参数没写对??
离线duduqq

只看该作者 4楼 发表于: 2008-10-21
可以用QFile测试文件存不存在,要不用绝对路径试试。
离线priestmoon

只看该作者 5楼 发表于: 2008-10-21
这一问题已经困扰我一个礼拜了。。。
想来想去,.ts和.qm应该都没问题。最有可能出问题的是以下两个环节:

(1).ts和.qm与源文件的相对位置。我是在lupdate,linguist,release之后,就这样放在同一路径下了。是否需要单独的文件夹,或者是否需要在哪里显式指定.ts和.qm的路径呢?

(2)translator.load("test_ch")j; 
在源文件中我是这样load的。但根据bool返回的情况,似乎是失败了。我想:既然test_ch.qm和源文件处于同一路径,那么也就没有必要再指定路径了。而"test_ch"这样的写法指的就是"test_ch.qm"。值得一提的是,就算把"test_ch"换成"test_ch.qm",仍然是失败的结果。
这个环节最有可能出错的是参数设置。

以上就是我对这一问题思考的结果,希望各位不要见笑。
另外,我有一个小小的请求:可否请哪位实地演示一下操作步骤,或者给出一个小的测试程序的源文件?
离线priestmoon

只看该作者 6楼 发表于: 2008-10-21
To 4楼
能否给一个您对这一问题的解决方案?
P.S:我是windowsXp
离线nliuser
只看该作者 7楼 发表于: 2008-12-04
把你的*.qm文件放在可执行文件目录(也就是debug目录)下面试试。
离线jahrakal
只看该作者 8楼 发表于: 2009-03-12
我把.qm文件加到资源中去的 用QTranslator加载的时候出现点意外:
我其中的一个工程可以正常加载,但是其他的工程竟然无法加载,方法采用的都是相对路径 load(":/***.qm"),真让人郁闷。
离线sherry_yang
只看该作者 9楼 发表于: 2009-03-12
将你的 bool loaded = translator.load("test_ch"); 中加一参数指定.qm文件的路径即可,如果放在工程文件下的话,可以直接用下面语句试试:

bool loaded = translator.load("test_ch","../");


qt4中默认.qm文件路径在debug或release目录下,如果找不到,翻译则无效
离线licklyboy
只看该作者 10楼 发表于: 2009-03-20
你好,我想问下你的.qm文件怎么在window xp下被识别的啊,我做出来的根本不能被识别啊.......
离线joetaiyuan
只看该作者 11楼 发表于: 2009-04-10
我也遇到了翻译无效问题,不过情况有所不同。
我在设计ui文件时,使用了“中文”设置界面,然后通过英文翻译文件想将其翻译为英文,无效。
步骤完全按照官方方法,就是不知道问题在哪里。。。
如果我通过写代码的方式,用中文设置界面,就没有问题。
请问有人遇到过这种情况吗
离线khong_fly08
只看该作者 12楼 发表于: 2009-04-10
bool loaded = translator.load("test_ch");

要用绝对路径吧
离线upork
只看该作者 13楼 发表于: 2009-04-28
同志们!就用sherry_yang的方法 我的就可以出来了
bool loaded = translator.load("test_ch","../");
加入"../"
该死的路径
快速回复
限100 字节
 
上一个 下一个