2013-06-18 2 views
2

Мы используем gettext для перевода в нашем приложении PHP. Он инициализируется следующим образом:Настройка локали gettext независимо от локали системы

<?php 
setlocale(LC_MESSAGES, $locale); 
putenv("LANG=$locale"); 
putenv("LANGUAGE=$locale"); 

bindtextdomain($domain, $pathToLocales); 
textdomain($domain); 

Это прекрасно работает, но также переводит сообщения об ошибках из ОС. Например, вместо отказа DNS-разрешения вместо Name or service not known мы видим Der Name oder der Dienst ist nicht bekannt в наших журналах ошибок для немецкого сайта.

У меня есть gisted a test case. Сценарий преобразует строку, а затем вызывает ошибку No such file or directory. Я не хочу, чтобы эта ошибка была переведена.

Есть ли способ настроить языковой стандарт gettext без изменения сообщений об ошибках из операционной системы? Мы не хотим менять gettext на другой механизм перевода (массивы, xliff, вы называете это). Мы не заботимся о Windows и mod_php, но решение должно работать для php-fpm 5.4 и cli.

ответ

-1

Вы используете LC_MESSAGES, что означает «для системных ответов (доступно, если PHP был скомпилирован с помощью libintl)» Я попытался бы игнорировать этот параметр, например setlocale(LC_ALL^LC_MESSAGES, $locale).

http://www.php.net/manual/en/function.setlocale.php

+0

LC_MESSAGES требуется для Gettext. Если вы удалите это из битовой маски, перевод не будет работать. То, что я хочу, это разные LC_MESSAGES для gettext и PHP-процесса, и если это невозможно, я надеюсь на решение сбросить LC_MESSAGES системы после bindtextdomain() & co. Без сброса gettext к системному умолчанию. – Peter

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