gettext использует идентификатор вместо английского, если перевод не определен

У меня проблема с gettext: если пользователь посещает мой веб-сайт на испанском языке, а перевод для этого языка недоступен, вместо английского перевода отображается идентификатор?

Есть ли способ этого избежать?

Вот какая интересная часть моего кода:

$lc = 'es_ES.utf8';
putenv('LC_ALL='.$lc);
setlocale(LC_ALL, $lc);


$languageFileName = 'default';
bindtextdomain($languageFileName, ROOT_PATH.'/locale');
bind_textdomain_codeset($languageFileName, 'UTF-8');
textdomain($languageFileName);

А вот и мое древообразование:

-en_US
--LC_MESSAGES
---default.mo
---default.po
-es_ES
--LC_MESSAGES
---default.mo
---default.po
-fr_FR
--LC_MESSAGES
---default.mo
---default.po

Обратите внимание, что я использую PHP 5.4 и моя система на французском языке.


person Nicolas BADIA    schedule 18.01.2013    source источник


Ответы (1)


Я бы, вероятно, проверил, доступен ли желаемый перевод, а если нет, то вместо этого установил бы определенный языковой стандарт по умолчанию (вероятно, en_US).

Альтернативный подход - использовать сообщение на языке по умолчанию (например, английский) в качестве самого идентификатора. Всякий раз, когда система отображает «идентификатор», пользователь автоматически видит английский текст.

(Добавлено 31.01.2013 :)

Чтобы установить языковой стандарт:

$locale = "en_US";

putenv("LANG=$locale");
putenv("LC_MESSAGES=$locale");
putenv("LC_NUMERIC=$locale");
putenv("LC_ALL=$locale");

$setlocale = setlocale(LC_MESSAGES, $locale);
$setlocale = setlocale(LC_TIME, $locale);
$setlocale = setlocale(LC_NUMERIC, $locale);
$setlocale = setlocale(LC_ALL, $locale);
person fbitterlich    schedule 30.01.2013
comment
Что ж, это то, что я хочу, но мой вопрос в том, как это сделать (установить определенный языковой стандарт по умолчанию)! Обратите внимание, что мой идентификатор - это сообщение на французском языке (и я не хочу его менять). - person Nicolas BADIA; 31.01.2013