2008年11月30日星期日

使用Foxit Reader作为默认PDF阅读器,并在资源管理器中显示缩略图

Foxit Reader作为一款替代Adobe Reader的PDF阅读器,其性能上具有极大的优越性(v2.2),功能上也毫不逊色,实在是追求效率不可多得的工具。

当然为了提高效率,我们可能需要在资源管理器中显示PDF文件的缩略图。但是Foxit Reader似乎没有相应的功能,使用Foxit Reader作为默认PDF阅读器,无法在资源管理器中显示缩略图(Adobe Reader可以)。

解决方法:
将Adobe Reader/Adobe Acrobat作为默认PDF阅读器,并在资源管理器(已设置为以缩略图显示)中,调整视图模式为任一图标模式,等待系统生成缩略图后,再设置Foxit Reader为默认阅读器即可。
注意:当PDF文件内容被编辑(如使用Adobe Acrobat制作书签)后,缩略图会失效,需要重新生成。
 如上图,第一个是被编辑后的效果,后两个正常的效果。

2008年11月21日星期五

汉化Family Tree Builder

前文有言理想的族谱软件Family Tree Builder虽有中文站,但是软件本身没有中文化,因为很喜欢并且很需要这款软件,就自己动手汉化了过来。



汉化原理很简单:
1. 备份软件安装目录下,Lang子目录中的English.lang(也可以是其他国家的语言文件)。
2. English.lang其实属于一种属性文件(properties),将每一行的第二部分翻译成中文(或合适的文本)即可。
3. 备份安装目录下,Res子目录中的English.bmp图片。
4. 制作一张32x28像素,bmp格式的中国国旗图片,命名为English.bmp,放到Res目录。
5. 启动程序,菜单“工具(Tools)”-“选项(Options)”,
“名字(Names)”-“Display people's names”设置为“Last First (Armstong John)”,即让姓氏(Last Name)放在名字(First Name)之前,符合中文习惯。
“日期(Dates)”,“Day/Month/Year format”设置为“%y%-%m%-%d%”,“Month/Year format”设置为“%y%-%m%”。可以根据自己的习惯设置,其中%m%是使用英文短格式,如Mon,在English.lang改为数字即可。

注意:部分文本不可以翻译为中文,如日期选择按钮类的,提示文本为中文时,显示乱码。另外程序本身左侧的列表(List)的姓名列,中文也显示列表(好像所有List View都不支持中文)。

下载文件托管在Google Code上,同时支持SNV提交,有兴趣的朋友联系我,希望大家来共同完成。

2008年11月15日星期六

Family Tree Builder:理想的族谱/家谱软件

去年春节回家,老爸让我把家谱(族谱)放到电脑上,但当时家里不能上网,手头又没有理想的家谱软件,只能把一些文本输入到电脑上。

后来又尝试使用树型结构(当时使用梅花雪树)临时模拟,但是族谱是一种双亲(甚至多亲:[古代可同时]结婚多次)树型结构,使用普通的单亲树型结构就显得很别扭,最后使用纯文本拼成一个简易版本。
爷爷 + 奶奶        外公 + 外婆
     |                  |
  ---+----+       +-----+---
          |       |
         老爸 + 老妈
              |
        +-----+-----+
        |           |
     大儿子       二儿子
这个版本也算理想,但是涉及到详细资料,尤其是当这棵树变得更大而复杂,盘根错节时,这个纯文本拼凑起来的双亲树就显得力不从心。

后来回杭州工作时,找了一些软件试用,大都不怎么理想(大概是我崇洋媚外的缘故,国内确实还没看到什么让我觉得有脸拿出来使用的族谱作品),只是找到一个仅支持联机使用的Flash版本:中国传家宝,只能联机使用让我觉得很不方便,而更不方便的是设计上有一些(大概)不合理,操作不便,并且速度也不行,让我满意的大概只有显示效果不错。

过了很长时间,零星的找找也没得到什么结果。

后来无意在VeryCD上看到一下族谱软件,是外国专业公司制作的产品,不过给人的感觉有点太强而大的样子,而且收费挺贵。顺手又上Google搜寻一番,收获不小,这个市场貌似现在很活跃的样子。

于是就发现了这个相当理想的免费软件:Family Tree Builder(这是它的英文网站),号称支持29中本地化语言(事实上也是如此)。不过遗憾的是,虽然它有中文网站,但是软件本身却没有中文本地化版本,刚安装在Windows Server 2008上时崩溃了好几次(大概是我没有摸清它的脾性),而且更糟糕的是程序左侧的List成员列表视图显示中文乱码。不过它的优点也相当可观,免费,启动速度快,自动备份(崩溃后可以恢复),支持多国语言,视觉效果好,操作方便,功能齐全,而且可以导入导出标准系谱数据格式gedcom,这里是它的中文官方介绍,传说是族谱学家级别的人士和专业软件设计专家创造出来的(事实上看起来应该也是如此),适用于管理大型及小型的族谱。

