日志标签 i18n
从 CoSign 看开源软件本地化(7)
5月9日
这应该是计划中 CoSign 本地化系列博文的最后一篇。之所以,要以 CoSign 为题,写一下开源软件本地化,是因为:其一、在我们经历的众多开源产品的定制中,CoSign 本地化最纠结,我们投入的精力最多。在之前的几篇博文中应该已经看出来了。其二、我们在 CoSign 本地化时采用了作为常见的 GetText 方式,非常典型。其三、使用模板以及模板本地化也是在 MVC 框架流行的今天最为重要的页面本地化方式之一,当然也要承认 CoSign 的模板实际上只是字符串替换,没有一些复杂模板中才有的编程能力。
作为这个系列博文的最后一篇,介绍一下 CoSign 的服务页面的本地化过程变迁历史,便于单点登录系统维护者理解群英汇单点登录平台和 CoSign 的异同。
从 CoSign 看开源软件本地化(6)
5月1日
在《从 CoSign 看开源软件本地化(3)》博文中,我们采用 Apache 内容协商,实现的静态页面本地化。这在当时是没有办法的办法。有点金玉其外,败絮其中的感觉:
- 冗余度增加了,本来保持静态页面和模板的一致性就够头痛的了(因为用户可能需要定制模板),这回又大大增加的静态页面的数量
- 采用 Apache 内容协商,需要更改 Apache 的配置,增加了软件配置的难度
在我们实现了 CoSign 核心本地化和模板功能的括中之后,很自然的就想到了将静态页面也纳入到模板的框架中来的想法。
从 CoSign 看开源软件本地化(4)
4月13日
上文中我们提到,仍旧困扰我们的问题是认证因子的错误提示信息没有本地化。
什么是认证因子呢?
- 认证因子是一些独立的程序或脚本,位于 /opt/cosign/factor 目录下
- 认证因子对登录CGI传递的参数(如:用户名/口令,邀请码等)进行认证,认证成功返回0,认证失败返回1。
- 认证失败同时在标准错误(stderr)中输出错误信息。而这些错误信息被登录 CGI 捕获并显示给客户
- 认证因子可以级联,形成所谓双因子认证或多因子认证。例如:口令+指纹识别,口令+虹膜验证 都是非常典型的双因子认证。不过目前还没有客户要求实施这么复杂的认证方式。 ;-)
- 认证因子运行在独立的空间下,无法获取 HTTP 环境,就是说不知道用户的语种选择,所以只能说官话。“英文”?
从上面的介绍我们可以看出来认证因子的本地化,之前的方法都无效。只有从核心实现本地化一种办法可选。
阅读全部内容 »
从 CoSign 看开源软件本地化(3)
4月11日
上文谈到 CoSign 虽然模板的本地化已经很方便了(有了 Include 宏),但是静态页面尚未本地化。那么又哪些静态文件呢?
CoSign 2.x 有两个静态页面:looping.html 和 post_error.html。CoSign 3.x 又增加了一个静态页面:validation_error.html。
- looping.html: 当发生循环重定向时,跳转到该页面
- post_error.html: 当由于单点登录退出导致应用提交过期导致可能的数据丢失,重定向到该说明页面
- validation_error.html: 当重定向的地址和预设地址不匹配跳转到该警告页面
这些页面以静态页面出现,而不是模板文件由CGI调用,因此其本地化就不可能用之前的运行时模板选择以及模板中的 include 宏来实现多语种。那么该怎么办呢?
从 CoSign 看开源软件本地化(2)
4月8日
上文提到通过根据浏览器支持的语种列表,自适应的选择页面模板,初步实现了 CoSign 的本地化。但是这样将本来就非常冗余的页面模板扩大了一倍。我们在模板定制过程中,愈来越感觉到消除页面中冗余的必要性。这就是我们在2008年紧接下来开发的一个功能:扩展 CoSign 的模板宏,使得模板可以嵌套。
阅读全部内容 »
从 CoSign 看开源软件本地化(1)
4月7日
开源软件本地化,一般来说都是 a piece of cake。但是 CoSign (密歇根大学开发的单点登录系统)的本地化却是让我们大费周折,很是经历一些往复。
CoSign 是用 C 语言开发的,其 web 服务也是通过 C 语言开发的 CGI 来提供,而Web 页面是通过页面模板加载经过处理后形成的。CoSign 本身并没有提供多语言支持,但是模板可以用户自定义,就是说可以用中文来写 web 页面模板。
在我们最早的版本中,采用的是:多模板(根据语种自适应选择),以及 Apache 的内容协商实现的多语种支持。
在最近我们通过 Gettext 在底层实现了本地化,又通过精简模板,静态页面模板化等方法让单点登录页面定制更简单。
我们在 CoSign 本地化中所经历的,在我们众多开源产品的本地化中是最复杂和独特的,因此撰文共享。
Rails多语言支持
1月9日
Rails I18n(国际化)
Rails在 2.2 版本以后已经把 I18n 模块引入了 Rails 框架,以前的多语言支持大都采用 localization 插件完成的。在 Rails 2.2 版本后,我们只需要在配置文件中开启 I18n,并写相应语种的资源文件就可以了。
I18n 演示例子
1、开启I18n
创建一个配置文件,用于存放本地化的信息( RailsProject> config/initializers/i18n.rb),文件内容如下:
I18n.default_locale = 'zh'
LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"
LANGUAGES = {
'English' => 'en',
'Chinese' => 'zh'
}参数解释:
I18n.default_locale 指定默认的本地语言
LOCALES_DIRECTORY 指定存放多国语言文件的目录
LANGUAGES 存储所支持语种

最新评论