Вопрос

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

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

Это было полезно?

Решение

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

Для этой демонстрации я буду использовать 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 здесь ничего не упоминает о выделенной жирным шрифтом части:

языковая папка/fr_FR/LC_MESSAGES fr_FR/LC_СООБЩЕНИЯ/по умолчанию.po

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

Другие советы

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

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

  • C:/xampp/htdocs/include/locale
  • /var/www/включить/локаль
  • /главная страница/имя пользователя/включить/язык
  • и т.д.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top