只需向正确的方向推动即可。
我正在用PHP和JavaScript构建一个多语言的网站。当使用javascript(AJAX)将注释/消息发送到数据库时,我需要向用户显示成功或错误消息。由于使用3种不同的语言,因此我在使用代码的每一页上编写代码,并使用PHP语言变量来翻译成功/错误消息。
一切正常,但是当用户查看页面源代码时,他会在网站上看到一长串我用于其他用途的功能。
我想将所有内容都包含在JS文件中:
但是,PHP语言变量将无法工作。
我现在唯一想到的就是用不同的语言制作不同的JS文件:
myjs_en.js
myjs_fr.js
myjs_nl.js
并检查用户选择的语言,包括3个文件之一。
还是我可以使用其他选项?
谢谢您的帮助!
最佳答案
您最好从服务器端提供语言支持。如果愿意,Zend_Framework的Zend_Translate组件可以用作独立库。
根据文档:
“在多语言应用程序中,必须将内容翻译成几种语言并根据用户的语言显示内容。PHP已经提供了几种解决此类问题的方法,但是PHP解决方案存在一些问题:
API不一致:对于不同的源格式,没有单一的API。例如,gettext的用法非常复杂。
PHP仅支持gettext和本机数组:PHP本身仅提供对array或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能够检测和集成多个源文件,并根据目录或文件名另外检测要使用的语言环境。”