Procházet zdrojové kódy

[ZF-7468, ZF-7469] Zend_Locale:

- added support for Win2003, WinXP and Win2008 locales

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@17485 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas před 16 roky
rodič
revize
914015ba47
2 změnil soubory, kde provedl 262 přidání a 74 odebrání
  1. 16 17
      library/Zend/Locale.php
  2. 246 57
      library/Zend/Locale/Data/Translation.php

+ 16 - 17
library/Zend/Locale.php

@@ -322,29 +322,28 @@ class Zend_Locale
 
             if ($language !== 'C') {
                 if (strpos($language, '.') !== false) {
-                    $language = substr($language, 0, (strpos($language, '.') - 1));
+                    $language = substr($language, 0, strpos($language, '.'));
                 } else if (strpos($language, '@') !== false) {
-                    $language = substr($language, 0, (strpos($language, '@') - 1));
+                    $language = substr($language, 0, strpos($language, '@'));
                 }
 
-                $splitted = explode('_', $language);
-                $language = (string) $language;
-                if (isset(self::$_localeData[$language]) === true) {
-                    $languagearray[$language] = 1;
-                    if (strlen($language) > 4) {
-                        $languagearray[substr($language, 0, 2)] = 1;
-                    }
+                $language = str_ireplace(
+                    array_keys(Zend_Locale_Data_Translation::$languageTranslation),
+                    array_values(Zend_Locale_Data_Translation::$languageTranslation),
+                    (string) $language
+                );
 
-                    continue;
-                }
+                $language = str_ireplace(
+                    array_keys(Zend_Locale_Data_Translation::$regionTranslation),
+                    array_values(Zend_Locale_Data_Translation::$regionTranslation),
+                    $language
+                );
 
-                if (empty(Zend_Locale_Data_Translation::$localeTranslation[$splitted[0]]) === false) {
-                    if (empty(Zend_Locale_Data_Translation::$localeTranslation[$splitted[1]]) === false) {
-                        $languagearray[Zend_Locale_Data_Translation::$localeTranslation[$splitted[0]] . '_' .
-                        Zend_Locale_Data_Translation::$localeTranslation[$splitted[1]]] = 1;
+                if (isset(self::$_localeData[$language]) === true) {
+                    $languagearray[$language] = 1;
+                    if (strpos($language, '_') !== false) {
+                        $languagearray[substr($language, 0, strpos($language, '_'))] = 1;
                     }
-
-                    $languagearray[Zend_Locale_Data_Translation::$localeTranslation[$splitted[0]]] = 1;
                 }
             }
         }

+ 246 - 57
library/Zend/Locale/Data/Translation.php

@@ -21,6 +21,11 @@
 
 /**
  * Definition class for all Windows locales
+ * Based on this two lists:
+ * @link http://msdn.microsoft.com/en-us/library/39cwe7zf.aspx
+ * @link http://msdn.microsoft.com/en-us/library/cdax410z.aspx
+ * @link http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx
+ * @link http://msdn.microsoft.com/en-us/goglobal/bb895996.aspx
  *
  * @category  Zend
  * @package   Zend_Locale
@@ -34,63 +39,247 @@ class Zend_Locale_Data_Translation
      *
      * @var array $localeTranslation
      */
-    public static $localeTranslation = array(
-        'Australia'       => 'AU',
-        'Austria'         => 'AT',
-        'Belgium'         => 'BE',
-        'Brazil'          => 'BR',
-        'Canada'          => 'CA',
-        'China'           => 'CN',
-        'Czech Republic'  => 'CZ',
-        'Denmark'         => 'DK',
-        'Finland'         => 'FI',
-        'France'          => 'FR',
-        'Germany'         => 'DE',
-        'Greece'          => 'GR',
-        'Hong Kong SAR'   => 'HK',
-        'Hungary'         => 'HU',
-        'Iceland'         => 'IS',
-        'Ireland'         => 'IE',
-        'Italy'           => 'IT',
-        'Japan'           => 'JP',
-        'Korea'           => 'KP',
-        'Mexiko'          => 'MX',
-        'The Netherlands' => 'NL',
-        'New Zealand'     => 'NZ',
-        'Norway'          => 'NO',
-        'Poland'          => 'PL',
-        'Portugal'        => 'PT',
-        'Russia'          => 'RU',
-        'Singapore'       => 'SG',
-        'Slovakia'        => 'SK',
-        'Spain'           => 'ES',
-        'Sweden'          => 'SE',
-        'Taiwan'          => 'TW',
-        'Turkey'          => 'TR',
-        'United Kingdom'  => 'GB',
-        'United States'   => 'US',
+    public static $languageTranslation = array(
+        'Afrikaans'         => 'af',
+        'Albanian'          => 'sq',
+        'Amharic'           => 'am',
+        'Arabic'            => 'ar',
+        'Armenian'          => 'hy',
+        'Assamese'          => 'as',
+        'Azeri'             => 'az',
+        'Azeri Latin'       => 'az_Latn',
+        'Azeri Cyrillic'    => 'az_Cyrl',
+        'Basque'            => 'eu',
+        'Belarusian'        => 'be',
+        'Bengali'           => 'bn',
+        'Bengali Latin'     => 'bn_Latn',
+        'Bosnian'           => 'bs',
+        'Bulgarian'         => 'bg',
+        'Burmese'           => 'my',
+        'Catalan'           => 'ca',
+        'Cherokee'          => 'chr',
+        'Chinese'           => 'zh',
+        'Croatian'          => 'hr',
+        'Czech'             => 'cs',
+        'Danish'            => 'da',
+        'Divehi'            => 'dv',
+        'Dutch'             => 'nl',
+        'English'           => 'en',
+        'Estonian'          => 'et',
+        'Faroese'           => 'fo',
+        'Faeroese'          => 'fo',
+        'Farsi'             => 'fa',
+        'Filipino'          => 'fil',
+        'Finnish'           => 'fi',
+        'French'            => 'fr',
+        'Frisian'           => 'fy',
+        'Macedonian'        => 'mk',
+        'Gaelic'            => 'gd',
+        'Galician'          => 'gl',
+        'Georgian'          => 'ka',
+        'German'            => 'de',
+        'Greek'             => 'el',
+        'Guarani'           => 'gn',
+        'Gujarati'          => 'gu',
+        'Hausa'             => 'ha',
+        'Hawaiian'          => 'haw',
+        'Hebrew'            => 'he',
+        'Hindi'             => 'hi',
+        'Hungarian'         => 'hu',
+        'Icelandic'         => 'is',
+        'Igbo'              => 'ig',
+        'Indonesian'        => 'id',
+        'Inuktitut'         => 'iu',
+        'Italian'           => 'it',
+        'Japanese'          => 'ja',
+        'Kannada'           => 'kn',
+        'Kanuri'            => 'kr',
+        'Kashmiri'          => 'ks',
+        'Kazakh'            => 'kk',
+        'Khmer'             => 'km',
+        'Konkani'           => 'kok',
+        'Korean'            => 'ko',
+        'Kyrgyz'            => 'ky',
+        'Lao'               => 'lo',
+        'Latin'             => 'la',
+        'Latvian'           => 'lv',
+        'Lithuanian'        => 'lt',
+        'Macedonian'        => 'mk',
+        'Malay'             => 'ms',
+        'Malayalam'         => 'ml',
+        'Maltese'           => 'mt',
+        'Manipuri'          => 'mni',
+        'Maori'             => 'mi',
+        'Marathi'           => 'mr',
+        'Mongolian'         => 'mn',
+        'Nepali'            => 'ne',
+        'Norwegian'         => 'no',
+        'Norwegian Bokmal'  => 'nb',
+        'Norwegian Nynorsk' => 'nn',
+        'Oriya'             => 'or',
+        'Oromo'             => 'om',
+        'Papiamentu'        => 'pap',
+        'Pashto'            => 'ps',
+        'Polish'            => 'pl',
+        'Portuguese'        => 'pt',
+        'Punjabi'           => 'pa',
+        'Quecha'            => 'qu',
+        'Quechua'           => 'qu',
+        'Rhaeto-Romanic'    => 'rm',
+        'Romanian'          => 'ro',
+        'Russian'           => 'ru',
+        'Sami'              => 'smi',
+        'Sami Inari'        => 'smn',
+        'Sami Lule'         => 'smj',
+        'Sami Northern'     => 'se',
+        'Sami Skolt'        => 'sms',
+        'Sami Southern'     => 'sma',
+        'Sanskrit'          => 'sa',
+        'Serbian'           => 'sr',
+        'Serbian Latin'     => 'sr_Latn',
+        'Serbian Cyrillic'  => 'sr_Cyrl',
+        'Sindhi'            => 'sd',
+        'Sinhalese'         => 'si',
+        'Slovak'            => 'sk',
+        'Slovenian'         => 'sl',
+        'Somali'            => 'so',
+        'Sorbian'           => 'wen',
+        'Spanish'           => 'es',
+        'Swahili'           => 'sw',
+        'Swedish'           => 'sv',
+        'Syriac'            => 'syr',
+        'Tajik'             => 'tg',
+        'Tamazight'         => 'tmh',
+        'Tamil'             => 'ta',
+        'Tatar'             => 'tt',
+        'Telugu'            => 'te',
+        'Thai'              => 'th',
+        'Tibetan'           => 'bo',
+        'Tigrigna'          => 'ti',
+        'Tsonga'            => 'ts',
+        'Tswana'            => 'tn',
+        'Turkish'           => 'tr',
+        'Turkmen'           => 'tk',
+        'Uighur'            => 'ug',
+        'Ukrainian'         => 'uk',
+        'Urdu'              => 'ur',
+        'Uzbek'             => 'uz',
+        'Uzbek Latin'       => 'uz_Latn',
+        'Uzbek Cyrillic'    => 'uz_Cyrl',
+        'Venda'             => 've',
+        'Vietnamese'        => 'vi',
+        'Welsh'             => 'cy',
+        'Xhosa'             => 'xh',
+        'Yiddish'           => 'yi',
+        'Yoruba'            => 'yo',
+        'Zulu'              => 'zu',
+    );
 
-        'Chinese'         => 'zh',
-        'Czech'           => 'cs',
-        'Danish'          => 'da',
-        'Dutch'           => 'nl',
-        'English'         => 'en',
-        'Finnish'         => 'fi',
-        'French'          => 'fr',
-        'German'          => 'de',
-        'Greek'           => 'el',
-        'Hungarian'       => 'hu',
-        'Icelandic'       => 'is',
-        'Italian'         => 'it',
-        'Japanese'        => 'ja',
-        'Korean'          => 'ko',
-        'Norwegian'       => 'no',
-        'Polish'          => 'pl',
-        'Portuguese'      => 'pt',
-        'Russian'         => 'ru',
-        'Slovak'          => 'sk',
-        'Spanish'         => 'es',
-        'Swedish'         => 'sv',
-        'Turkish'         => 'tr'
+    public static $regionTranslation = array(
+        'Albania'                    => 'AL',
+        'Algeria'                    => 'DZ',
+        'Argentina'                  => 'AR',
+        'Armenia'                    => 'AM',
+        'Australia'                  => 'AU',
+        'Austria'                    => 'AT',
+        'Bahrain'                    => 'BH',
+        'Bangladesh'                 => 'BD',
+        'Belgium'                    => 'BE',
+        'Belize'                     => 'BZ',
+        'Bhutan'                     => 'BT',
+        'Bolivia'                    => 'BO',
+        'Bosnia Herzegovina'         => 'BA',
+        'Brazil'                     => 'BR',
+        'Brazilian'                  => 'BR',
+        'Brunei Darussalam'          => 'BN',
+        'Cameroon'                   => 'CM',
+        'Canada'                     => 'CA',
+        'Chile'                      => 'CL',
+        'China'                      => 'CN',
+        'Colombia'                   => 'CO',
+        'Costa Rica'                 => 'CR',
+        "Cote d'Ivoire"              => 'CI',
+        'Czech Republic'             => 'CZ',
+        'Dominican Republic'         => 'DO',
+        'Denmark'                    => 'DK',
+        'Ecuador'                    => 'EC',
+        'Egypt'                      => 'EG',
+        'El Salvador'                => 'SV',
+        'Eritrea'                    => 'ER',
+        'Ethiopia'                   => 'ET',
+        'Finland'                    => 'FI',
+        'France'                     => 'FR',
+        'Germany'                    => 'DE',
+        'Greece'                     => 'GR',
+        'Guatemala'                  => 'GT',
+        'Haiti'                      => 'HT',
+        'Honduras'                   => 'HN',
+        'Hong Kong'                  => 'HK',
+        'Hong Kong SAR'              => 'HK',
+        'Hungary'                    => 'HU',
+        'Iceland'                    => 'IS',
+        'India'                      => 'IN',
+        'Indonesia'                  => 'ID',
+        'Iran'                       => 'IR',
+        'Iraq'                       => 'IQ',
+        'Ireland'                    => 'IE',
+        'Italy'                      => 'IT',
+        'Jamaica'                    => 'JM',
+        'Japan'                      => 'JP',
+        'Jordan'                     => 'JO',
+        'Korea'                      => 'KR',
+        'Kuwait'                     => 'KW',
+        'Lebanon'                    => 'LB',
+        'Libya'                      => 'LY',
+        'Liechtenstein'              => 'LI',
+        'Luxembourg'                 => 'LU',
+        'Macau'                      => 'MO',
+        'Macao SAR'                  => 'MO',
+        'Malaysia'                   => 'MY',
+        'Mali'                       => 'ML',
+        'Mexico'                     => 'MX',
+        'Moldava'                    => 'MD',
+        'Monaco'                     => 'MC',
+        'Morocco'                    => 'MA',
+        'Netherlands'                => 'NL',
+        'New Zealand'                => 'NZ',
+        'Nicaragua'                  => 'NI',
+        'Nigeria'                    => 'NG',
+        'Norway'                     => 'NO',
+        'Oman'                       => 'OM',
+        'Pakistan'                   => 'PK',
+        'Panama'                     => 'PA',
+        'Paraguay'                   => 'PY',
+        "People's Republic of China" => 'CN',
+        'Peru'                       => 'PE',
+        'Philippines'                => 'PH',
+        'Poland'                     => 'PL',
+        'Portugal'                   => 'PT',
+        'PRC'                        => 'CN',
+        'Puerto Rico'                => 'PR',
+        'Qatar'                      => 'QA',
+        'Reunion'                    => 'RE',
+        'Russia'                     => 'RU',
+        'Saudi Arabia'               => 'SA',
+        'Senegal'                    => 'SN',
+        'Singapore'                  => 'SG',
+        'Slovakia'                   => 'SK',
+        'South Africa'               => 'ZA',
+        'Spain'                      => 'ES',
+        'Sri Lanka'                  => 'LK',
+        'Sweden'                     => 'SE',
+        'Switzerland'                => 'CH',
+        'Syria'                      => 'SY',
+        'Taiwan'                     => 'TW',
+        'The Netherlands'            => 'NL',
+        'Trinidad'                   => 'TT',
+        'Tunisia'                    => 'TN',
+        'UAE'                        => 'AE',
+        'United Kingdom'             => 'GB',
+        'United States'              => 'US',
+        'Uruguay'                    => 'UY',
+        'Venezuela'                  => 'VE',
+        'Yemen'                      => 'YE',
+        'Zimbabwe'                   => 'ZW',
     );
 }