Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192599
  • 博文数量: 111
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 1240
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 07:46
文章分类

全部博文(111)

文章存档

2015年(2)

2014年(1)

2011年(1)

2010年(7)

2009年(100)

我的朋友

分类: LINUX

2009-08-08 08:15:05


转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静

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。

阅读(423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~