setlocale

Установка региональных настроек.
Синтаксис:

string SetLocale(string category, string locale);

Функция setlocale устанавливает текущую локаль, с которой будут работать функции преобразования регистра символов, вывода даты-времени и т.д. Вообще говоря, для каждой категории функций локаль определяется отдельно и выглядит по-разному.
То, какую именно категорию функций затронет вызов setlocale(), задается в параметре category. Он может принимать следующие строковые значения:

LC_CTYPE - активизирует указанную локаль для функций перевода в верхний/нижний регистры;
LC_NUMERIC - активизирует локаль для функций форматирования дробных чисел - а именно, задает
разделитель целой и дробной части в числах;
LC_TIME - задает формат вывода даты и времени по умолчанию;
LC_ALL - устанавливает все вышеперечисленные режимы.
Теперь поговорим о параметре locale. Как известно, каждая локаль, установленная в системе, имеет свое уникальное имя, по которому к ней можно обратиться. Именно оно и фиксируется в этом параметре. Однако, есть два важных исключения из этого правила.
Во-первых, если величина locale равна пустой строке "", то устанавливается та локаль, которая указана в глобальной переменной окружения с именем, совпадающем с именем категории category (или LANG - она практически всегда присутствует в Unix).

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

localeconv()

Возвращает информацию о числовых форматах (PHP 4 >= 4.0.5, PHP 5)

Описание:

array localeconv ( void )

Возвращает ассоциативный массив с информацией о числовых и денежных форматах в текущей локали.

localeconv() возвращает данные, основанные на текущей локали, установленной функцией setlocale(). Возвращаемый массив содержит следующие элементы:

ЭлементОписание
decimal_pointСимвол десятичной точки
thousands_sepРазделитель групп
groupingМассив, содержащий количества цифр в группах для числовых данных
int_curr_symbolМеждународное обозначение валюты (например RUR)
currency_symbolНациональное обозначение валюты (например р.)
mon_decimal_pointСимвол десятичной точки в денежном формате
mon_thousands_sepРазделитель групп в денежном формате
mon_groupingМассив, содержащий количества цифр в группах для денежных данных
positive_signЗнак для положительных чисел
negative_signЗнак для отрицательных чисел
int_frac_digitsЧисло разрядов после точки (международное)
frac_digitsЧисло разрядов после точки (национальное)
p_cs_precedesTRUE если currency_symbol записывется перед положительным значением, иначе FALSE
p_sep_by_spaceTRUE если currency_symbol отделяется от положительного значения пробелом, иначе FALSE
n_cs_precedesTRUE если currency_symbol записывется перед отрицательным значением, иначе FALSE
n_sep_by_spaceTRUE если currency_symbol отделяется от отрицательного значения пробелом, иначе FALSE
p_sign_posnДля положительных чисел
0 Число и обозначение валюты заключаются в скобки
1 Знак записывается перед числом и обозначением валюты
2 Знак записывается после числа и обозначения валюты
3 Знак записывается перед обозначением валюты
4 Знак записывается после обозначения валюты
n_sign_posnДля отрицательных чисел
0 Число и обозначение валюты заключаются в скобки
1 Знак записывается перед числом и обозначением валюты
2 Знак записывается после числа и обозначения валюты
3 Знак записывается перед обозначением валюты
4 Знак записывается после обозначения валюты

Элементы группировки описывают способ группировки цифр. Например, в локали en_US элемент grouping содержит массив из 2 элементов со значениями 3 и 3. Больший индек массива соответствует группировке цифр, расположенных левее. Если элемент массива равен CHAR_MAX, последующие цифры не группируются. Если элемент массива равен 0, используется значение предыдущего элемента.

Пример использования localeconv()

<?php
setlocale(LC_ALL, "ru_RU");

$locale_info = localeconv();

echo "<pre>\n";
echo "----------------------------------------------\n";
echo "Информация о форматировании числовых величин: \n";
echo "----------------------------------------------\n\n";

