存储多个语言版本的网站的最佳方法是什么?

时间:2010-07-14 00:26:08

标签: translation

我的网站(在Linux服务器上)需要支持多种语言 拥有/存储同一网站的多种语言版本的最佳做法是什么? 我可以想到一些:

  1. 存储在DB
  2. 每种语言的不同视图文件
  3. gettex
  4. PHP文件中的硬编码字(如phpBB中)

3 个答案:

答案 0 :(得分:2)

对于网站,您确实需要考虑多种类别的内容进行本地化:

  1. 您在许多情况下在CMS中创建,编辑和发布的文章类型内容元素。
  2. 每个页面(或页面子组)共有的较小内容块,例如标语,模糊,联系表单周围的文本,以及导入的内容,如新闻自动收录器或广告和会员链接。其中一些可能只出现在一种语言中(例如,如果您在某些地区没有提供某些服务,或者没有,比如适合特定语言的语言导入内容:删除元素可能会更好,而不是向不会说话的人提供英语。
  3. 纯功能元素,如“点击此处评论”,“更多...”,高级导航等,有时是模板的一部分。其中一些可能是图像内部。
  4. 对于1.主要决定是否使用CMS。如果是,您绝对需要选择支持多种语言的语言。我不了解PHP CMS的最新发展,但是一些Django CMS应用程序(Django-CMS-2,FeinCMS)支持多语言内容。例如,不要忘记日期戳也需要本地化(或者你可以通过选择ISO日期来解决这个问题,尽管这可能并不总是可行)。如果您不使用CMS,并且所有内容都在您的HTML文件中,那么gettext是可行的方法,并将.mo文件(和您的离线.po文件)按语言保存在文件夹中。

    对于2. 如果您有一个具有良好多语言支持的CMS,请尽可能在CMS内部获取。原因是这些位确实发生了变化,并且您希望尽可能少地编辑模板。如果您自己编写代码,请考虑按语言导出所有in-CMS字符串的方法,以便将它们交给翻译人员。否则,再次gettext。主要问题是这些元素可能需要硬编码语言选择代码(if $language = X display content1 ...

    对于3.,如果它在您的模板中,请使用gettext。对于图像,每个语言文件夹将派上用场,为了天堂的缘故,选择图像的一代可以自动化,或者你(或你的图形艺术家)会疯狂编辑100个自定义图像与字符串的语言你不明白。

    对于2.和3.,从语言选择中抽象可能有助于选择适当的块或内容目录(保留本地化图像或.mo文件)。

    你绝对想要避免的是保留一堆包含大量文本内容的HTML文件,这将是一个难以维护的噩梦。

    编辑:关于gettext,.po和.mo文件的所有内容都在GNU gettext manual(比您想知道的更多)或稍微过时但更友好的tutorial。对于PHP,有PHP gettext functions,还有Zend Locale documentation

答案 1 :(得分:1)

我建议使用Zend_Translate的Gettext适配器来解析mo文件。非常有效+缓存。你的电话就像是

echo $translation->_("Hello World");

哪个会找到该指定字符串的区域设置特定键。

答案 2 :(得分:0)