tr("xx")如何复用

帅得不敢出门
博客专家认证
2011-01-12 12:17:29
我的想法是:
QString qstr = tr("test");
QString str2 = xx + qstr; // QString str2 = xx + tr("test"); 二者效果不同
...........
然后在多处使用qstr ,多语言翻译后,能把所有用到 qstr的地方都翻译成 "测试"
结果不行。

难道非得在每个地方都用tr("") 然后每个地方都要进行翻译转换 ?

感觉这样的方法很烂,有什么办法么?
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2011-01-12
  • 打赏
  • 举报
回复
对,全局变量初始完后,才进入main,然后再加载翻译文件,这样就迟了。
dbzhang800 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zmlovelx 的回复:]

搞定了,把const去掉,初始化放在函数中,然后调用。
不过感觉有点怪。
[/Quote]
呵呵,其实是个很简单的东西,tr() 只不过是个函数调用,它根据当前加载的翻译文件,查找你传入的字符串,返回一个新的字符串。

当你调用它的时候,翻译文件未加载,显然不会起作用。

也可以看一下
http://hi.baidu.com/cyclone/blog/item/aa56e5dd1a79f7e176c638be.html
帅得不敢出门 2011-01-12
  • 打赏
  • 举报
回复
搞定了,把const去掉,初始化放在函数中,然后调用。
不过感觉有点怪。
sofa120 2011-01-12
  • 打赏
  • 举报
回复
这里看来的,不知道有没用
http://wiki.forum.nokia.com/index.php/Qt%E7%9A%84%E5%9B%BD%E9%99%85%E5%8C%96%E5%92%8C%E6%9C%AC%E5%9C%B0%E5%8C%96


在写代码的时候,我们可能希望把所有的字符串都放在一个地方,而方便于我们自己集中作改动。真正用到的时候,用一个字符常量指针去访问。那么我们可能想到这样写代码

// Wrong,这种实现Qt不认识,无法作翻译
const char *appName=“OpenDrawer 2D”;
QString translated=tr(appName);

//ok, 需要使用QT_TR_NOOP字串来提醒Qt系统该翻译的字串
const char *appName=QT_TR_NOOP(“OpenDrawer 2D”);
QString translated=tr(appName);
帅得不敢出门 2011-01-12
  • 打赏
  • 举报
回复
实际情况是qstr是定义在a.cpp a.h中extern声明
然后在多个不同的.cpp中使用,
结果转换失败。

如果是在一个.cpp中使用是没有问题的。
dbzhang800 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 zmlovelx 的回复:]
我的想法是:
QString qstr = tr("test");
QString str2 = xx + qstr; // QString str2 = xx + tr("test"); 二者效果不同

[/Quote]
能介绍你这个结论是如何得出的么?

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