Как загрузить язык с 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 / включить / локаль
- / Главная / имя пользователя / включить / локаль
- так далее
Какой полный каталог, где он найден?