Не удается получить gettext (php) на Ubuntu, работающем

Следующий пример работает в Mac OS X с Apache, т. Е. Я возвращаю обратно переведенную строку. Но на Ubuntu с lighttpd я получаю исходный текст «Неактивная учетная запись». Я пробовал всевозможные комбинации переменных varialbes без везения. Это не разрешения для файлов, потому что я могу выделить содержимое файла .mo.

<?php //$locale = 'sv_SE.UTF-8'; $locale = 'sv_SE'; $dir = dirname(__FILE__); // File permission is apparantly not a problem as this works... //echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo'); putenv("LANG=$locale"); putenv("LANGUAGE=$locale"); putenv("LC_ALL=$locale"); putenv("LC_MESSAGES=$locale"); setlocale(LC_ALL, $locale); setlocale(LC_MESSAGES, $locale); //setlocale(LANG, $locale); //setlocale(LANGUAGE, $locale); bindtextdomain('flattr', $dir); //bind_textdomain_codeset("flattr", 'UTF-8'); textdomain('flattr'); echo _("Inactive account"); ?> 

У кого-нибудь есть идеи?

Я столкнулся с той же проблемой. Я опишу, что я сделал, чтобы исправить это на Ubuntu 10.10.

1) убедитесь, что у вас установлен «gettext»,

 sudo apt-get install gettext 

Кроме того, вы можете установить «php-gettext», если «gettext» не может быть установлен. Пакет «php-gettext» не требуется, если у вас уже установлен «gettext».

2) Затем создайте языковой стандарт для своего языка. В этом примере я буду использовать 'sv_SE'. Посмотрите поддерживаемые локали в '/ usr / share / i18n / SUPPORTED',

 less /usr/share/i18n/SUPPORTED 

Вы найдете несколько строк, начинающихся с «sv_SE»,

 sv_SE.UTF-8 UTF-8 sv_SE ISO-8859-1 sv_SE.ISO-8859-15 ISO-8859-15 

Это означает, что у вас есть несколько вариантов генерации языка для sv_SE. Один из параметров не имеет периода (.) В его имени (т.е. sv_SE ISO-8859-1 ); это набор символов по умолчанию для этой локали. Чтобы сгенерировать языковой стандарт для набора символов по умолчанию, выполните следующую команду,

 sudo locale-gen sv_SE 

Если вы хотите сгенерировать эту локаль для набора символов UTF-8, запустите эту команду,

 sudo locale-gen sv_SE.UTF-8 

Перезапустите Apache после генерации локалей (иначе он не найдет вновь созданные локали),

 sudo service apache2 restart 

3) Наконец, обновите свой PHP-скрипт в соответствии с созданным вами языком. Если вы создали локаль для 'sv_SE',

setlocale (LC_ALL, "sv_SE");

Но если вы создали эквивалент UTF-8 этого языка, используйте,

setlocale (LC_ALL, "sv_SE.UTF-8");

Теперь все должно работать.

Хотя я выполнил шаги, изложенные в принятом ответе, я не мог заставить его работать над Ubuntu 14.04 LTS. Мне пришлось сделать две важные вещи:

(1) Прежде чем генерировать файл messages.mo, я должен был указать в message.po явно UTF-8 для charset:

 msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-12-19 16:28+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" <---------change here "Content-Transfer-Encoding: 8bit\n" 

(2) Я должен был поддерживать то же имя папки, что и локаль. Например, я установил Kannada, запустив sudo locale-gen kn_IN . Это kn_IN.UTF-8 . Обратите внимание на заглавные буквы и дефис в UTF-8. Я использовал это имя при установке языкового стандарта в моем php-скрипте и для имени папки, где я помещал файл messages.mo:

PHP-скрипт:

 // I18N support information $locale = "kn_IN.UTF-8"; <----------change here putenv("LANG=".$locale); putenv("LC_ALL=".$locale); setlocale(LC_ALL, $locale); $domain = 'messages'; bindtextdomain($domain, "./Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); 

Имя папки:

 project_folder /Locale /kn_IN.UTF-8 <------change here /LC_MESSAGES /messages.mo 

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

Справочный документ, который указал мне в правильном направлении: https://sendy.co/forum/discussion/935/translation-not-being-picked-up-on-ubuntu/p1