2008年11月14日星期五

Firefox本地化及其切换

昨天用Firefox内置的下载管理器下载一个较大的文件,而且新搬来这边的网速慢到让我想起令人怀念的大学时期(那时候的校园网,不是一般人能够忍受的),无意中我看到下载管理器里当前下载的文件下显示着“第x小时,剩余x分钟”的提示(不超过一小时时,只显示“剩余x分钟”)。看到这个提示,我当时有两种想法:
1. Firefox下载管理器的剩余时间计算方法比较有趣,将每小时的下载分段,所以就有了第1小时,剩余20分钟的说法;
2. 翻译问题,实际应该是剩余1小时又20分钟的意思。

这两种理解方式都有其道理,而且在我最初看来,是各占50%的。

为了打消疑问,我Google,Baidu试了个遍,但是没有找到一条符合的记录,于是又尝试问一些对Firefox有/无兴趣的朋友,以及mozine的Gtalk群友,但是大伙都没有注意到这个,只能给个猜测的结果。

为了找到答案,就需要知道Firefox英文版是怎么说的,但是我还不想为此再装一个英文版Firefox,那么怎么切换本地化语言呢,又是大肆搜罗一番,找到一些近似的,这里整理如下:
I:
1. about:config
2. general.useragent.locale由zh-CN改为en-US。(前提:Firefox/chrome/目录下有en-US.jar和en-US.manifest)

II:
1. http://releases.mozilla.org/pub/mozilla.org/firefox/releases/下载安装对应的语言包(.xpi)。
2.  启用该语言包(安装后默认启用)并重启Firefox。

例如我的Firefox版本3.0.3,Windows,则语言包文件地址为:http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.3/win32/xpi/en-GB.xpi (粗体为Firefox对应的版本号)。

注意:http://releases.mozilla.org/pub/mozilla.org/firefox/releases/下的目录并不会列出xpi文件,将正确的版本号替换粗体部分,直接拷贝到地址栏回车即可。

安装并重启之后,可以看到Add-ons - 语言页签下会列出刚安装的English(GB) Language Pack语言包,想撤回中文时,禁用此语言包,重启Firefox即可。

III:
另外还有几个用来切换本地化语言的扩展,Locale SwitcherQuick Locale Switcher,它们可以让Firefox直接在菜单栏切换语言。

言归正传,话说回来,切换为英文语言后,尝试大文件下载发现原文是类似于2 hours, 8 minutes remaining这样的提示,意思是剩余2小时8分钟。

Firefox中文版的这个翻译确实不怎么样。

2008年11月7日星期五

文本宽度 及 文本框滚动偏移量(scrollLeft)

背景:
最近将多标签输入框进行修改,把原来随光标(caret)移动的自动建议浮动条改为根据当前标签相对左对齐。
解决方法很简单,计算当前标签前的文本宽度(将需要计算的文本转义后放入一个各字体样式与目标输入框相同的容器,如span中,span.offsetWidth即是文本的宽度。注意:文本框中,中文半角空格的宽度和英文半角空格的宽度显示为不同,虽然这两个空格本质上相同),浮动条根据该值定位即可。

问题:
当标签文本过长,超出文本框宽度时,标签文本会向左滚动,但是此时当前标签前面的文本宽度不变,定位浮动条时需要减去文本向左滚动的尺寸。

网页文档对象中,元素都有一个可读写的scrollLeft属性,表示元素内容相当元素容器向左移动的偏移量。

但是Firefox和Opera有一些例外,如文本框的scrollLeft始终为0,Mozilla的描述是:
If the element can't be scrolled (e.g. it has no overflow), scrollLeft is set to 0.
对于一些不可滚动(scroll,即没有溢出)的元素,scrollLeft始终为0。而单行文本框(在Gecko引擎看来)是不可滚动的,即使将样式指定为overflow:scroll(IE会出现水平和垂直滚动条这样的怪胎)。

虽说单行文本框是不应该出现滚动条这样怪异的形态,但是这不表示它是不可滚动的,当文本宽度大于文本框宽度时,(为了将光标caret显示在文本框可见区域)文本势必向左滚动,如图:

解决办法:
对于文本框不支持scrollLeft的浏览器,一个临时的解决办法是,在文本宽度大于文本框宽度时,浮动条定位在相对文本框后端若干像素(便于输入)的位置,在增量输入时,体验不是太差,但是在光标向前移动使文本向右滚动时,就会出现偏差。

最终解决办法是期待浏览器能够得到正确的scrollLeft值,或者其他巧妙的计算方法。