Nl langinfo: примеры (PHP)

nl_langinfo в PHP: получение локализованных данных
Раздел: Интернационализация
nl_langinfo(int $item): string|false

Функция nl_langinfo в PHP

Функция nl_langinfo возвращает элементы локали, используя информацию о текущей локали. Она позволяет получать специфические данные о региональных настройках, такие как форматы дат, денежные единицы, кодировки и другие параметры, связанные с локализацией.

Аргументы функции

Функция принимает один аргумент:

  • item (целое число) - константа, указывающая на запрашиваемый элемент локали. Значение может быть одной из констант: ABDAY_1, DAY_1, ABMON_1, MON_1, RADIXCHAR, THOUSEP, YESEXPR, NOEXPR, CRNCYSTR, CODESET и другие.

Функция используется для получения локализованных строк, которые зависят от установленной локали с помощью функции setlocale. Это полезно при создании интернационализированных приложений.

Примеры использования nl_langinfo

Получение информации о днях недели
<?php
setlocale(LC_ALL, 'ru_RU.UTF-8');
echo nl_langinfo(ABDAY_2); // Сокращенное название второго дня недели
echo nl_langinfo(DAY_3);   // Полное название третьего дня недели
?>
Вт
вторник
Работа с денежными единицами
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
echo nl_langinfo(CRNCYSTR); // Символ валюты
?>
$
Определение кодировки
<?php
setlocale(LC_ALL, 'de_DE.UTF-8');
echo nl_langinfo(CODESET); // Кодировка локали
?>
UTF-8

Похожие функции в PHP

В PHP существуют другие функции для работы с локализацией:

  • setlocale - устанавливает локаль для категорий. Используется перед вызовом nl_langinfo для настройки региона.
  • localeconv - возвращает ассоциативный массив с числовыми форматами текущей локали. Предоставляет больше деталей о числовых параметрах, чем nl_langinfo.
  • strftime (устаревшая в PHP 8.1) - форматирует дату и время согласно локали. Полезна для локализованного вывода дат.

Функцию nl_langinfo предпочтительнее использовать для получения конкретных локализованных строк, например символов валют или названий дней. Для работы с числовыми форматами удобнее localeconv.

Альтернативы в других языках программирования

Nl langinfo в Python

Модуль locale предоляет функцию nl_langinfo с похожим поведением.

import locale
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
print(locale.nl_langinfo(locale.ABDAY_2))
Вт

Nl langinfo в Javascript

В JavaScript аналогом является объект Intl, который позволяет получать локализованные строки через методы типа toLocaleString.

const date = new Date();
console.log(date.toLocaleString('ru-RU', { weekday: 'short' }));
Вт

Nl langinfo в MySQL

Функция GET_FORMAT возвращает строки форматов даты, времени или чисел в зависимости от локали.

SELECT GET_FORMAT(DATE, 'USA');
%m.%d.%Y

Типичные ошибки

Не установлена локаль

Если локаль не установлена через setlocale, функция может возвращать непредсказуемые значения или значения по умолчанию.

<?php
// setlocale не вызывался
echo nl_langinfo(ABDAY_1);
?>
Mon  (результат может различаться в зависимости от системы)
Неправильные константы

Использование несуществующих констант приводит к предупреждениям.

<?php
echo nl_langinfo(999); // Неверная константа
?>
Warning: nl_langinfo(): Item '999' is not valid
Проблемы с доступностью локали

Если запрашиваемая локаль недоступна в системе, функция может не возвращать ожидаемые значения.

Изменения в последних версиях PHP

В PHP 8.0.0 функция nl_langinfo теперь принимает параметр item типа int, тогда как ранее принимались только константы типа int. В версии PHP 8.1.0 функция была сделана более стабильной в работе с локалями на системах Windows. Ранее на Windows некоторые константы могли не поддерживаться.

Расширенные примеры

Получение всех дней недели
Пример php
<?php
setlocale(LC_ALL, 'fr_FR.UTF-8');
for ($i = 1; $i <= 7; $i++) {
    $const = constant('DAY_' . $i);
    echo nl_langinfo($const) . "\n";
}
?>
lundi
mardi
mercredi
jeudi
vendredi
samedi
dimanche
Сравнение локалей
Пример php
<?php
$locales = ['ru_RU.UTF-8', 'en_US.UTF-8', 'de_DE.UTF-8'];
foreach ($locales as $locale) {
    setlocale(LC_ALL, $locale);
    echo $locale . ": " . nl_langinfo(RADIXCHAR) . "\n";
}
?>
ru_RU.UTF-8: ,
en_US.UTF-8: .
de_DE.UTF-8: ,
Определение формата ответа Да/Нет
Пример php
<?php
setlocale(LC_ALL, 'es_ES.UTF-8');
echo "Выражение для 'да': " . nl_langinfo(YESEXPR) . "\n";
echo "Выражение для 'нет': " . nl_langinfo(NOEXPR) . "\n";
?>
Выражение для 'да': ^[sSyY].*
Выражение для 'нет': ^[nN].*

PHP nl_langinfo function comments

En
Nl langinfo Query language and locale information