Страница 1 из 1

Работа с gettext

Добавлено: 07 сен 2017, 10:56
Iworb
Сколько ни пытался никак не получается уговорить работать gettext. В качестве примера сделал обычный index файл с вот таким содержанием:
<?php
define('ROOT', realpath(dirname(__FILE__)));
$locale = "ru-RU";
$dir = ROOT . DIRECTORY_SEPARATOR . "locale";
putenv("LC_ALL=" . $locale);
putenv("LANG=" . $locale);
putenv("LANGUAGE=" . $locale);
setlocale(LC_ALL, $locale);
bindtextdomain("application", $dir);
bind_textdomain_codeset("appllication", "UTF-8");
textdomain("application");
var_dump($locale, $dir, gettext("Hello"));
Результат:
string 'ru-RU' (length=5)
string 'D:\OpenServer\domains\sp.loc\locale' (length=28)
string 'Hello' (length=5)
В папке locale такая структура:
locale:
  ru
    LC_ALL
      application.po
      application.mo
  ru-RU
    LC_ALL
      application.po
      application.mo
  ru_RU
    LC_ALL
      application.po
      application.mo
  Russian_Russia
    LC_ALL
      application.po
      application.mo
Собственно, в файле application.po единственный перевод строки "Hello".
Получалось ли у кого заставить работать нормально gettext?
P.S. Для Windows подходят локали "ru-RU" и "Russian_Russia", но не "ru" или "ru_RU".
P.P.S. Во вложении собственно сам мини-проект.

Re: Работа с gettext

Добавлено: 07 сен 2017, 22:13
Максим
Во первых используйте ru_RU, во вторых переименуйте подпапку LC_ALL в LC_MESSAGES и в третьих перезапустите сервер т.к. апач всё кэширует. И будет радость.

Re: Работа с gettext

Добавлено: 08 сен 2017, 09:20
Iworb
Как я писал выше, при попытке установить локаль ru_RU функция setlocale возвращает мне false. На основном приложении я передаю оба параметра (setlocale(LC_ALL, "ru_RU", "ru-RU")). Кеширование на Apache я отключал, а вот переименование папки в LC_MESSAGES очень даже помогло, при этом я оставил только папку "ru".