开发者

PHP: does gettext require LC_MESSAGES dirs?

To translate my PHP app I use compiled in gettext module. Here is a directory tree of translations made according to docs:

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

Question: is it possible to get rid of LC_MESSAGES catalog? Will PHP be able to find translations if I use this structure?

locale/
  cs_CZ/
     messages.po
     messages.mo
  de_DE/
     messages.po
     messages.mo
  fr_FR/
     messages.po
     messages.mo

My PHP that switches translations:

<?php
    setlocale(LC_ALL, 'fr_FR.UTF-8');
    bindtextdomain("messages", "locale");
    bi开发者_运维百科nd_textdomain_codeset("messages", 'UTF-8');
    textdomain("messages");
?>

Thank you in advance.


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.)


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.


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 :

locales/
   cs_CZ.mo
   cs_CZ.po
   de_DE.mo
   de_DE.po
   fr_FR.mo
   fr_FR.po


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 using dcgettext(), 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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