Php user locale ru

setlocale

Альтернативная сигнатура (не поддерживается с именованными аргументами):

Устанавливает настройки локали.

Информация о локали модифицируется во всем процессе, а не по каждому потоку отдельно. Если вы используете PHP на многопоточном сервере, вы можете обнаружить неожиданные изменения в настройках локали во время выполнения скриптов, никогда и не вызывавших setlocale() . Это происходит из-за того, что другие скрипты, запущенные в параллельных потоках данного процесса, в то же самое время поменяли настройки локали для всего процесса с помощью setlocale() . В Windows информация о локали поддерживается для каждого потока, начиная с PHP 7.0.5.

Список параметров

  • LC_ALL — все нижеперечисленное
  • LC_COLLATE — функции сравнения строк, смотрите strcoll()
  • LC_CTYPE — функции преобразования и классификации строк, например ctype_alpha()
  • LC_MONETARY — для функции localeconv()
  • LC_NUMERIC — задаёт символ десятичного разделения (смотрите также localeconv() )
  • LC_TIME — форматирование даты/времени функцией strftime()
  • LC_MESSAGES — для системных сообщений (доступна, если PHP был скомпилирован с поддержкой libintl )

Если в качестве locales передана пустая строка «» или null , имена локалей будут взяты из одноимённых переменных окружения или переменной с именем «LANG».

Если в качестве locales передан «0» , локаль изменена не будет, а будет возвращено текущее значение.

Если в качестве locales передан массив, или после этого аргумента следуют дополнительные аргументы, функция будет использовать элементы массива или аргументы по порядку в качестве имён локали до тех пор, пока установка локали не будет успешной. Это удобно, если одна и та же локаль имеет разное имя в различных системах, или для создания запасного варианта при отсутствии какой-либо локали в системе.

Читайте также:  Транслит с русского на английский python

Необязательные аргументы в виде строк или массивов для установки настроек локали до первой успешной попытки.

Каждый элемент массива пытается установить новую локаль до первой успешной попытки. Это полезно, если локаль известна под разными именами в разных системах или для обеспечения запасного варианта для возможно недоступного языкового стандарта.

Замечание:

На Windows setlocale(LC_ALL, ») устанавливает имена локалей из системных региональных/языковых настроек (доступных через Панель Управления).

Возвращаемые значения

Возвращает имя вновь установленной локали или false , если система не поддерживает установку локали, указанная локаль не существует или передано недопустимое имя категории.

Недопустимое имя категории также вызывает предупреждение. Имена локалей и категорий описаны в » RFC 1766 и » ISO 639. Разные системы имеют различные схемы именования локалей.

Замечание:

Возвращаемое функцией setlocale() значение зависит от системы, на которой запущен PHP. Она возвращает точно то же значение, что и системная функция setlocale .

Примеры

Пример #1 Примеры использования setlocale()

/* Установка голландской локали */
setlocale ( LC_ALL , ‘nl_NL’ );

/* выводит: vrijdag 22 december 1978 */
echo strftime ( «%A %e %B %Y» , mktime ( 0 , 0 , 0 , 12 , 22 , 1978 ));

/* попытка использовать различные локали для немецкого языка */
$loc_de = setlocale ( LC_ALL , ‘de_DE@euro’ , ‘de_DE’ , ‘de’ , ‘ge’ );
echo «На этой системе немецкая локаль имеет имя ‘ $loc_de ‘» ;
?>

Пример #2 Примеры использования setlocale() в Windows

/* Установка голландской локали */
setlocale ( LC_ALL , ‘nld_nld’ );

/* выводит: vrijdag 22 december 1978 */
echo strftime ( «%A %d %B %Y» , mktime ( 0 , 0 , 0 , 12 , 22 , 1978 ));

/* попытка использовать различные локали для немецкого языка */
$loc_de = setlocale ( LC_ALL , ‘de_DE@euro’ , ‘de_DE’ , ‘deu_deu’ );
echo «Предпочитаемая немецкая локаль на этой системе: ‘ $loc_de ‘» ;
?>

Примечания

Пользователи Windows найдут полезной информацию о значениях locales на сайте Microsoft MSDN . Поддерживаемые языки перечислены в » документации по языковым строкам, а значения стран/регионов в » документации по строкам стран/регионов.

User Contributed Notes 33 notes

