0

只需要在正确的方向上推动这一点。

我正在用 PHP 和 JavaScript 构建一个多语言网站。当使用 javascript (AJAX) 向数据库发送评论/消息时,我需要向用户显示成功或错误消息。由于使用 3 种不同的语言,我在每个使用代码的页面上编写代码,并使用 PHP 语言变量来翻译成功/错误消息。

一切正常,但是当用户查看页面的源代码时,他会看到一长串我在网站上用于不同事物的功能。

我想将所有内容都包含在 JS 文件中:

但随后 PHP 语言变量将不起作用。

我现在唯一想到的就是用不同的语言制作不同的 JS 文件:myjs_en.js

myjs_fr.js

myjs_nl.js

并检查用户选择了哪种语言,包括 3 个文件之一。

或者我可以使用其他选项吗?

谢谢您的帮助!

4

1 回答 1

3

您可能最好从服务器端提供语言支持。如果您愿意,Zend_Framework 的Zend_Translate组件可以用作一个独立的库。

根据文档:

“在多语言应用程序中,必须将内容翻译成多种语言并根据用户的语言显示内容。PHP 已经提供了几种处理此类问题的方法,但是 PHP 解决方案存在一些问题:

  • 不一致的 API:不同的源格式没有单一的 API。例如 gettext 的使用是非常复杂的。

  • PHP 仅支持 gettext 和原生数组:PHP 本身仅支持数组或 gettext。所有其他源格式都必须手动编码,因为没有原生支持。

  • 未检测到默认语言:如果不深入了解不同 Web 浏览器的背景,则无法检测到用户的默认语言。

    Gettext 不是线程安全的:PHP 的 gettext 库不是线程安全的,不应该在多线程环境中使用。这是由于 gettext 本身的问题,而不是 PHP,但这是一个存在的问题。

Zend_Translate 不存在上述问题。这就是为什么我们推荐使用 Zend_Translate 而不是 PHP 的原生函数的原因。Zend_Translate 的好处是:

  • 支持多种源格式:Zend_Translate 支持多种源格式,包括 PHP 支持的源格式,以及包括 TMX 和 CSV 文件在内的其他格式。

  • 线程安全的gettext:Zend_Translate 的gettext 阅读器是线程安全的。在多线程环境中使用它没有问题。

  • 简单通用的 API:Zend_Translate 的 API 非常简单,只需要几个函数。因此,它易于学习和维护。所有源格式的处理方式都相同,因此如果您的源文件格式从 Gettext 更改为 TMX,您只需更改一行代码即可指定存储适配器。

  • 检测用户的标准语言:Zend_Translate 可以检测和使用用户访问网站的首选语言。

  • 自动源检测:Zend_Translate 能够检测和集成多个源文件,并根据目录或文件名额外检测要使用的语言环境。”

于 2012-06-17T19:30:45.257 回答