Попытка использовать gettext без кода страны («es» вместо «es_ES»)

У меня есть следующие файлы в моем проекте php:

libraries/locale/es_ES/LC_MESSAGES/messages.po
libraries/locale/es_ES/LC_MESSAGES/messages.mo
libraries/locale/es/LC_MESSAGES/messages.po
libraries/locale/es/LC_MESSAGES/messages.mo

Оба являются одним и тем же файлом, отредактированным с помощью PoEdit, только отличаются Каталог-> Свойства-> Язык (соответственно es и es_ES)

И этот код в файл localization.php

$language = "es_ES.UTF-8";
putenv("LANG=$language");
setlocale(LC_ALL, $language);
bindtextdomain(STRING_DOMAIN, LOCALE_PATH);
textdomain(STRING_DOMAIN);

echo "Test translation: "._('string to translate');

Этот код работает нормально, и «строка для перевода» отображается правильно. Однако, если я попытаюсь использовать общий код «es»:

$language = "es.UTF-8";

...Строка не переведена. Кажется, это связано с локалями, установленными в моей Ubuntu (es_ES.utf8 существует, но не es.utf8)

Могу ли я заставить gettext использовать файл es.UTF-8?


person Gonzalo Cao    schedule 17.10.2013    source источник


Ответы (1)


В качестве обходного пути вы всегда можете использовать localedef для компиляции новой локали на основе существующей. Чтобы создать es на основе es_ES.UTF-8:

 localedef -i es_ES -f UTF-8 es.UTF8

Но здесь возникают некоторые важные вопросы, которые охватывают области, выходящие за рамки простой загрузки файлов перевода. Поскольку информация о вашей локали, такая как форматы даты и времени, измерения и т. д., зависит от установленных локалей, всегда полезно иметь план использования локалей. Предполагая, что вы используете es_ES для испанского (Испания), что такое es? Предназначен ли он для определенного вкуса испанского языка, такого как es_IC (Канарские острова), или для какого-то латиноамериканского вкуса?

Вот поясняющий пример; если я хочу разработать индивидуальный репертуар локалей, чтобы охватить различные вкусы испанского языка, я сделаю это следующим образом; сначала я добавляю те локали, которые легко установить с помощью locale-gen:

  locale-gen es_ES.UTF-8 es_MX.UTF-8 es_AR.UTF-8

Затем я хотел бы иметь es_US на основе es_MX и es_419 (419 — код географической зоны для Латинской Америки) на основе es_AR:

  localedef -i es_MX -f UTF-8 es_US.UTF-8
  localedef -i es_AR -f UTF-8 es_419.UTF-8
person Shervin    schedule 20.10.2013