Как загрузить язык с gettext в PHP?

Я создал языковой файл в 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 ответа

Решение

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

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

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

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

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

langfolder /fr_FR / LC_MESSAGES/default.po

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

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

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

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

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

Другие вопросы по тегам