Проект ICU («Международные компоненты для Unicode») представляет собой широко используемый набор библиотек для обеспечения поддержки глобализации для программных приложений. В рамках своей миссии они предоставляют локализованные данные, которые обычно необходимы в проектах (например, название всех стран на всех языках, название и основные данные всех валют на всех языках и т. д.)
Компонент Intl предоставляет методы, необходимые для доступа к локализованным данным:
use Symfony\Component\Intl\Intl;
\Locale::setDefault('en');
$languages = Intl::getLanguageBundle()->getLanguageNames();
// => ['ab' => 'Abkhazian', ...]
$language = Intl::getLanguageBundle()->getLanguageName('de');
// => 'German'
$countries = Intl::getRegionBundle()->getCountryNames();
// => ['AF' => 'Afghanistan', ...]
$country = Intl::getRegionBundle()->getCountryName('GB');
// => 'United Kingdom'
$currency = Intl::getCurrencyBundle()->getCurrencyName('INR');
// => 'Indian Rupee'
$symbol = Intl::getCurrencyBundle()->getCurrencySymbol('INR');
// => '₹'
$fractionDigits = Intl::getCurrencyBundle()->getFractionDigits('INR');
// => 2
Хотя это хорошо работает, в Symfony 4.3 улучшили это, чтобы сделать его еще проще и упростить базовую структуру классов. Новый код более лаконичен и удобен для чтения:
use Symfony\Component\Intl\Currencies;
use Symfony\Component\Intl\Languages;
use Symfony\Component\Intl\Regions;
\Locale::setDefault('en');
$languages = Languages::getNames();
// => ['ab' => 'Abkhazian', ...]
$language = Languages::getName('de');
// => 'German'
$countries = Regions::getNames();
// => ['AF' => 'Afghanistan', ...]
$country = Regions::getName('GB');
// => 'United Kingdom'
$currency = Currencies::getName('INR');
// => 'Indian Rupee'
$symbol = Currencies::getSymbol('INR');
// => '₹'
$fractionDigits = Currencies::getFractionDigits('INR');
// => 2
В качестве дополнительного бонуса добавили несколько методов exist()
, чтобы проверить, является ли данное значение допустимым регионом, языком, языковым стандартом и т. д .:
$isValidLanguage = Languages::exists($languageCode);
$isValidScript = Scripts::exists($scriptCode);
$isValidRegion = Regions::exists($regionCode);
$isValidLocale = Locales::exists($localeCode);
$isValidCurrency = Currencies::exists($currencyCode);