Nuevo en Symfony 4.3: Acceso más simple a los datos de internacionalización

El proyecto ICU ("International Components for Unicode") es un conjunto de librerías para la internacionalización de aplicaciones de software. Entre sus proyectos está la traducción de cierta información básica que utilizan muchas aplicaciones. Por ejemplo, el proyecto ICU proporciona el nombre de todos los países traducidos a todos los idiomas, el nombre e información básica de todas las divisas del mundo, etc.

El componente Intl de Symfony proporciona métodos para acceder fácilmente a esa información:

use Symfony\Component\Intl\Intl;
 
\Locale::setDefault('es');
 
$languages = Intl::getLanguageBundle()->getLanguageNames();
// => ['ab' => 'abjasio', ..., 'sq' => 'albanés', 'de' => 'alemán', ..., 'zu' => 'zulú']
 
$language = Intl::getLanguageBundle()->getLanguageName('de');
// => 'alemán'
 
$countries = Intl::getRegionBundle()->getCountryNames();
// => ['AF' => 'Afganistán', 'AL' => 'Albania', 'DE' => 'Alemania', ...]
 
$country = Intl::getRegionBundle()->getCountryName('GB');
// => 'Reino Unido'
 
$currency = Intl::getCurrencyBundle()->getCurrencyName('INR');
// => 'rupia india'
 
$symbol = Intl::getCurrencyBundle()->getCurrencySymbol('INR');
// => '₹'
 
$fractionDigits = Intl::getCurrencyBundle()->getFractionDigits('INR');
// => 2

Aunque todo esto funciona bien, en Symfony 4.3 hemos decidido ir un poco más allá y simplificar al máximo el acceso a esta información. Así que tu código ahora será más conciso y fácil de leer:

use Symfony\Component\Intl\Currencies;
use Symfony\Component\Intl\Languages;
use Symfony\Component\Intl\Regions;
 
\Locale::setDefault('es');
 
$languages = Languages::getNames();
// => ['ab' => 'abjasio', ..., 'sq' => 'albanés', 'de' => 'alemán', ..., 'zu' => 'zulú']
 
$language = Languages::getName('de');
// => 'alemán'
 
$countries = Countries::getNames();
// => ['AF' => 'Afganistán', 'AL' => 'Albania', 'DE' => 'Alemania', ...]
 
$country = Countries::getName('GB');
// => 'Reino Unido'
 
$currency = Currencies::getName('INR');
// => 'rupia india'
 
$symbol = Currencies::getSymbol('INR');
// => '₹'
 
$fractionDigits = Currencies::getFractionDigits('INR');
// => 2

Además, también hemos añadido métodos exists() en todas las clases para que puedas comprobar si es válido el código de país, idioma, divisa, etc.

$isValidLanguage = Languages::exists($languageCode);
$isValidScript = Scripts::exists($scriptCode);
$isValidRegion = Regions::exists($regionCode);
$isValidLocale = Locales::exists($localeCode);
$isValidCurrency = Currencies::exists($currencyCode);

Esta funcionalidad fue contribuida por Roland Franssen en el pull request #28846.

Fuente: New in Symfony 4.3: Simpler access to Intl data

Comentarios

Publicada el

13 de junio de 2019

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.