Как загрузить язык с gettext в PHP? - PullRequest
5 голосов
/ 20 сентября 2009

Я создал языковой файл в poedit для использования функции PHP gettext, теперь на странице, на которой я пытаюсь его протестировать, я не могу найти / загрузить созданный мной файл .po или .mo, кто-нибудь видит, что я делаю не так?

$locale = "en_US";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

//my .po ad .mo file is located here /includes/locale/en/default.mo

Несмотря на то, что я пытаюсь загрузить файл английского языка по умолчанию, я изменил некоторый текст в файле, чтобы убедиться, что он читает из языкового файла, и в настоящее время он показывает только текст по умолчанию, а не переводит, я думаю, что у меня неправильный путь, возможно

Ответы [ 2 ]

9 голосов
/ 20 сентября 2009

Я наконец-то заставил его работать, я публикую здесь, так что, возможно, это может помочь кому-то еще, это несколько запутывает способ, которым это задокументировано, я думаю.

Я буду использовать FR для французского для этой демонстрации

$locale = "fr_fr";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

В приведенной выше функции bindtextdomain первым параметром является имя языкового файла .po за вычетом расширения. Второй параметр - это путь к папке, где она становится немного хитрой / недокументированной ... В папке, которую вы здесь установите, вы должны создать папку для каждого языка с его 2-значным кодом страны, а затем внутри этого кода страны. папка Мне нужно было добавить эту папку с именем LC_MESSAGES, внутри LC_MESSAGES находится ваш файл default.po.

Это был единственный способ заставить его работать, немного запутанно, поскольку путь к папке lang ничего не говорит о жирной части здесь:

langfolder / fr_FR / LC_MESSAGES / default.po

Это все еще действительно странно, однако, default.po работает для меня, но если я изменю его на что-то другое в приведенном выше коде, а затем изменим имя файла .po и .mo, чтобы соответствовать ему, больше не будет работать, только работает с default имя для меня, я начинаю думать, может быть, gettext делает что-то вроде кеширования

2 голосов
/ 20 сентября 2009

Я подозреваю, что это твой путь.

Является ли "/ includes / locale" правильным каталогом на вашем хосте? Или это относительно чего-то? Примечание: вам нужен полный путь, не относящийся к вашему домашнему каталогу или каталогу установки. так что это может быть что-то вроде:

  • C: / XAMPP / HTDOCS / включить / локаль
  • / вар / WWW / включить / локаль
  • / главная / имя пользователя / включить / локаль
  • и т.д.

Каков полный каталог, где он найден?

...