Новое в Symfony 4.3: Упрощенный доступ к Intl данным

Проект 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);