什么是在PHP中构建“多语言”脚本的最佳方法?

时间:2009-01-19 13:31:54

标签: php sql xml multilingual

我正在建立一个网站,它需要7种语言? 我想知道是否有一个好的做法可以应用于获取多语言的PHP脚本?

  • 对我而言
  • 译者很容易

您还认为,我应该将其存储在DB,XML还是PHP文件中?

7 个答案:

答案 0 :(得分:11)

有很多存储翻译的选项:

  • TMX:一种相对较新的XML格式的翻译。似乎越来越受欢迎。
  • Gettext是另一种翻译的开放格式。长期以来一直是事实上的标准。
  • ini文件 - 易于编辑,格式非常简单
  • PHP文件(数组) - 易于编辑的PHP程序员,性能良好
  • CSV格式 - 使用起来相对简单。

我建议您使用支持多个适配器的Zend_Translate之类的内容,并提供在应用程序中嵌入翻译的基本方法。

答案 1 :(得分:6)

与daddz相反,我建议不要在PHP中使用gettext:

  • 区域设置是按进程进行的。这意味着当您使用多线程apache或任何其他运行PHP进程的多线程Web服务器时,在一个线程中调用setlocale将影响其他线程。

    因为您无法知道哪个线程/进程正在处理哪个请求,所以用户间歇性地获取错误的区域设置会遇到严重的问题。

  • 您在PHP中设置的区域设置会影响printf甚至strtotime等功能。如果你使用gettext / setlocale
  • ,你肯定会得到你的后端代码中的“奇怪”数字格式。

使用Eran排列的任何其他解决方案或快速自己做一些事情(PHP数组非常好用)。还可以使用intl-extension,它将在核心PHP 5.3中进行数字和日期格式化和整理。

在基于网络的解决方案上反复使用gettext被证明与打开众所周知的蠕虫非常相似。

答案 2 :(得分:4)

我建议Gettext

它是跨平台的,开放源代码,广泛使用并可用于php:PHP Gettext

答案 3 :(得分:1)

我对gettext没有经验,所以没有对该主题发表评论,但我使用以下方法构建了一些多语言网站:

方法1

我不会说我的格式是最好的,只是它有效。我也用过数组。取决于内容的存储位置。

例如,我将有一个关联的文本数组,其中的索引标识了哪个文本:

$text['english']['welcome'] = "Welcome to my site. blah blah blah";
$text['english']['login'] = "Please enter your username and password to login";

也许可以使用常量或配置变量设置语言。

方法2

我已经构建了两个具有相同结构和后端的网站,但每个网站使用不同的数据库,并分别维护:data_frenchdata_english

答案 4 :(得分:1)

我已经建立了多语言CMS。所有内容都存储在数据库中,主表用于公共(不是特定于语言的值),而单独的表用于特定于语言的内容。

例如,让我们想象一下存储产品 - 我们有一个'产品'表(包含unique_id,创建日期,图片网址等)和'product_local'表(包含任何语言特定字段)。

使用此方法可以很容易地维护内容。

答案 5 :(得分:0)

您可能会发现这篇文章的主题是一篇有趣的内容:

http://cubicspot.blogspot.com/2011/12/cross-platform-multilingual-support-in.html

作者提倡一个懒惰的程序员"策略 - 只有当您需要多语言的东西时才这样做 - 并且似乎推荐使用IANA语言代码的PHP数组方法。这篇文章有点含糊不清。

答案 6 :(得分:0)

查看此论坛。如果你有人帮你翻译,我想你可能需要一个不同的方法。

Most efficient approach for multilingual PHP website