2010-04-08

从 CoSign 看开源软件本地化(2)

上文提到通过根据浏览器支持的语种列表,自适应的选择页面模板,初步实现了 CoSign 的本地化。但是这样将本来就非常冗余的页面模板扩大了一倍。我们在模板定制过程中,愈来越感觉到消除页面中冗余的必要性。这就是我们在2008年紧接下来开发的一个功能:扩展 CoSign 的模板宏,使得模板可以嵌套。

模板中的 include 宏,简化模板

CoSign 本来就支持模板的宏替换,但是支持的宏非常有限,只支持以 $ 开头外加一个字母组成的宏。例如:
  • $t :一般扩展为页面标题
  • $e :扩展为错误信息
宏替换是在 subfile.c 的 subfile 函数中进行的。我们直接在该函数中扩展,增加了页面嵌套宏。 语法:
  • $!include(PageName) 字符 $! 加上 include 关键字组成的了扩展宏。含义为将另外的页面 PageName 插入到本页面当前位置中。
  • $!include(inc/*.html) 支持通配符。即将 inc 目录下的所有 html 文件包含进来
  • $!include(%lang%/*.html) 支持语言通配符。即 %lang% 将被浏览器支持的语种逐一替换,直到找到缺省的文件。
在有了模板嵌套的“工具”后,我们就开始了大幅度的模板改造,将模板中共有的部分提取出来,减少了页面内容的冗余。 但是,仍然有几部分内容没有实现本地化:
  • 静态页面没有本地化。静态页面是诸如重定向错误(looping.html) 等错误页面,这些页面不是模板,而是作为静态页面,由 Apache 提供页面响应。
  • 认证的错误信息没有本地化。这些错误信息,是由独立于 CGI ,也独立于页面模板的认证因子返回的错误信息。
下一个文章,将介绍静态页面通过 Apache 的内容协商实现本地化。
blog comments powered by Disqus