设置多语言网站的最有效方法是什么?

时间:2010-03-24 14:57:01

标签: php translation smarty

我正在开发一个可以使用不同语言的网站。它是一个LAMP(Linux,Apache,MySQL,PHP)设置,它使用Smarty,主要用于模板引擎。
我们目前翻译的方式是通过自编的智能插件,它将识别HTML文件中的某些标签,并在先前定义的语言文件中找到相应的标签。

HTML可能如下所示:

<p>Hi, welcome to $#gamedesc;!</p>

语言文件可能如下所示:

gamedesc:Poing 2009$;
welcome:this is another tag$;

然后输出

<p>Hi, welcome to Poing 2009!</p>


这个系统是非常基础的,但如果我这样做,它很难控制。我想跟踪到目前为止翻译的内容,或者让某些用户只能翻译某些标签 我一直在寻找一些替代方法来解决这个问题,方法是将文本文件替换为可以存储一些额外元数据的XML文件,或者将所有文本存储在数据库中,然后在那里检索它。 /> 我的问题是,什么是使这个系统既可维护又能在高用户流量下表现良好的最佳方法?是否有任何(轻量级)插件我可以看一下?

5 个答案:

答案 0 :(得分:3)

也许看看gettext lib可以帮助你得到一些提示http://php.net/manual/en/book.gettext.php希望它有所帮助!

答案 1 :(得分:3)

你可以试一下gettext。它是在大多数C / C ++ linux应用程序中完成的方式,它也是PHP的扩展。这个想法与你正在做的事情并没有太大的不同,但是有一些工具可以减轻翻译的忠诚度(即poedit)。

对于翻译的用户权限,gettext将没有多大帮助,我认为如果他们有更智能的解决方案,你需要自己动手或者查看一些框架。

答案 2 :(得分:1)

您需要在数据库中有一个表,可用于存储文本字符串,每个表都有一个复合ID。复合ID将由语言ID和文本节点ID组成。

您需要为用户提供选择首选语言的机会。您应确保您使用的每种语言都有默认的“尚未翻译”,或者您可以使用的整个网站的默认语言。

对于您网站中的每一段文字,而不是将文字存储在页面中,您只需为其分配一个ID。

在提供页面时,查找文本节点ID和首选语言ID并加载该文本字符串或默认字符串。

答案 3 :(得分:1)

在我们的项目http://pkp.sfu.ca/ojs中,我们使用XML文件来存储翻译键值对。浏览我们的代码:http://github.com/pkp/pkp-lib/blob/master/classes/i18n/PKPLocale.inc.php

我们使用该类来读取每个语言环境的XML文件,在我们的代码中,我们使用Locale :: translate('locale.key.name');.与gettext类似,但使用XML文件更容易更新。

答案 4 :(得分:0)

今天看看网络内容我遇到了这个网站:http://translateth.is/

使用起来很简单...在一些javascript中复制粘贴。

相关问题