Mozilla研究—minimo的本地化
国际化通常简写为I18N ,其中18表示I和N之间省略了18个字母;而本地化同样可简写为L10N。在我的印象中,国际化通常是一些基础平台和库,为本地化提供必要的支持。而本地化则是为某个国家/地区做些特别的定制(如文字翻译)。没有国际化的支持,本地化将非常困难。没有本地化的实现,国际化也没有用武之地。两者相辅相存,所以大多数情况下,很少严格区分这两个概念,本文中也是如此。
国际化/本地化是非常复杂的,它要考虑很多问题。比如,翻译后字符串长度对界面的影响、输入法、字符串编码、时间/日期/货币的格式、文字显示的方向(左到右和右到左),甚至涉及宗教风俗等等。这里我们只介绍字符串本地化的问题。
我们知道,在Windows下,开发时字符串放在资源文件里,编译后放在可执行文件或动态库里,运行时通过字符串ID去查询实际的字符串。这种方法只适用于Windows平台,其它平台通常都有自己的方法。Linux版的minimo,它采用了四种不同的方法:
1. 在C/C++中使用gettext。Gettext是Linux下处理字符串本地化最正统的方法,特别适用于C/C++文件。Minimo主界面及其它设置界面都没有支持字符串本地化,它在GTK控件中直接显示原始的英文字符串。要本地化字符串只能自己处理,这可以参照在Linux下开发多语言软件。
2. 在XML中使用实体(entity)。XML中实体(entity)与C/C++中的宏有点类似,解析器在解析时才展开为实际的内容,比如<表示字符’<’。Mozilla通过实体来引用字符串,比如实例&warningText3.label;可以引用英文中的"You should only install software from sources that you trust."。实体的定义是放在DTD文件中,每种语言都有对应的DTD文件。DTD本来是用于描述语言语法的,恰好也可以用来存放实体,这种方法即方便又合符标准。
下面是在xpinstallConfirm.xul引用DTD文件的示例:
3. 在javascript中使用属性(properties)。前面两种方法在javascript中都行不通了。为此Mozilla自己实现了字符串加载方法,字符串放在. properties文件中,javascript通过nsIStringBundle接口去查询对应的字符串。
在XML文件中声明properties的位置:
src="chrome://mozapps/locale/xpinstall/xpinstallConfirm.properties"/>
在javascript中获取字符串:
var bundle = document.getElementById(”xpinstallConfirmStrings”);
var introString = bundle.getString(”itemWarningIntroSingle”);
4. 在desktop中使用freedesktop的方法。desktop文件是linux桌面的一个标准,它用来把应用程序集到桌面(如开始菜单)里面来。应用程序要提供一个.desktop文件,里面有相应的描述信息。桌面根据这些信息在适当的位置加上应用程序的入口。Minimo的desktop文件放在embedding/minimo/ipkg目录里,可以在里面加入其它语言的字符串。具体方法见Desktop Entry Specification。
Mozilla研究—minimo的本地化
最新推荐文章于 2024-08-27 13:38:21 发布