Локализация

Глобализация проявляется во многих аспектах, например, единой системе мер: время, размеры и расстояния, температуры, даты и многое другое. Конечно, есть страны которые выпадают из общего потока, например, США, чуть ли не единственная страна, в которой сохраняется и преувалирует Английская система мер. Она использует мили вместо километров, фунты вместо килограммов. Во многих восточных странах по-другому устроены календари, и где-то сейчас идет четырех тысячный год. Но, в целом, все унифицировано.

Несмотря на эту унификацию, в каждой стране есть свои особенности по способу записи, сравнению и другим аспектам. Например в штатах принято в датах первым ставить месяц, а затем уже день. В некоторых странах для вывода вещественных чисел используют точку, а в некоторых запятую: 1,234. Эти особенности не обязательно привязаны к целой стране. Внутри одной страны может быть множество дополнительных разделений. Каждый такой набор особенностей называют локалью, а процесс адаптации к особенностям конкретной локали - локализацией.

Локализация важна в программном обеспечении. Пользователь всегда ожидает, что любой софт (в том числе сайт) будет работать предсказуемо. В это понятие включается и локализация. Понятно, что самостоятельное решение этой задачи слишком затратно. К счастью, этого делать не нужно, локализация, обычно, встроена либо в сам язык, либо в специальные библиотеки.

В PHP для управления локалью используется функция setlocale. Эта функция настраивает локаль глобально. То есть ее вызов влияет на все последующие функции, опирающиеся на локализацию.

string setlocale ( int $category , string $locale [, string $... ] )

Первым параметром эта функция принимает название категории (как константу), к которой нужно применить локаль, передающуюся дальше.

  • LC_ALL - все нижеперечисленное
  • LC_COLLATE - функции сравнения строк, см. strcoll()
  • LC_CTYPE - функции преобразования и классификации строк, например strtoupper()
  • LC_MONETARY - для функции localeconv()
  • LC_NUMERIC - задает символ десятичного разделения (см. также localeconv())
  • LC_TIME - форматирование даты/времени функцией strftime()

То есть локаль устанавливается глобально, но ее можно ставить только для определенных подсистем.

<?php

echo 1.234; // => 1.234
setlocale(LC_ALL, 'ru_RU');
echo 1.234; // => 1,234

Для вывода текущей локали нужно вызвать эту же функцию и передать в нее 0 вместо локали.

<?php

setlocale(LC_ALL, 0);

Задание

Выведите на экран текущую локаль

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь с помощью учётной записи GitHub, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт на GitHub.