* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Locale; class Locale extends \Locale { /** * Caches the countries in different locales * @var array */ protected static $countries = array(); /** * Caches the languages in different locales * @var array */ protected static $languages = array(); /** * Caches the different locales * @var array */ protected static $locales = array(); /** * Returns the country names for a locale * * @param string $locale The locale to use for the country names * * @return array The country names with their codes as keys * * @throws RuntimeException When the resource bundles cannot be loaded */ static public function getDisplayCountries($locale) { if (!isset(self::$countries[$locale])) { $bundle = \ResourceBundle::create($locale, __DIR__.'/Resources/data/region'); if (null === $bundle) { throw new \RuntimeException('The country resource bundle could not be loaded'); } $collator = new \Collator($locale); $countries = array(); foreach ($bundle->get('Countries') as $code => $name) { // Global countries (f.i. "America") have numeric codes // Countries have alphabetic codes // "ZZ" is the code for unknown country if (ctype_alpha($code) && 'ZZ' !== $code) { $countries[$code] = $name; } } $collator->asort($countries); self::$countries[$locale] = $countries; } return self::$countries[$locale]; } /** * Returns all available country codes * * @return array The country codes * @throws RuntimeException When the resource bundles cannot be loaded */ static public function getCountries() { return array_keys(self::getDisplayCountries(self::getDefault())); } /** * Returns the language names for a locale * * @param string $locale The locale to use for the language names * * @return array The language names with their codes as keys * * @throws RuntimeException When the resource bundles cannot be loaded */ static public function getDisplayLanguages($locale) { if (!isset(self::$languages[$locale])) { $bundle = \ResourceBundle::create($locale, __DIR__.'/Resources/data/lang'); if (null === $bundle) { throw new \RuntimeException('The language resource bundle could not be loaded'); } $collator = new \Collator($locale); $languages = array(); foreach ($bundle->get('Languages') as $code => $name) { // "mul" is the code for multiple languages if ('mul' !== $code) { $languages[$code] = $name; } } $collator->asort($languages); self::$languages[$locale] = $languages; } return self::$languages[$locale]; } /** * Returns all available language codes * * @return array The language codes * @throws RuntimeException When the resource bundles cannot be loaded */ static public function getLanguages() { return array_keys(self::getDisplayLanguages(self::getDefault())); } /** * Returns the locale names for a locale * * @param string $locale The locale to use for the locale names * @return array The locale names with their codes as keys * @throws RuntimeException When the resource bundles cannot be loaded */ static public function getDisplayLocales($locale) { if (!isset(self::$locales[$locale])) { $bundle = \ResourceBundle::create($locale, __DIR__.'/Resources/data/names'); if (null === $bundle) { throw new \RuntimeException('The locale resource bundle could not be loaded'); } $collator = new \Collator($locale); $locales = array(); foreach ($bundle->get('Locales') as $code => $name) { $locales[$code] = $name; } $collator->asort($locales); self::$locales[$locale] = $locales; } return self::$locales[$locale]; } /** * Returns all available locale codes * * @return array The locale codes * @throws RuntimeException When the resource bundles cannot be loaded */ static public function getLocales() { return array_keys(self::getDisplayLocales(self::getDefault())); } }