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
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
$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
setlocale(LC_ALL, 'es_ES.UTF-8');
echo "Выражение для 'да': " . nl_langinfo(YESEXPR) . "\n";
echo "Выражение для 'нет': " . nl_langinfo(NOEXPR) . "\n";
?>Выражение для 'да': ^[sSyY].* Выражение для 'нет': ^[nN].*