echo "int_curr_symbol: {$locale_info["int_curr_symbol"]}\n";
echo "currency_symbol: {$locale_info["currency_symbol"]}\n";
echo "mon_decimal_point: {$locale_info["mon_decimal_point"]}\n";
echo "mon_thousands_sep: {$locale_info["mon_thousands_sep"]}\n";
echo "positive_sign: {$locale_info["positive_sign"]}\n";
echo "negative_sign: {$locale_info["negative_sign"]}\n";
echo "int_frac_digits: {$locale_info["int_frac_digits"]}\n";
echo "frac_digits: {$locale_info["frac_digits"]}\n";
echo "p_cs_precedes: {$locale_info["p_cs_precedes"]}\n";
echo "p_sep_by_space: {$locale_info["p_sep_by_space"]}\n";
echo "n_cs_precedes: {$locale_info["n_cs_precedes"]}\n";
echo "n_sep_by_space: {$locale_info["n_sep_by_space"]}\n";
echo "p_sign_posn: {$locale_info["p_sign_posn"]}\n";
echo "n_sign_posn: {$locale_info["n_sign_posn"]}\n";
echo "</pre>\n";
?>

Использование константы CHAR_MAX описано выше.

money_format()

Форматирует число как денежную величину (PHP 4 >= 4.3.0, PHP 5)

Описание:

string money_format ( string format, float number )

money_format() форматирует число number как денежную величину. Эта функция вызывает функцию strfmon языка C, но позволяет преобразовать только одно число за один вызов.

Замечание: Функция money_format() определена только если в системе присутствует функция strfmon. Например, в Windows она отсутствует, поэтому money_format() не определена в Windows.

Описание формата состоит из:

• символа %
• необязательных флагов
• необязательной ширины поля
• необязательной точности до запятой
• необязательной точности после запятой
• обязательного описателя преобразования

Флаги. Могут быть использованы следующие флаги:

