Я создал файл языка в poedit для использования функции gettext PHP, теперь на странице, на которой я пытаюсь ее протестировать, я не могу заставить его найти / загрузить файл .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
функции bindtextdomain
первый параметр – это имя языкового файла .po за вычетом расширения. Второй параметр – это путь к папке, вот где становится немного сложным / недокументированным … В папке, которую вы установили здесь, вам нужно создать папку для каждого языка с двухзначным кодом страны, а затем внутри этого кода страны мне пришлось добавить эту папку с именем LC_MESSAGES
, внутри LC_MESSAGES
– файл вашего default.po
.
Это был единственный способ заставить его работать, что-то путать, так как путь к папке lang не упоминает ничего о смелой части здесь:
langfolder / fr_FR / LC_MESSAGES /default.po
Это по-прежнему действительно странно, но default.po
работает для меня, но если я изменил его на что-то еще в приведенном выше коде, а затем изменил имя файла .po и .mo, чтобы он соответствовал, он больше не будет работать, работает только с default
имя для меня, я начинаю думать, может быть, gettext делает какое-то за кулисами кэширование
Я подозреваю, что это твой путь.
Является ли «/ includes / locale» правильным каталогом на вашем хосте? Или это относительно чего-то? Примечание: вам нужно полное имя пути, а не относительно вашего домашнего каталога или каталога установки. так что может быть что-то вроде:
Каков полный каталог, где он найден?