PHP:gettext 需要 LC_MESSAGES 目录吗?
为了翻译我的 PHP 应用程序,我使用在 gettext 模块中编译的方法。这是根据文档制作的翻译目录树:
locale/
cs_CZ/
LC_MESSAGES/
messages.po
messages.mo
de_DE/
LC_MESSAGES/
messages.po
messages.mo
fr_FR/
LC_MESSAGES/
messages.po
messages.mo
问题:是否可以删除 LC_MESSAGES 目录?如果我使用这个结构,PHP 能够找到翻译吗?
locale/
cs_CZ/
messages.po
messages.mo
de_DE/
messages.po
messages.mo
fr_FR/
messages.po
messages.mo
我的切换翻译的 PHP:
<?php
setlocale(LC_ALL, 'fr_FR.UTF-8');
bindtextdomain("messages", "locale");
bind_textdomain_codeset("messages", 'UTF-8');
textdomain("messages");
?>
提前谢谢您。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
唯一可行的解决方法是创建符号链接
LC_MESSAGES -> .
在每种语言子目录中。 (但这使 PHP 应用程序安装变得复杂。FTP 很少可以创建符号链接。)The only feasible workaround is creating a symlink
LC_MESSAGES -> .
in each language subdirectory. (But this complicates PHP application installation. FTP seldomly can create symlinks.)恐怕
LC_MESSAGES
是一个要求。如果我错了,请纠正我,但我认为这与 gettext 缓存有关。
I'm afraid
LC_MESSAGES
is a requirement.Correct me if I'm wrong, but I think it has something to do with the gettext cache.
如果你真的想这样做,你可以使用这个作曲家包: gettext/gettext
所以你可以根据您的需要进行文件夹组织,甚至是类似的内容:
If you really want to do that, you can use this composer package : gettext/gettext
So you can have the folder organization as you desire or even something like that :
回答标题中的问题:确实需要。
为什么?
据我目前的理解,
LC_MESSAGES
是 许多本地化类别可以与 gettext 一起使用。例如,您可以使用 dcgettext() 更改为另一个类别。然而,这有点令人困惑,因为 gettext 应该主要用于文本翻译,并且用它来本地化日期、金钱、数字或字符集可能会很奇怪。
Answering the question in the title: it does require.
Why?
To my current understanding,
LC_MESSAGES
is one of the many localization categories you could use with gettext. You can change to another category usingdcgettext()
, for instance.However, that's a bit confusing since gettext is supposed to be mainly used for text translation, and it might be weird to use it to localize dates, money, numbers or charsets.