diff -r 000000000000 -r 7f95f8617b0b vendor/symfony/src/Symfony/Component/Locale/Locale.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/src/Symfony/Component/Locale/Locale.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,167 @@ + + * + * 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())); + } +}