蜗牛从了生活
歪酷博客
日历
网志分类
· 所有网志
· 计算机技术
· 琐碎
· 育儿记录
最新的评论
· 12/17 Skype 可...
站内搜索
我的广告
森海塞尔MX500耳机 附09年真假对比『皇冠正品最低价』特价
35.0元 
智多熊V13早教智能玩具月销20000只-一个好的玩具影响孩子的一生
139.0元 
零利润!皇冠特价 蔚蓝的涟漪金丝球项链
49.0元 
友情链接
· 歪酷博客
· 管理我的Blog
· 一步步前行
· 建华
· 江南西道
· 村里的考拉
· 人生若只如初见
· wisefang的博客
· 天亮说晚安
· My Photos on Flickr
· My Videos on Youtube
· 我的共享界面
· sourceforge.net
· Java开源大全
· 瘾科技
· 与donews交换链接
我的豆瓣秀
· 最近在读...
· 最新想读...

订阅 RSS

0081678

歪酷博客

这山望着那山高
蜗牛从了生活 @ 2010-01-27 11:21

1. 修改项目
1.1 C++Builder中要使用两个文件gnugettext.pas 和 gnugettext.hpp,将前者加入项目。
1.2 在Project.cpp的Application->Initialize();之前加入TP_GlobalIgnoreClassProperty(__classid(TAction), "Category");
    和TP_GlobalIgnoreClass(__classid(TFont));等,gettext在翻译时会忽略掉这些属性和类。
1.3 在Form::OnCreate事件中加入TranslateComponent(this);翻译本窗口的所有控件。

2. 生成.po文件
2.1 右键项目目录,点击菜单“GG Extract translations to template”,将生成一个default.po。
2.2 gettext会遍历所有项目文件(.pas, .cpp, .c, .dfm,但不包含头文件?),为源代码中需要翻译的字符串(“_(...),或gettext(...)等”)
    以及.dfm中所有控件的String属性(不包括Name)生成翻译项,注意:TP_GlobalIgnoreClassProperty和TP_GlobalIgnoreClass只在程序运行时起作用,
    它们是基于类型系统工作的,无法过滤掉.dfm中不需要翻译的类和属性。
2.3 如果已经有旧的.po文件,可以将新抽取出来的.po文件合并到旧的.po文件中,方法是右键旧的.po文件,点击菜单“Merge Template”。
   
3. 翻译.po文件
3.1 可以使用poedit或者gorm翻译.po文件。gorm支持label机制,可以将步骤2.2中那些无法过滤的.dfm中的类和属性标记为ignore,然后将其分离到ignore.po文件中,
    在将新的.po文件合并到旧的(已翻译的).po文件之前,使用msgremove命令将ignore.po文件中的翻译项从新的.po文件中移除。
3.2 另外一个小工具IgnoreEditor.exe可以打开两个文件default.po和ignore.po,然后可以快速地在两个文件之间移动翻译项。
3.3 可以右键default.po文件,点击菜单“Compile to mo file”生成.mo文件,poedit和gorm中也可以直接将.po文件编译成.mo文件(后者需要将gorm.exe置于gettext目录下)。

4. 项目发布
4.1 将.mo文件置于.exe所在目录的“locale/**/LC_MESSAGES/”子目录下,其中"**"为两个字符的语言代码,或者语言代码和国家代码的组合。
4.2 也可以将.mo文件内置于.exe文件中,右键.exe文件,点击菜单“Embed translations”。

5. 存疑
5.1 gettext默认使用default domain(即使用default.mo文件),但可以通过调用“textdomain()”或者"dgettext(domainname, str)"自己指定domain,
    但似乎const string字符串依然还在default domain中(资源文件中的字符串也是,但可以调用“AddDomainForResourceString()”来增加查找域)。
5.2 有多个应用程序时,是使用一个.mo文件还是分割成多个.mo文件?多个项目有公用的部分又该怎么办?
5.3 应用程序本来是中文的,怎么翻译?FAQ中说,可以先提取出所有中文翻译项,然后将程序翻译成英文,然后重新提取出所有英文翻译项,最后将两个.po文件合并成一个。




 
蜗牛从了生活 @ 2010-01-11 12:00

