EE-Forum.org的WP多语言版本改造

引子——被“樯”逼出的故事

为方便英文内容,需要一个全英文站点。本打算在国外平台上创建博客,这半年多我已创建过两个,不久竟然都被“樯”了(应该和我去创建博客没关系吧, 相应的平台网站整体性被“樯”)。其中一个被“樯”几个月后,又可从国内访问了。这样的遭遇并不仅是最近这两次,更早以前我还试过。这么被折腾几次,恢复 了也不敢继续用,因为是长期工作角度的考虑,真被它玩不起。无奈还是考虑放在自己的网站上。本打算在ee-forum.org下另装一套英文wp,但发现 有些多语言支持插件描述的功能相当不错,就起了直接改造ee-forum.org支持多语言的念头。

方案选择

在WP的插件库中搜寻,发现不少多语言支持的方案(可用multilingual, language等关键字搜索)。大约浏览了多个类似功能插件的介绍,其中有一款看似不错,但是收费,而本站解决方案全部采用的是免费的wp资源。通过阅读插件描述,发现©xili的几款插件(其插件主页,竟然也被“樯”了!),思路简洁合理,它完全基 于wp本身的数据结构(参见:WP标签和分类的数据结构和使用特点)和多语言支持(基于.mo)拓展出可实时切换的多语言支持功能,且有较多的下载数,和好评数。特别是,最近正紧跟wp3.0,3.1进行更新。此外,它看来是有实力的专业的机构(我并没有去特意了解)所提供,xili系列还有许多其它插件。于是我选择了 xili所称“多语言三部曲”即:xili-language, xili-dictionary, xili-tidy-tags。当然,这有个前提,即所采用的主题界面信息使用_e(), __()方式,支持语言翻译。

实施

做此工作没有找到其他可借鉴的信息,也走过一些弯路,这里只简要报告成功的过程,希望它对有类似需要的朋友有所帮助。

  • 从后台安装xili-language, xili-dictionary, xili-tidy-tags,启用之。
  • 进入xili-language设置,已发现了两个语言:zh_CN, en_US(另外还有en_EN相当于默认的后台语言吧。这个方案可添加N种语言,但我只需要2种),所以几乎无需更改什么设置。
  • 为已有的文章(posts)、页面等设置语言(此方案会根据文章或页面的语言来决定整个界面语言)。
  • 更新各语言的.mo:这是关键的第二步。打开xili-dictionary,导入当前主题的词语、当前分类词语、网站信息,导入后形成了巨大的 词汇表,其目的是为每个语言形成完整的互相对应的词语,在xili-dictionary的界面上可以完成这一工作,但我采用导入后,分别导出生成新的 po(我的方案是两种:zh_CN.po, zh_US.po),然后用PoEdit分别进行翻译,然后编译成mo上传(这个方案绕开了xili-dictionary的词汇表管理,似乎有缺点,也 有方便之处)。
    这一过程完成后,多语言界面就生效了。
  • 标签改造:这是其多语言改造的第三步。打开Tidy Tags,它将自动所有当前标签的表,然后将其按语言分组,这样,使用其附带的Tags cluds小工具,就可以显示不同语言的标签云了。(我还没发现标签自动对译捆绑的方法,或者是因为有些功能还没研究透彻:-))
  • 其它问题:这些琐碎的问题占了大部分工作时间。有些细致的设置,比链接的按语言分类、对边栏标题的支持等。其中,边栏小工具的标题,我是手工添加到mo中的。有几款插件不支持,只好淘汰了。

小结

环境:Linux/MySQL/WordPress 3.1 (zh_CN), UTF-8, Mimbo 3.0 theme

完成的多语言功能要点:

  • 形成了简体中文(zh_ch)和英语(en_us)两种语言版本,并可随时动态添加更多语种。
  • 按浏览器语言自动选择进入主页的语言。
  • 按文章/页面的语言自动选择界面语言。
  • 不同主页的语言界面信息全部是本语言,本语言的文章(posts)被优先显示。
  • 整个分类系统(及说明)有完整的多语言版,且通过分类索引时,只出现该语言的内容(自动添加例如?lang=en_us这样的参数)。
  • 在使用标签时,应当只选与post/page设置同语言或跨语言组的。
  • 在导航菜单可添加语言版本选择菜单。

还遗留一些小问题,例如:

  • 如何控制在某一语言界面中完全不显示其它语言的文章、页面。这涉及到较多方面。
  • 标签如何实现像分类那样的完全对应。
  • 文章、页面的语言对应版本之间可设置链接,但尚不知如何简单切换。
  • 等等。

其中有些是我对这个方案的细节了解运用不够,这套插件本身也有不少可改进的空间。还有些似乎与使用的汉化版有某种关系:这样的多语言方案,其实由纯 的原语版本做起更好,更纯粹。换言之,有这种灵活的多语言方案,就不应该用那种死板的“汉化”改造方式,这一点,也是我们设计企业应用方案时的一个基本考 虑。

几款杂志-内容管理型主题的选择

WordPress的世界,真是一个生机勃勃的天地。灵活的有机系统架构,丰富多彩的主题、插件,追求精致、完美的风气,都让我很幸福。

