Carbide.c++ Express中如何编译多语言资源文件

Carbide.c++ Express是Nokia推出的用于开发Symbian C++程序的免费IDE,基于Eclipse,目前版本是1.0。由于我是新手,加上以前用Eclipse开发Java程序,所以一下子就选择了用Carbide.c++(还有一个重要的原因是我从来就不喜欢MS的东西,不想用VS)。

最近一直在学习Symbian C++编程,写了一个简单的TicTacToe游戏。想在里面加上Localization的功能,于是参照NewLC上的这篇文章和S60 SDK的文档准备了资源文件。

loc资源文件的内容是这样的:

// TicTacToe.loc
// Localisation for TicTacToe

#if defined LANGUAGE_01 | LANGUAGE_SC
#include "TicTacToe.l01"
#elif defined LANGUAGE_31
#include "TicTacToe.l31"
#endif

// End of File

可见,英文和中文的资源文件分别是 TicTacToe.l01和TicTacToe.l31。只要编译资源文件时指定不同的标志就可以生成两种语言的资源文件。

Carbide C++不支持mmp文件(只能Import),只能在项目的Build Configuration里设置,如下图:

localization.jpg

这样设置以后,并不能把两种语言的资源文件都生成出来。查看了Carbide.c++ Express的Release Note就会知道,它目前一次只能编译一种语言的资源文件,原文如下:

Can only build resources for one language - LANGUAGE_sc by default Change the language macro in the Resource Compiler project preference. You can only build for one language at a time.

解决办法是先编译英文的资源文件, 然后手工拷贝成TicTacToe.r01;再编译中文的,拷贝成TicTacToe.r31。这样pkg文件里就可以使用它们了。

我不想每次都手工的去拷贝文件,就写了一个Python脚本epocrc.py,自动地根据设置的语言标志调用epocrc.pl去编译资源文件。需要改一下Build Configuration的设置,把原来的perl -S epocrc.pl改成epocrc.py,如下图:

epocrc-py.jpg

Meta Refresh Tag 与 IE 5.0

IE 5.0 ?已经成古董了吧?

可是客户居然在用。动态生成的Meta Refresh标记里,URL是带查询参数的,而且参数是带空格的字符串,于是bug出现了:重定向后的页面里得到的查询参数空格后的东西都没了。

不能怪别人为什么还用IE 5。既然知道可能会有空格,为什么不做一下URL Encoding再生成Meta Refresh标记呢?

推卸一下责任:程序不是偶写的,偶只fix bug。

Ref: http://www.permadi.com/tutorial/urlEncoding

恼人的JavaScript“小”问题 —— 避免Form被多次提交

这两天项目里遇到的一个Bug。一个查询表单,输入条件后点submit button或按回车键(无论Form域有没有被Focus)来提交表单。为了处理Form域没有Focus时也要响应KeyPress事件,实现了响应document对象的KeyPress事件的方法,在里面调用Submit的click方法,模拟Submit按钮被点击。但在Form域有Focus的情况下,这样的实现会造成Form被多次提交。

昨天为这个Bug加班到快到零点(一开始居然没想到是Form多次提交的问题,一直在后台Java程序里查来查去,汗。。。)

今天试过用Google发现的一些解决方法,比如(还没有试提交一次后disable按钮的方法)

效果不太好,最终(下班之前)的方案是在使用以上防止多次提交的同时,把Submit按钮换成普通的button,在button的onclick事件和document的onKeyUp事件里调用Form的submit方法,效果还不错。

写这些的时候,查到了disable submit button的方法,明天试试。

还有,找到了dev2dev论坛里一个介绍Structs如何处理多次提交问题的帖子。当然,已经跟javaScript没关系了。项目没有用到Struts,先收藏再说。