be careful with the LC_ALL setting, as it may introduce some unwanted conversions. For example, I used

to get my weekdays in dutch on the page. From that moment on (as I found out many hours later) my floating point values from MYSQL where interpreted as integers because the Dutch locale wants a comma (,) instead of a point (.) before the decimals. I tried printf, number_format, floatval. all to no avail. 1.50 was always printed as 1.00 🙁

my weekdays are good now and my floating point values too.

I hope I can save some people the trouble of figuring this out by themselves.

If you are looking for a getlocale() function simply pass 0 (zero) as the second parameter to setlocale().

Beware though if you use the category LC_ALL and some of the locales differ as a string containing all the locales is returned:

echo setlocale ( LC_ALL , 0 );

echo setlocale ( LC_CTYPE , 0 );

setlocale ( LC_ALL , «en_US.UTF-8» );
echo setlocale ( LC_ALL , 0 );

?>

If you are looking to store and reset the locales you could do something like this:

$originalLocales = explode ( «;» , setlocale ( LC_ALL , 0 ));
setlocale ( LC_ALL , «nb_NO.utf8» );

foreach ( $originalLocales as $localeSetting ) if ( strpos ( $localeSetting , » keyword»>) !== false ) list ( $category , $locale ) = explode ( » keyword»>, $localeSetting );
>
else $category = LC_ALL ;
$locale = $localeSetting ;
>
setlocale ( $category , $locale );
>

?>

The above works here (Ubuntu Linux) but as the setlocale() function is just wrapping the equivalent system calls, your mileage may vary on the result.

Источник

Php user locale ru

Для каждого php-приложения очень желательно жестко настроить локаль, чтобы не зависеть от настроек сервера. Иначе, по «закону подлости» — в самый неподходящий момент могут возникнуть проблемы с отображением данных. Причем, «артефакты» могут вылезти не только после переезда/миграции на другой сервер, но и даже как будто вообще без причины.

Как установить локаль для PHP - set locale for PHP

Как раз подобный случай и произошел недавно с одним web-сервисом, реализованным на PHP.

Один из скриптов отображал в интерфейсе приложения срок действия базы данных (совпадает с циклами AIRAC), и администратор этого сервиса заметил странную штуку: срок действия февральской базы данных — цикл 2102 имел весьма странный срок действия — с 25 января 2021 по 25 января 2021, хотя должен был иметь срок действия с 25 февраля 2021 по 25 марта 2021.

Различные проверки и эксперименты с PHP-скриптом показали, что он выдает дату в формате, у которого сокращенное название месяца выводится на русском языке: 2021-Фев-25 и 2021-Мар-25. А приложение, которое использует данные API, совсем не понимает по-русски, ему необходимо давать всё на английском языке! Соответственно, оно не понимало, какой ему передается месяц и правращало его по умолчанию в первый месяц года.

Причину данного сбоя выяснить не удалось, миграция сервиса точно не выполнялась :), проводились ли какие-то работы на сервере — пока узнать не получилось. Наиболее вероятно, что системный администратор сервера изменил язык сервера по умолчанию на русский. Поэтому была выполнена настройка локали для PHP с указанием английского языка. В PHP-скрипт была добавлена строка:

setlocale(LC_ALL, ‘en_US’, ‘en_US.UTF8’, ‘en’, ‘english’);

Можно было добавить в сокращенном виде:

Важно: не перепутать и корректно указать индекс языка — английских языков несколько, не стоит писать en_En (нет такой локализации!), есть: en_Gb, en_Us, en_Au, en_Bz, en_Ca, en_Ie, en_Jm, en_Nz, en_Za, en_Tt.

Вместо глобальной настройки LC_ALL можно указать отдельный параметр, на которые будет влиять локаль:

  • LC_COLLATE – функции сравнения строк
  • LC_CTYPE – функции преобразования и классификации строк
  • C_MONETARYL – для функции localeconv()
  • LC_NUMERIC – задает символ десятичного разделения
  • LC_TIME – форматирование даты/времени
  • LC_MESSAGES – для системных сообщений

Установка часового пояса:

Часовой пояс Москвы (UTC + 3):

date_default_timezone_set(‘Europe/Moscow’);

date_default_timezone_set(‘GMT’);

Все варианты временных зон — на сайте php.net.

Источник

Оцените статью