За последние несколько дней я боролся с php, gettext и получал мой, скоро будущий, новый сайт, переведенный с датского на английский.
У меня есть мои каталоги с моими файлами .po и .mo, настроенными следующим образом:
/locale/en_US/LC_MESSAGES/ Согласно этому руководству: Локализация веб-сайтов PHP с использованием gettext я добавил следующее:
 $locale = "en_US"; if (isSet($_GET["locale"])) $locale = $_GET["locale"]; putenv("LC_ALL=$locale"); setlocale(LC_ALL, $locale); bindtextdomain("messages", "./locale"); textdomain("messages"); 
Я добавил, что на моей странице добавлено пять:
 echo _('Overskrift 1') 
Но когда я просматриваю страницу на своем сервере, окно Debian с поддержкой PHP 5.4 и gettext поддерживается, ничего не переводится.
Я понятия не имею, что я делаю неправильно. Я уверен, что это что-то маленькое, но я просто не вижу его. Может, у вас есть какие-то указатели?
Мой файл .po:
 msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Portfolio\n" "Language: en\n" #: msgid "Overskrift 1" msgstr "Headline 1" #: msgid "Overskrift 2" msgstr "Headline 2" #: msgid "Overskrift 3" msgstr "Headline 3" #: msgid "Overskrift 4" msgstr "Headline 4" #: msgid "Overskrift 5" msgstr "Headline 5" 
          Наиболее типичная проблема заключается в том, что в вашей системе нет установленного вами языкового стандарта.  gettext глубоко интегрирован в локальную систему системы.  Локаль, которую вы установили с помощью setlocale самом деле должна быть установлена и / или сглажена имени, которое вы ему даете.  В большинстве систем, например, нет локали ja_JP , но локали ja_JP.UTF8 и / или ja_JP.eucJP .  Вы должны установить setlocale(LC_ALL, 'ja_JP.UTF8') в этом случае, просто ja или ja_JP не будет делать. 
  Чтобы проверить, какие локали установлены, запустите locale -a в командной строке.  Если локаль, которую вы ищете, не существует, вам нужно ее установить.  В Ubuntu и подобных системах это так же просто, как и запуск sudo locale-gen ja_JP.UTF8 . 
Альтернативное решение
  Некоторые редкие локали могут быть нелегко найти, и, следовательно, вы не сможете установить то, что хотите.  В этом случае вы можете найти ближайший локаль.  Например, если нет ku_IQ но ku_TR присутствует на сервере, на котором размещено ваше приложение, вы можете использовать последнее вместо этого.  Убедитесь, что вы переименовали свой каталог в локаль, на котором вы его устанавливаете.  Ваши тексты будут по-прежнему переведены нормально, но ваши региональные форматы, такие как дата, время и номера, будут отображаться неправильно.  Вам придется жить с этим.