代码之家  ›  专栏  ›  技术社区  ›  Jasper De Bruijn

建立一个多语种网站最有效的方法是什么?

  •  1
  • Jasper De Bruijn  · 技术社区  · 14 年前

    我正在开发一个可以用不同语言访问的网站。它是一个lamp(linux、apache、mysql、php)安装程序,它主要使用smarty作为模板引擎。
    我们目前的翻译方式是通过一个自编的Smarty插件,它可以识别HTML文件中的某些标记,并在先前定义的语言文件中找到相应的标记。

    HTML可以如下所示:

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

    语言文件可能如下所示:

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

    然后输出

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


    这个系统是非常基本的,但是很难控制,如果I.F.E.想要跟踪到目前为止翻译的内容,或者只给某些用户翻译某些标签的权限。
    我一直在寻找一些替代的方法来解决这个问题,或者用xml文件替换文本文件来存储一些额外的元数据,或者将所有的文本存储在数据库中并在那里检索。
    我的问题是,在用户流量大的情况下,怎样才能使这个系统既可维护又性能良好?有没有什么(轻量级)插件可以让我看看?

    5 回复  |  直到 14 年前
        1
  •  3
  •   Kjir    14 年前

    你可以试试看 gettext . 它是在大多数C/C++ Linux应用程序中实现的方式,也是PHP的扩展。这个想法和你已经做的没有太大的不同,但是有一些工具可以简化翻译的维护。 poedit )

    对于翻译的用户权限,gettext不会有太大帮助,我认为您需要自己完成它,或者查看一些框架(如果它们有更聪明的解决方案)。

        2
  •  3
  •   markcial    14 年前

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

        3
  •  1
  •   thecoshman    14 年前

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

    您需要给用户一个选择首选语言的机会。你应该确保你使用的每种语言都有一个默认的“this has not been translated”,或者你的整个网站都可以使用的默认语言。

    对于网站中的每一位文本,而不是将其存储在页面中,只需为其分配一个id。

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

        4
  •  1
  •   pocketfullofcheese    14 年前

    在我们的项目中, 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文件更容易更新。

        5
  •  0
  •   PaulELI    14 年前

    今天我浏览了一下网站: http://translateth.is/

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