2013-12-09 2 views
0

За последние несколько дней я боролся с php, gettext и получил мой, скоро будущий, новый сайт, переведенный с датского на английский.Gettext не переводится

У меня есть каталоги с моим .po и .mo файлов, созданные следующим образом:

/locale/en_US/LC_MESSAGES/ 

В соответствии с этим обучающей программой: Localizing PHP web sites using 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" 
+0

Пробовал использовать двойные кавычки в эхо, согласно вашему учебнику? – Jeppe

+0

К сожалению, это ничего не изменило. –

+0

Какой результат вы получаете для 'var_dump (setlocale (LC_ALL, 'en_US'));'? – bitWorking

ответ

7

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

+0

Ну как насчет этого. У меня мог бы быть SWORN, что я сделал это вчера и нашел нужные мне. Сделал это снова сегодня - en_US.UTF-8 исправил его. Я озадачен, но благодарен за напоминание. –

+2

Происходит к лучшему, тем более, что эта зависимость не очень очевидна, и gettext действительно стесняется жаловаться на то, что не так. ;) – deceze

+0

вы также можете добавить несуществующий язык в своей системе: https://askubuntu.com/questions/76013/how-do-idad-locale-to-ubuntu-server –

Смежные вопросы