最初的兴奋之后,开始遇到“幸福的烦恼”。目不暇接的主题,难免挑花了眼。在一番搜索和学习之后,渐渐熟悉了这个世界的一些语言,也归纳出自己的需求:

多数的主题是追求个性与视觉效果、多媒体展示的个性日志型。它们太丰富、太漂亮了,但不是我这次的任务。我想要的东西,被称为“杂志”(magazine)型,或“内容管理系统”(CMS)型,以文本展示为主,且不属于“新闻”风格的。而版面布局,则并非如外观那么花样百出,是有一定规律的。循着这些线索,搜索不再盲目,很快有了些眉目。

分享是这个世界的精髓。就把自己这几天“看楼”的结果归纳记录一下,也顺便分享给象我一样的菜鸟们。

我的首选:Darren Hoyt 的 Mimbo 3.0

通过专门介绍免费模板的寂静街日志发现了这个主题。它有简约而严谨的文字内容网站风格,布局经典,结构合理,而且相当简单精炼,没有过多的花样。提供了独立.po/mo的界面用语文件,这样就很方便形成不同语言的版本。然而,这个主题再另外的方面也有个性:它提供的配置的东西很少。如果觉得它的基本功能不够用,那就要自己动手做二次开发了。在前面看过许多模板的基础上,我发现这一款已经相当符合预期,所以准备先选这一款,再按自己的规划进行优化和小小的改造,首先做的事情,就是按照网站的用语需求习惯,做了自己的汉化文件。链接:英文版在线演示

备选:Melvin Lee 的 Arras Theme  1.3.6

好多地方都在推荐这款主题,它同样具有经典的布局,调整起来更加灵活,并且支持幻灯片方式的展示,设置首页的题头图片等。我本来已经初步认定选择它,有两个理由让我忍痛(真的很喜欢它首页布局、配置的灵活性)割爱:

  • 它的图片与幻灯,不是我的静态文字为主的内容网站最需要的,要动手改,是怎么都想避免的。
  • 先从简单做起吧,Minbo 3.0现有的功能虽然没有它灵活,但对我的任务而言,应该够用了。

其它参考

给我留下较深印象的杂志/内容管理型主题,还有:

Mehmet Ozekinci Magazine Theme – Chinese 1.0

与 Arras类似风格的布局,我最喜欢它紧凑的三栏设计。暂时没有选用的原因,是因为先熟悉了前者,而它预留的,很大的图形广告位置(这种模式看来现在很时兴),也是我的网站暂时不需要的。

c.bavota Magazine Basic 2.5.6

真的非常喜欢这个主题的设计。我形容为简单而有特色的“小报”风格,在内容网站的典型导航结构框架下,主页采用1、2、3堆叠的版块设计,和自动取图显示,既简单实用又别具特色。我没有选它的原因只是它的风格不符合我的学术、学习型内容网站。

这里总共提到四款主题,似乎不多,但它们是在我安装、初步尝试过的,不下十几二十种里筛选出来的。对于需要建立比个人网站更丰富,但规模不大的严肃内容型网站(不是小型日志、博客)的朋友来说,相信这些推荐是有价值的,找出他们也并不容易啊。

WP标签和分类的数据结构和使用特点

WordPress建立了一个词语(term)表,在此基础上,建立词语分类系统表(term_taxonomy),建立不同分类法各自可用的词语表。其数据关系如图所示(根据wp 2.9)。

WP词语表及标签分类的数据模式

可以看到三种分类系统:标签(post_tag)、分类(category)、链接分类(link_category),这三种标识可以理解为“词语”的不同用途。

根据数据结构,和少量试验,留意到以下几点:

1)post中,每个独立发出的对象都有一个记录,例如每个文章版本和上传的媒体文档,wp可以为其单独关联标签或分类,即,每个版本使用的标签不同,都有记录,上传媒体文档也可以关联标签和分类,但此功能目前还未包含在wp 2.9中。

2)标签、分类等不同分类法使用同一个“词汇表”,词汇的“别名”(slug,注意,不是name)是唯一的。所以当试图在tag或category中分别添加同名词汇(已别名为准),系统会对应到已有词汇表,并拒绝添加slug重复的词汇(但并没有任何提示)。
例如:
已有标签别名“abc”,此时在分类中添加一个别名为“abc”的分类,系统不会重复添加词汇表,而是设定为将同一词汇“abc”作为标签使用。反之亦然。

初步体会:

1)在创建标签、分类、链接分类时,保持名称和别名(name, slug)一致。虽然系统允许你改成不一致,但那样容易给应用管理带来困惑。

2)虽然分类、标签等是分别使用的,但对意义相同的词语保持一致,这样语义明确,将来想修改时,可以仅在一处一次性修改,很方便。

3)对于内容少的个人日志而言,分类和标签也许用好一套就可以了。但对于有较多内容,需要提供全部内容的良好索引机制而言,分类系统和标签系统各自有不同的用途,互相配合使用,需要自己有一个清晰的规划。笼统地说,标签是面向发布对象的,分类则是预设的,一般而言,分类宜简明恒定、标签比较随意。