兄弟我上午上班去坐车,走到黄兴路第一辆874开走了,走到靖宇南路第二辆874开走了,等了好久坐上了第三辆874,这真是不幸。不过开心的是,下车时看到前面一辆874后面一辆874,我们的车超过了第二辆,赶上了第一辆。


 
蜗牛从了生活 @ 2009-12-27 16:12

上海下雪是难得的事,所以给它记一笔。


 
蜗牛从了生活 @ 2009-12-13 14:44

环境:c++builder,Windows
题目:在主窗口尚未显示时,如何将登录窗口显示在最上层?
描述:兄弟我在写的几个程序,在显示主界面之前需要用户登录。登录窗口动态生成,登录成功后删除。现在的两难问题是,在主窗口的OnCreate事件中生成、显示登录窗口时,无法将登录窗口置顶,任务栏也不显示窗口标题;在主窗口的OnShow事件中生成、显示登录窗口时,登录窗口会显示在主窗口上,而此时主窗口控件还未完全初始化,界面显示比较难看。
前者的原因是,主窗口还没有显示(或者隐藏)时,无法通过设置登录窗口的FormStyle = fsStayOnTop或者调用
  SetWindowPos(frmLogin->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
来使登录窗口居顶显示。
万能的CSDN社区(虽然帖子的格式通常很混乱,尤其是代码)早就有了答案,《Form的StayOnTop在ShowModal中為何不行.》这个帖子里有说,要解决这个问题,要做到两步:1. 将它的父属性设置为桌面,即desktop   2. 将它的状态设置成为stayontop。
他们的代码是:
// In header file
protected:
  void __fastcall CreateParams(TCreateParams &Param);
//---------------------------------------------------------------------------

// In cpp file

void __fastcall TfrmLogin::CreateParams(TCreateParams &Param)
{
  //调用基类
  TForm::CreateParams(Param);
  //去掉窗口标题区
  //Param.Style &= ~WS_CAPTION;
  //Param.Style |= WS_POPUP;
  //设为总在最上面
  Param.ExStyle |= WS_EX_TOPMOST;
  //设Windows Owner为Desktop Window
  Param.WndParent = GetDesktopWindow();
}
//---------------------------------------------------------------------------



 
蜗牛从了生活 @ 2009-11-29 19:01

名词解释
SQLite:一款跨平台的C库,实现了自包含、可嵌入、零配置的数据库引擎。
aSQLite:一套用于操作SQLite数据库的VCL控件。
说明
aSQLite的TASQLite3Table和TASQLite3Query派生自TDataSet,所以在C++Builder中操作SQLite数据库和使用ADO控件操作其他数据库代码风格基本一致。
一个是SQLite默认是自动Commit事务的,如果手动调用了TASQLite3DB::StartTransaction,则需要手动调用TASQLite3DB::Commit或TASQLite3DB::Rollback来结束事务。
一个是DBGrid::DataSource::TASQLite3Query时,如果需要直接在DBGrid中修改数据集,则需要指定TASQLite3Query的TASQLite3UpdateSQL属性。
一个是SQLite的所谓Column Affinity特性,意思是SQLite不强制数据类型约束,也就是说可以在一个integer类型的字段中插入一个字符串。我犯过一个错误:在int类型的字段中插入c++类型bool的值,结果插入的是'True', 'False' 的字符串,而直接在DBGrid中修改这个字段的值(显示为CheckBox)时,又存成了1或者0。
另外,SQLite和aSQLite都是源代码开放的。 


 
蜗牛从了生活 @ 2009-11-18 22:51

从北京回上海,动车卧铺,3G无线上网,今夜我不关心人类,我只想你。



 
蜗牛从了生活 @ 2009-10-06 17:20

4日携家小赴杭州参加同学吴君的婚礼。丫是我高中兼研究生同学,硕士毕业在上海工作一段时间后南撤,现在总算在那儿扎根了。
路上短信联系了另一高中同学蒋君,丫回“你是哪位?”,我回“讨厌,连我也不知道是谁了”,丫又回“这两年手机掉了3次换了5只”。在此鄙视不备份联系人的家伙。
我们来回都是直接去火车站买的票,都只能买到近三个小时后的票,还是动车的一等座位。沪杭之间火车单向一天有近80个班次,考虑到现在是国庆期间,不知道是否应该对“能”买到三个小时后的票感到满意。如果这个还能接受的话,在杭州东站打的就让人失望了,排队的人很多,排队的车没有,要同时能有三辆车进来能引起一阵欢呼。
婚宴在张生记大酒店举行,菜品和司仪都不错。只是我们桌的战斗力不强,老看到服务员大盘换小盘盘叠盘为新菜腾地方。司仪也很尽心,两个小时不间断主持,鼓动不少人上台表演节目,气氛搞得很热烈,最后指挥吴君的大学同学上台合唱《朋友》的时候,我想新郎官有点感动了。
到了杭州,西湖是必去的了。人是挺多的,不过可能我们转的地方没什么景观,算不上人潮汹涌。上厕所的时候遇到点麻烦,儿子大便急,但蹲位没了,还有几个人在排队。儿子着急的问“怎么还不出来呢?”,还蹲下去看里面。队伍中有个人劝我“小孩子憋不住,你在外面垫张纸给他拉了,等下收拾下好了”。儿子很害羞,不肯在外面方便。等里面人一出来,别人让我们先进去。小孩子的大便如同阵雨,来得也快去得也快,儿子说“好了”的时候我还没感觉到他拉了,他说“我人小,拉了两颗小大便”。


 
蜗牛从了生活 @ 2009-09-22 23:22

中国人旅游,重要的不是风景如何,而是说“我去过了”的满足感。
看这种片子一样,重要的也不是电影本身,而是一句“我看过了”。


 
蜗牛从了生活 @ 2009-09-02 10:49

兄弟所在单位这些天的网络有间歇性暂停的症状,兄弟我不胜其烦。
今天打开无线路由器的管理界面,看到上传带宽几乎占满。
兄弟我大怒,排查是谁在bt or 电驴,没有发现嫌疑犯。
yg同学到来后,指导兄弟我查看网络连接。
居然大部分连接从我的这台本本发出,大窘。
Active Ports显示进程Peer.exe是罪魁祸首。
兄弟我拿RaySource下载了一些metcn玉照和Sky Angel大片,下载完成后退出界面,
不过Peer.exe and PeerAdapter.exe进程健在。
奇怪的是我已经转移走了metcn玉照和Sky Angel大片,Peer.exe还在传啥文件呢。
还在yg同学的指导下,用SysInternals的procmon.exe查看了Peer.exe正在打开的文件。
居然是我已经转移走的metcn玉照和Sky Angel大片。
居然Peer.exe还擅长跟踪之术,跟到之后继续上传,上传还不让设置带宽限制。
这个世道,清白的下载工具没东东下载,有东东下载的工具又很流氓。


 
蜗牛从了生活 @ 2009-08-11 15:25

本来以为简单装修怎么地也得半个月十几天,没想到一礼拜没到就完工了。
房子装修后没看出啥大区别,主要是地板没翻新门套踢脚线没变动看上去还是90风格。
那时间上就充裕了一些,离房租到期还有段时间,田老师仗着放暑假就不请保洁的自己打扫了。
昨天是查黄历查出来的搬家好日子,可惜被台风预警吓住了,没敢大规模搬家。
昨天就形式上搬了一回家,带了些生活必需品,在新房子过的夜。
这个房子是6月19日签的居间,到昨天搬家用了两个月不到。
主要是原来房子空关,上家给了方便提前完成实质性交房,房产证还没到手。
这边是纯公积金贷款,收件收据直接给了担保公司,让我们等电话。
刚才打了电话去问,伊说没接到电话就是还没办好,不过还是帮我查了一下,然后说,贷款已放。
这个房子从签居间到签合同到过户到给钥匙到搬家,我这勇敢的心貌似都没激动过。
银行里的钱私人借来的钱划拉出去也没啥感觉,数字变小了没感觉。
就是刚才伊说可以拿产证了才稍微心跳了一下下。
这两个月来心头就是这么一件事,倒不是说天天都忙着,就是没心思做别的了。
书也不看程序也不写,处于专业停顿状态了赛。
等过了这阵得重拾手艺了。