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