Gettext не переводит

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