PHP Gettext 问题(比如非线程安全?)
我想开始使用 gettext 来处理 Web 项目 (PHP 5) 的翻译。由于它是一个广泛使用的标准并享有良好的声誉,因此它似乎是最好的选择。
但是,我也听说服务器不兼容并且它是非线程安全的。这对于我使用它的项目意味着什么?由于我构建了很多人使用的东西,因此我的代码能够正常运行非常重要。
我们谈论的是小问题(例如人们仍在使用 PHP 4)还是主要问题(例如 Web 服务器上 gettext 的分发和安装率较低)?
I want to start using gettext to handle my translations on web projects (PHP 5). Since it is a widely used standard with a good reputation it seems to be the best choice.
However, I'm also hearing things about server incompatibly and it being non-thread-safe. What does this mean for my projects that use it then? Since I build things that many people use, it's very important that my code works.
Are we talking about minor problems (like people still using PHP 4) or major problems like distribution and installation of gettext on websevers being low?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
线程问题仅适用于使用嵌入式 PHP(例如 Apache 的 mod-php)并运行使用线程的服务器(例如带有worker-mpm 的 Apache 服务器)的情况。
因此,线程安全问题不适用于您,如果:
因此,大多数使用默认 Apache 安装的人不应该担心 gettext 不是线程安全的,因为大多数发行版中的默认 apache 安装都使用非线程 prefork-MPM!
另外,请记住 Windows 上的 Apache 是线程化的。
Threads problem only apply if one uses embedded PHP (Apache's mod-php for example) and runs server that uses threads (like Apache server with worker-mpm).
So - thread safety issue does not apply to you if:
So - most people with default Apache install shouldn't worry about gettext not being thread safe, as default apache's install in most distro's uses non-threaded prefork-MPM!
P.S. also - keep in mind that Apache on Windows is threaded.
我认为多玩一些 php 手册注释部分应该会谩骂更多信息.... gettext 部分手册中的注释之一
http://www.php.net/manual/en/gettext.setup。 php
I think play some more with the php manual comments portion should revile more information....one of the comments from the manual on gettext section
http://www.php.net/manual/en/gettext.setup.php
我在 Windows 10 上使用 PHP 5.6.30 VC11 Theard Safe 时遇到了同样的问题。找到了解决方法并修复了此问题 此处,作者:sirio3mil。
显然带有 TS 的 PHP 只能访问 Locale 语言文件夹。因此,当使用系统语言以外的其他语言调用 setlocale 和 putenv 函数时,无法读取带有 .mo 和 .po 的文件夹。
解决方法是仅使用一个包含系统语言的语言文件夹以及每种翻译语言的多对 .mo/.po 文件。域将设置为所需的语言。
瑞士法语、德语和意大利语示例:
文件夹结构
代码
I had same problem with PHP 5.6.30 VC11 Theard Safe on Windows 10. Workaround found and fix this issue here by sirio3mil.
Apparently PHP with TS can access only Locale language folder. So when setlocale and putenv function is call with another language than system's one, folder with .mo and .po cannot be read.
Workaround is to have only one language folder with system language and multiple pairs of .mo/.po files for each translated languages. Domain will be set with wanted language.
Example with Swiss French, German and Italian:
Folder structure
Code