=fСимвол =, за которым следует еще один символ, задает символ заполнения. По умолчанию пробел.
^Запрещает группировку символов (определяемую текущей локалью).
+
или
(
Задает способ форматирования положительных и отрицательных значений. При использовании + будут использоваться аналоги символов + и - из текущей локали. Если указана (, отрицательные числа будут заключены в скобки. По умолчанию +.
!Подавляет вывод символа валюты.
-Если этот флаг задан, поля будут выравнены влево, вместо используемого по умолчанию выравнивания вправо.

Ширина поля.

w

Строка из десятичных цифр, задающая минимальную ширину поля. Поле будет выравнено вправо, если не указан флаг -. Значение по умолчанию - 0 (ноль).

Точность до запятой.

#n

Максимальное количество цифр (n), которое ожидается до запятой. Это обычно используется при выводе значений одно под другим, чтобы десятичные точки распологались в одной колонке, при этом используется символ заполнения, если число цифр меньше n. Если число цифр больше n, этот параметр игнорируется.

Если группировка не была запрещена флагом ^, разделители групп будут вставлены перед добавлением символов заполнения. Разделители групп не вставляются между символами заполнения, даже если заполнитель - цифра.

Для обеспечения выравнивания, все символы, выводимые до или после числа, такие как сивол валюты или знак, будут дополнены пробелами до одинаковой ширины.

Точность после запятой .

.p

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

Описатель преобразования .

i

Используется международный денежный формат из текущей локали (например, для американской локали: USD 1,234.56).

n

Используется национальный денежный формат из текущей локали (например, для локали de_DE: DM1.234,56).

%

Вставляет символ %.

Замечание: На работу этой функции влияет установка категории LC_MONETARY текущей локали. Перед использованием этой функции установите нужную локаль с помощью setlocale().

Символы перед и после описания формата возвращаются без изменений.

Пример использования money_format()

Проиллюстрируем применение этой функции для различных локалей и разных описаний формата.

<?php

$number = 1234.56;

// международный формат в локали en_US
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";
// USD 1,234.56

// Итальянский национальный формат с 2 знаками после запятой
setlocale(LC_MONETARY, 'it_IT');
echo money_format('%.2n', $number) . "\n";
// L. 1.234,56

// Использование отрицательных чисел
$number = -1234.5672;

// национальный формат США, с использованием скобок для
// отрицательных чисел и 10 знаков до запятой
setlocale(LC_MONETARY, 'en_US');
echo money_format('%(#10n', $number) . "\n";
// ($ 1,234.57)

// подобно предыдущему, но с добавлением 2 знаков после запятой
// и '*' в качестве символа заполнения
echo money_format('%=*(#10.2n', $number) . "\n";
// ($********1,234.57)

// Выравнивание влево, ширина 14 знаков, 8 знаков дозапятой,
// 2 знака после запятой, без разбиения на группы
// с использованием международного формата в локали de_DE.
setlocale(LC_MONETARY, 'de_DE');
echo money_format('%=*^-14#8.2i', 1234.56) . "\n";
// DEM 1234,56****

// А теперь добавим текст перед и после описателя формата
setlocale(LC_MONETARY, 'en_GB');
$fmt = 'The final value is %i (after a 10%% discount)';
echo money_format($fmt, 1234.56) . "\n";
// The final value is GBP 1,234.56 (after a 10% discount)

?>

nl_langinfo()

Возвращает информацию о языке и локали (PHP 4 >= 4.1.0, PHP 5)

Описание:

string nl_langinfo ( int item )

nl_langinfo() используется для доступа к отдельным элементам различных категорий текущей локали. В отличии от localeconv(), возвращающей все элементы, nl_langinfo() позволяет выбрать отдельный элемент.

Если аргумент item имеет недопустимое значение, возвращает FALSE.

item может быть целым числом или соответствующей константой. Ниже приведены возможные константы и их описания. Для некоторых локалей отдельные константы могут быть не определены.

Таблица. Константы nl_langinfo

КонстантаОписание
Константы в категории LC_TIME
ABDAY_(1-7)Сокращенное название n-го дня недели.
DAY_(1-7)Полное название n-го дня недели (DAY_1 соответствует воскресенью).
ABMON_(1-12)Сокращенное название n-го месяца.
MON_(1-12)Полное название n-го месяца.
AM_STRОбозначение "до полудня".
PM_STRОбозначение "после полудня".
D_T_FMTСтрока, которую можно использовать в качестве формата с функцией strftime() для вывода даты и времени.
D_FMTСтрока, которую можно использовать в качестве формата с функцией strftime() для вывода даты.
T_FMTСтрока, которую можно использовать в качестве формата с функцией strftime() для вывода времени.
T_FMT_AMPMСтрока, которую можно использовать в качестве формата с функцией strftime() для вывода времени в 12-часовом формате.
ERAЭра
ERA_YEARГод в формате с эрой
ERA_D_T_FMTДата и время в формате с эрой (Строка, которую можно использовать в качестве формата с функцией strftime()).
ERA_D_FMTДата в формате с эрой (Строка, которую можно использовать в качестве формата с функцией strftime()).
ERA_T_FMTВремя в формате с эрой (Строка, которую можно использовать в качестве формата с функцией strftime()).
Константы в категории LC_MONETARY
INT_CURR_SYMBOLМеждународное обозначение валюты.
CURRENCY_SYMBOLНациональное обозначение валюты.
CRNCYSTRАналог CURRENCY_SYMBOL.
MON_DECIMAL_POINTСимвол десятичной точки.
MON_THOUSANDS_SEPРазделитель тысяч (групп из 3 цифр).
MON_GROUPINGАналогичен элементу 'grouping'.
POSITIVE_SIGNЗнак для положительных чисел.
NEGATIVE_SIGNЗнак для отрицательных чисел.
INT_FRAC_DIGITSКоличество знаков после запятой (международный формат).
FRAC_DIGITSКоличество знаков после запятой (национальный формат).
P_CS_PRECEDESВозвращает 1, если CURRENCY_SYMBOL записывется перед положительным значением.
P_SEP_BY_SPACEВозвращает 1, если CURRENCY_SYMBOL отделяется от положительного значения пробелом.
N_CS_PRECEDESВозвращает 1, если CURRENCY_SYMBOL записывется перед отрицательным значением.
N_SEP_BY_SPACEВозвращает 1, если CURRENCY_SYMBOL отделяется от отрицательного значения пробелом.
P_SIGN_POSNВозвращает 0 если число и обозначение валюты заключаются в скобки
Возвращает 1 если знак записывается перед числом и обозначением валюты
Возвращает 2 если знак записывается после числа и обозначения валюты
Возвращает 3 если знак записывается перед обозначением валюты
Возвращает 4 если знак записывается после обозначения валюты
N_SIGN_POSN
Константы в категории LC_NUMERIC
DECIMAL_POINTСимвол десятичной точки.
RADIXCHARАналогично DECIMAL_POINT.
THOUSANDS_SEPРазделитель тысяч (групп из 3 цифр).
THOUSEPАналогично THOUSANDS_SEP.
GROUPING
Константы в категории LC_MESSAGES
YESEXPRРегулярное выражение, при совпадении с которым строка рассматривается как ответ 'да'.
NOEXPRРегулярное выражение, при совпадении с которым строка рассматривается как ответ 'нет'.
YESSTRСлово 'да'.
NOSTRСлово 'нет'.
Константы в категории LC_CTYPE
CODESETВозвращает строку с именем текущей кодировки.

Замечание: Для Windows-платформ эта функция не реализована