Я наконец-то заставил его работать, я публикую здесь, так что, возможно, это может помочь кому-то еще, это несколько запутывает способ, которым это задокументировано, я думаю.
Я буду использовать 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 делает что-то вроде кеширования