Языковой стандарт "" (пустая строка) обозначает системный языковой стандарт.Все известные реализации * * x метода setlocale () используют переменные окружения для установки локали.Вы устанавливаете переменную среды после вызова метода setlocale (), и поэтому она игнорируется.
Locale :: TextDomain здесь не терпит неудачу.Это ошибка конфигурации.
Существует несколько подходов к решению таких проблем.Если вы знаете язык, который хотите использовать, вы можете разрешить libintl-perl выполнять тяжелые действия:
use Locale::Util qw(set_locale);
set_locale(LC_MESSAGES, 'pt', 'BR', 'utf-8');
В вызове set_locale () будут использованы все известные соглашения для идентификаторов языковых стандартов для установки языка на португальский.'pt' для Бразилии ('BR').Он также попытается выбрать локаль UTF-8.См. http://search.cpan.org/dist/libintl-perl/lib/Locale/Util.pm#FUNCTIONS для получения дополнительной информации!Имя set_locale () было намеренно выбрано, чтобы избежать конфликта имен с setlocale () из POSIX.pm.
Начиная с libintl-perl 1.22, вы также можете переключиться на "тупой" бэкэнд gettext:
use Locale::Messages qw(select_package);
BEGIN { Locale::Messages->select_package('gettext_dumb') }
«Тупой» сервер никогда не беспокоится о вызове setlocale (), чтобы найти текущие настройки локали, а только проверяет переменные среды.Пожалуйста, смотрите http://search.cpan.org/dist/libintl-perl/lib/Locale/gettext_dumb.pm за и против этого подхода.Самый большой недостаток в том, что код C не учитывает это, так что $!Например, не будет использовать настроенный язык.
В качестве альтернативы вы можете переключиться на бэкэнд 'gettext_pp', как описано выше для 'gettext_dumb'.Это приведет к использованию чистой реализации Perl среды выполнения gettext.Основным преимуществом этого является то, что его легче отлаживать.Но есть и небольшие отличия от реализации на Си.
Примечание: вы должны иметь в виду, что переменная среды LANGUAGE является расширением GNU и может не работать в среде без GNU.