【问题标题】:How to build PHP application with multiple language support (English, French, Chinese etc..)如何构建支持多种语言(英语、法语、中文等)的 PHP 应用程序
【发布时间】:2009-03-27 19:40:03
【问题描述】:

我正在构建一个使用 LAMP 和 Smarty 模板框架的 Web 应用程序。该网站将有大量静态内容(关于我们的页面、错误警报、确认电子邮件等......)。

Web 应用程序必须支持多种语言。以下方法合适吗?

1) Smarty 模板页面(html 页面)上的所有静态副本都将替换为对 smarty 插件的调用,例如 {lang file='about.xml' getTerm='title'} ,它返回一个字符串作为标题标签合适的语言

2) about.xml 文件是网络服务器上的一个 xml 文档,充当多语言词典。所以它会有xml节点比如

<term value="title">
   <en>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; is a great site</en>
   <fr>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; c'est website magnifique</fr>
   <ch>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; complex looking chinese characters I don't udnerstand</ch>
</term>
<term value="signupmessage">
   <en>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; great deals!</en>
   <fr>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; magnifique deals!</fr>
   <ch>&lt;a href=&quot;http://stackoverflow.com&quot;&rt;Stackoverflow&lt;/a&rt; complex looking chinese characters I don't udnerstand</ch>
</term>

3) 网站的 url 结构将是 http://mywebsite.com/language/index.php。为此,我的网络服务器将具有符号链接,例如 ln -s ./en ./ 以便 http://mywebsite.com/en/index.php 指向与 http://mywebsite.com/fr/index.php 相同的 php 页面,但我会检查 url 的语言设置。我希望谷歌能索引网站的两个版本。

这是一个好方法吗? xml 是存储不同语言内容的最佳格式,即使它具有 htmlentity 编码的 html 标签?我忽略了什么吗?

【问题讨论】:

    标签: php smarty multilingual


    【解决方案1】:

    不确定您的问题的详细信息,但您可能想看看Zend_Translate

    【讨论】:

    • Zend_Translate +1。在我看来,这是该类型的最先进技术。
    【解决方案2】:

    XML 是一种容器格式,使用它并不算太糟糕。除了 HTML 实体外,它具有相对人类可读的优点。您可以尝试为此使用 CDATA 部分。为此使用 XML 的一个优点是您可以使用 DTD 来验证所有语言的所有键都存在翻译。确保使用 UTF-8 或 UTF-16 对文件进行编码,如果将编码放在文件顶部可能会有所帮助。我推荐 UTF-8。

    至于如何加载 XML 数据并将其合并到页面中,我不知道“聪明”,但总体方法听起来很合理。我能看到的唯一缺点是您必须同时发布所有翻译(很难避免这个问题)。

    我注意到的一件事是您使用 ch 作为中文的语言代码。 You should use zh。那是它的ISO代码。 ch 是something else.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多