web/enmi/Zend/Locale.php
changeset 19 1c2f13fd785c
parent 0 4eba9c11703f
equal deleted inserted replaced
18:bd595ad770fc 19:1c2f13fd785c
       
     1 <?php
       
     2 /**
       
     3  * Zend Framework
       
     4  *
       
     5  * LICENSE
       
     6  *
       
     7  * This source file is subject to the new BSD license that is bundled
       
     8  * with this package in the file LICENSE.txt.
       
     9  * It is also available through the world-wide-web at this URL:
       
    10  * http://framework.zend.com/license/new-bsd
       
    11  * If you did not receive a copy of the license and are unable to
       
    12  * obtain it through the world-wide-web, please send an email
       
    13  * to license@zend.com so we can send you a copy immediately.
       
    14  *
       
    15  * @category  Zend
       
    16  * @package   Zend_Locale
       
    17  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    18  * @license   http://framework.zend.com/license/new-bsd     New BSD License
       
    19  * @version   $Id: Locale.php 22712 2010-07-29 08:24:28Z thomas $
       
    20  */
       
    21 
       
    22 /**
       
    23  * Base class for localization
       
    24  *
       
    25  * @category  Zend
       
    26  * @package   Zend_Locale
       
    27  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    28  * @license   http://framework.zend.com/license/new-bsd     New BSD License
       
    29  */
       
    30 class Zend_Locale
       
    31 {
       
    32     /**
       
    33      * Class wide Locale Constants
       
    34      *
       
    35      * @var array $_localeData
       
    36      */
       
    37     private static $_localeData = array(
       
    38         'root'  => true, 'aa_DJ' => true, 'aa_ER' => true, 'aa_ET' => true, 'aa'    => true,
       
    39         'af_NA' => true, 'af_ZA' => true, 'af'    => true, 'ak_GH' => true, 'ak'    => true,
       
    40         'am_ET' => true, 'am'    => true, 'ar_AE' => true, 'ar_BH' => true, 'ar_DZ' => true,
       
    41         'ar_EG' => true, 'ar_IQ' => true, 'ar_JO' => true, 'ar_KW' => true, 'ar_LB' => true,
       
    42         'ar_LY' => true, 'ar_MA' => true, 'ar_OM' => true, 'ar_QA' => true, 'ar_SA' => true,
       
    43         'ar_SD' => true, 'ar_SY' => true, 'ar_TN' => true, 'ar_YE' => true, 'ar'    => true,
       
    44         'as_IN' => true, 'as'    => true, 'az_AZ' => true, 'az'    => true, 'be_BY' => true,
       
    45         'be'    => true, 'bg_BG' => true, 'bg'    => true, 'bn_BD' => true, 'bn_IN' => true,
       
    46         'bn'    => true, 'bo_CN' => true, 'bo_IN' => true, 'bo'    => true, 'bs_BA' => true,
       
    47         'bs'    => true, 'byn_ER'=> true, 'byn'   => true, 'ca_ES' => true, 'ca'    => true,
       
    48         'cch_NG'=> true, 'cch'   => true, 'cop'   => true, 'cs_CZ' => true, 'cs'    => true,
       
    49         'cy_GB' => true, 'cy'    => true, 'da_DK' => true, 'da'    => true, 'de_AT' => true,
       
    50         'de_BE' => true, 'de_CH' => true, 'de_DE' => true, 'de_LI' => true, 'de_LU' => true,
       
    51         'de'    => true, 'dv_MV' => true, 'dv'    => true, 'dz_BT' => true, 'dz'    => true,
       
    52         'ee_GH' => true, 'ee_TG' => true, 'ee'    => true, 'el_CY' => true, 'el_GR' => true,
       
    53         'el'    => true, 'en_AS' => true, 'en_AU' => true, 'en_BE' => true, 'en_BW' => true,
       
    54         'en_BZ' => true, 'en_CA' => true, 'en_GB' => true, 'en_GU' => true, 'en_HK' => true,
       
    55         'en_IE' => true, 'en_IN' => true, 'en_JM' => true, 'en_MH' => true, 'en_MP' => true,
       
    56         'en_MT' => true, 'en_NA' => true, 'en_NZ' => true, 'en_PH' => true, 'en_PK' => true,
       
    57         'en_SG' => true, 'en_TT' => true, 'en_UM' => true, 'en_US' => true, 'en_VI' => true,
       
    58         'en_ZA' => true, 'en_ZW' => true, 'en'    => true, 'eo'    => true, 'es_AR' => true,
       
    59         'es_BO' => true, 'es_CL' => true, 'es_CO' => true, 'es_CR' => true, 'es_DO' => true,
       
    60         'es_EC' => true, 'es_ES' => true, 'es_GT' => true, 'es_HN' => true, 'es_MX' => true,
       
    61         'es_NI' => true, 'es_PA' => true, 'es_PE' => true, 'es_PR' => true, 'es_PY' => true,
       
    62         'es_SV' => true, 'es_US' => true, 'es_UY' => true, 'es_VE' => true, 'es'    => true,
       
    63         'et_EE' => true, 'et'    => true, 'eu_ES' => true, 'eu'    => true, 'fa_AF' => true,
       
    64         'fa_IR' => true, 'fa'    => true, 'fi_FI' => true, 'fi'    => true, 'fil_PH'=> true,
       
    65         'fil'   => true, 'fo_FO' => true, 'fo'    => true, 'fr_BE' => true, 'fr_CA' => true,
       
    66         'fr_CH' => true, 'fr_FR' => true, 'fr_LU' => true, 'fr_MC' => true, 'fr_SN' => true,
       
    67         'fr'    => true, 'fur_IT'=> true, 'fur'   => true, 'ga_IE' => true, 'ga'    => true,
       
    68         'gaa_GH'=> true, 'gaa'   => true, 'gez_ER'=> true, 'gez_ET'=> true, 'gez'   => true,
       
    69         'gl_ES' => true, 'gl'    => true, 'gsw_CH'=> true, 'gsw'   => true, 'gu_IN' => true,
       
    70         'gu'    => true, 'gv_GB' => true, 'gv'    => true, 'ha_GH' => true, 'ha_NE' => true,
       
    71         'ha_NG' => true, 'ha_SD' => true, 'ha'    => true, 'haw_US'=> true, 'haw'   => true,
       
    72         'he_IL' => true, 'he'    => true, 'hi_IN' => true, 'hi'    => true, 'hr_HR' => true,
       
    73         'hr'    => true, 'hu_HU' => true, 'hu'    => true, 'hy_AM' => true, 'hy'    => true,
       
    74         'ia'    => true, 'id_ID' => true, 'id'    => true, 'ig_NG' => true, 'ig'    => true,
       
    75         'ii_CN' => true, 'ii'    => true, 'in'    => true, 'is_IS' => true, 'is'    => true,
       
    76         'it_CH' => true, 'it_IT' => true, 'it'    => true, 'iu'    => true, 'iw'    => true,
       
    77         'ja_JP' => true, 'ja'    => true, 'ka_GE' => true, 'ka'    => true, 'kaj_NG'=> true,
       
    78         'kaj'   => true, 'kam_KE'=> true, 'kam'   => true, 'kcg_NG'=> true, 'kcg'   => true,
       
    79         'kfo_CI'=> true, 'kfo'   => true, 'kk_KZ' => true, 'kk'    => true, 'kl_GL' => true,
       
    80         'kl'    => true, 'km_KH' => true, 'km'    => true, 'kn_IN' => true, 'kn'    => true,
       
    81         'ko_KR' => true, 'ko'    => true, 'kok_IN'=> true, 'kok'   => true, 'kpe_GN'=> true,
       
    82         'kpe_LR'=> true, 'kpe'   => true, 'ku_IQ' => true, 'ku_IR' => true, 'ku_SY' => true,
       
    83         'ku_TR' => true, 'ku'    => true, 'kw_GB' => true, 'kw'    => true, 'ky_KG' => true,
       
    84         'ky'    => true, 'ln_CD' => true, 'ln_CG' => true, 'ln'    => true, 'lo_LA' => true,
       
    85         'lo'    => true, 'lt_LT' => true, 'lt'    => true, 'lv_LV' => true, 'lv'    => true,
       
    86         'mk_MK' => true, 'mk'    => true, 'ml_IN' => true, 'ml'    => true, 'mn_CN' => true,
       
    87         'mn_MN' => true, 'mn'    => true, 'mo'    => true, 'mr_IN' => true, 'mr'    => true,
       
    88         'ms_BN' => true, 'ms_MY' => true, 'ms'    => true, 'mt_MT' => true, 'mt'    => true,
       
    89         'my_MM' => true, 'my'    => true, 'nb_NO' => true, 'nb'    => true, 'nds_DE'=> true,
       
    90         'nds'   => true, 'ne_IN' => true, 'ne_NP' => true, 'ne'    => true, 'nl_BE' => true,
       
    91         'nl_NL' => true, 'nl'    => true, 'nn_NO' => true, 'nn'    => true, 'no'    => true,
       
    92         'nr_ZA' => true, 'nr'    => true, 'nso_ZA'=> true, 'nso'   => true, 'ny_MW' => true,
       
    93         'ny'    => true, 'oc_FR' => true, 'oc'    => true, 'om_ET' => true, 'om_KE' => true,
       
    94         'om'    => true, 'or_IN' => true, 'or'    => true, 'pa_IN' => true, 'pa_PK' => true,
       
    95         'pa'    => true, 'pl_PL' => true, 'pl'    => true, 'ps_AF' => true, 'ps'    => true,
       
    96         'pt_BR' => true, 'pt_PT' => true, 'pt'    => true, 'ro_MD' => true, 'ro_RO' => true,
       
    97         'ro'    => true, 'ru_RU' => true, 'ru_UA' => true, 'ru'    => true, 'rw_RW' => true,
       
    98         'rw'    => true, 'sa_IN' => true, 'sa'    => true, 'se_FI' => true, 'se_NO' => true,
       
    99         'se'    => true, 'sh_BA' => true, 'sh_CS' => true, 'sh_YU' => true, 'sh'    => true,
       
   100         'si_LK' => true, 'si'    => true, 'sid_ET'=> true, 'sid'   => true, 'sk_SK' => true,
       
   101         'sk'    => true, 'sl_SI' => true, 'sl'    => true, 'so_DJ' => true, 'so_ET' => true,
       
   102         'so_KE' => true, 'so_SO' => true, 'so'    => true, 'sq_AL' => true, 'sq'    => true,
       
   103         'sr_BA' => true, 'sr_CS' => true, 'sr_ME' => true, 'sr_RS' => true, 'sr_YU' => true,
       
   104         'sr'    => true, 'ss_SZ' => true, 'ss_ZA' => true, 'ss'    => true, 'st_LS' => true,
       
   105         'st_ZA' => true, 'st'    => true, 'sv_FI' => true, 'sv_SE' => true, 'sv'    => true,
       
   106         'sw_KE' => true, 'sw_TZ' => true, 'sw'    => true, 'syr_SY'=> true, 'syr'   => true,
       
   107         'ta_IN' => true, 'ta'    => true, 'te_IN' => true, 'te'    => true, 'tg_TJ' => true,
       
   108         'tg'    => true, 'th_TH' => true, 'th'    => true, 'ti_ER' => true, 'ti_ET' => true,
       
   109         'ti'    => true, 'tig_ER'=> true, 'tig'   => true, 'tl'    => true, 'tn_ZA' => true,
       
   110         'tn'    => true, 'to_TO' => true, 'to'    => true, 'tr_TR' => true, 'tr'    => true,
       
   111         'trv_TW'=> true, 'trv'   => true, 'ts_ZA' => true, 'ts'    => true, 'tt_RU' => true,
       
   112         'tt'    => true, 'ug_CN' => true, 'ug'    => true, 'uk_UA' => true, 'uk'    => true,
       
   113         'ur_IN' => true, 'ur_PK' => true, 'ur'    => true, 'uz_AF' => true, 'uz_UZ' => true,
       
   114         'uz'    => true, 've_ZA' => true, 've'    => true, 'vi_VN' => true, 'vi'    => true,
       
   115         'wal_ET'=> true, 'wal'   => true, 'wo_SN' => true, 'wo'    => true, 'xh_ZA' => true,
       
   116         'xh'    => true, 'yo_NG' => true, 'yo'    => true, 'zh_CN' => true, 'zh_HK' => true,
       
   117         'zh_MO' => true, 'zh_SG' => true, 'zh_TW' => true, 'zh'    => true, 'zu_ZA' => true,
       
   118         'zu'    => true
       
   119     );
       
   120 
       
   121     /**
       
   122      * Class wide Locale Constants
       
   123      *
       
   124      * @var array $_territoryData
       
   125      */
       
   126     private static $_territoryData = array(
       
   127         'AD' => 'ca_AD', 'AE' => 'ar_AE', 'AF' => 'fa_AF', 'AG' => 'en_AG', 'AI' => 'en_AI',
       
   128         'AL' => 'sq_AL', 'AM' => 'hy_AM', 'AN' => 'pap_AN', 'AO' => 'pt_AO', 'AQ' => 'und_AQ',
       
   129         'AR' => 'es_AR', 'AS' => 'sm_AS', 'AT' => 'de_AT', 'AU' => 'en_AU', 'AW' => 'nl_AW',
       
   130         'AX' => 'sv_AX', 'AZ' => 'az_Latn_AZ', 'BA' => 'bs_BA', 'BB' => 'en_BB', 'BD' => 'bn_BD',
       
   131         'BE' => 'nl_BE', 'BF' => 'mos_BF', 'BG' => 'bg_BG', 'BH' => 'ar_BH', 'BI' => 'rn_BI',
       
   132         'BJ' => 'fr_BJ', 'BL' => 'fr_BL', 'BM' => 'en_BM', 'BN' => 'ms_BN', 'BO' => 'es_BO',
       
   133         'BR' => 'pt_BR', 'BS' => 'en_BS', 'BT' => 'dz_BT', 'BV' => 'und_BV', 'BW' => 'en_BW',
       
   134         'BY' => 'be_BY', 'BZ' => 'en_BZ', 'CA' => 'en_CA', 'CC' => 'ms_CC', 'CD' => 'sw_CD',
       
   135         'CF' => 'fr_CF', 'CG' => 'fr_CG', 'CH' => 'de_CH', 'CI' => 'fr_CI', 'CK' => 'en_CK',
       
   136         'CL' => 'es_CL', 'CM' => 'fr_CM', 'CN' => 'zh_Hans_CN', 'CO' => 'es_CO', 'CR' => 'es_CR',
       
   137         'CU' => 'es_CU', 'CV' => 'kea_CV', 'CX' => 'en_CX', 'CY' => 'el_CY', 'CZ' => 'cs_CZ',
       
   138         'DE' => 'de_DE', 'DJ' => 'aa_DJ', 'DK' => 'da_DK', 'DM' => 'en_DM', 'DO' => 'es_DO',
       
   139         'DZ' => 'ar_DZ', 'EC' => 'es_EC', 'EE' => 'et_EE', 'EG' => 'ar_EG', 'EH' => 'ar_EH',
       
   140         'ER' => 'ti_ER', 'ES' => 'es_ES', 'ET' => 'en_ET', 'FI' => 'fi_FI', 'FJ' => 'hi_FJ',
       
   141         'FK' => 'en_FK', 'FM' => 'chk_FM', 'FO' => 'fo_FO', 'FR' => 'fr_FR', 'GA' => 'fr_GA',
       
   142         'GB' => 'en_GB', 'GD' => 'en_GD', 'GE' => 'ka_GE', 'GF' => 'fr_GF', 'GG' => 'en_GG',
       
   143         'GH' => 'ak_GH', 'GI' => 'en_GI', 'GL' => 'iu_GL', 'GM' => 'en_GM', 'GN' => 'fr_GN',
       
   144         'GP' => 'fr_GP', 'GQ' => 'fan_GQ', 'GR' => 'el_GR', 'GS' => 'und_GS', 'GT' => 'es_GT',
       
   145         'GU' => 'en_GU', 'GW' => 'pt_GW', 'GY' => 'en_GY', 'HK' => 'zh_Hant_HK', 'HM' => 'und_HM',
       
   146         'HN' => 'es_HN', 'HR' => 'hr_HR', 'HT' => 'ht_HT', 'HU' => 'hu_HU', 'ID' => 'id_ID',
       
   147         'IE' => 'en_IE', 'IL' => 'he_IL', 'IM' => 'en_IM', 'IN' => 'hi_IN', 'IO' => 'und_IO',
       
   148         'IQ' => 'ar_IQ', 'IR' => 'fa_IR', 'IS' => 'is_IS', 'IT' => 'it_IT', 'JE' => 'en_JE',
       
   149         'JM' => 'en_JM', 'JO' => 'ar_JO', 'JP' => 'ja_JP', 'KE' => 'en_KE', 'KG' => 'ky_Cyrl_KG',
       
   150         'KH' => 'km_KH', 'KI' => 'en_KI', 'KM' => 'ar_KM', 'KN' => 'en_KN', 'KP' => 'ko_KP',
       
   151         'KR' => 'ko_KR', 'KW' => 'ar_KW', 'KY' => 'en_KY', 'KZ' => 'ru_KZ', 'LA' => 'lo_LA',
       
   152         'LB' => 'ar_LB', 'LC' => 'en_LC', 'LI' => 'de_LI', 'LK' => 'si_LK', 'LR' => 'en_LR',
       
   153         'LS' => 'st_LS', 'LT' => 'lt_LT', 'LU' => 'fr_LU', 'LV' => 'lv_LV', 'LY' => 'ar_LY',
       
   154         'MA' => 'ar_MA', 'MC' => 'fr_MC', 'MD' => 'ro_MD', 'ME' => 'sr_Latn_ME', 'MF' => 'fr_MF',
       
   155         'MG' => 'mg_MG', 'MH' => 'mh_MH', 'MK' => 'mk_MK', 'ML' => 'bm_ML', 'MM' => 'my_MM',
       
   156         'MN' => 'mn_Cyrl_MN', 'MO' => 'zh_Hant_MO', 'MP' => 'en_MP', 'MQ' => 'fr_MQ', 'MR' => 'ar_MR',
       
   157         'MS' => 'en_MS', 'MT' => 'mt_MT', 'MU' => 'mfe_MU', 'MV' => 'dv_MV', 'MW' => 'ny_MW',
       
   158         'MX' => 'es_MX', 'MY' => 'ms_MY', 'MZ' => 'pt_MZ', 'NA' => 'kj_NA', 'NC' => 'fr_NC',
       
   159         'NE' => 'ha_Latn_NE', 'NF' => 'en_NF', 'NG' => 'en_NG', 'NI' => 'es_NI', 'NL' => 'nl_NL',
       
   160         'NO' => 'nb_NO', 'NP' => 'ne_NP', 'NR' => 'en_NR', 'NU' => 'niu_NU', 'NZ' => 'en_NZ',
       
   161         'OM' => 'ar_OM', 'PA' => 'es_PA', 'PE' => 'es_PE', 'PF' => 'fr_PF', 'PG' => 'tpi_PG',
       
   162         'PH' => 'fil_PH', 'PK' => 'ur_PK', 'PL' => 'pl_PL', 'PM' => 'fr_PM', 'PN' => 'en_PN',
       
   163         'PR' => 'es_PR', 'PS' => 'ar_PS', 'PT' => 'pt_PT', 'PW' => 'pau_PW', 'PY' => 'gn_PY',
       
   164         'QA' => 'ar_QA', 'RE' => 'fr_RE', 'RO' => 'ro_RO', 'RS' => 'sr_Cyrl_RS', 'RU' => 'ru_RU',
       
   165         'RW' => 'rw_RW', 'SA' => 'ar_SA', 'SB' => 'en_SB', 'SC' => 'crs_SC', 'SD' => 'ar_SD',
       
   166         'SE' => 'sv_SE', 'SG' => 'en_SG', 'SH' => 'en_SH', 'SI' => 'sl_SI', 'SJ' => 'nb_SJ',
       
   167         'SK' => 'sk_SK', 'SL' => 'kri_SL', 'SM' => 'it_SM', 'SN' => 'fr_SN', 'SO' => 'sw_SO',
       
   168         'SR' => 'srn_SR', 'ST' => 'pt_ST', 'SV' => 'es_SV', 'SY' => 'ar_SY', 'SZ' => 'en_SZ',
       
   169         'TC' => 'en_TC', 'TD' => 'fr_TD', 'TF' => 'und_TF', 'TG' => 'fr_TG', 'TH' => 'th_TH',
       
   170         'TJ' => 'tg_Cyrl_TJ', 'TK' => 'tkl_TK', 'TL' => 'pt_TL', 'TM' => 'tk_TM', 'TN' => 'ar_TN',
       
   171         'TO' => 'to_TO', 'TR' => 'tr_TR', 'TT' => 'en_TT', 'TV' => 'tvl_TV', 'TW' => 'zh_Hant_TW',
       
   172         'TZ' => 'sw_TZ', 'UA' => 'uk_UA', 'UG' => 'sw_UG', 'UM' => 'en_UM', 'US' => 'en_US',
       
   173         'UY' => 'es_UY', 'UZ' => 'uz_Cyrl_UZ', 'VA' => 'it_VA', 'VC' => 'en_VC', 'VE' => 'es_VE',
       
   174         'VG' => 'en_VG', 'VI' => 'en_VI', 'VU' => 'bi_VU', 'WF' => 'wls_WF', 'WS' => 'sm_WS',
       
   175         'YE' => 'ar_YE', 'YT' => 'swb_YT', 'ZA' => 'en_ZA', 'ZM' => 'en_ZM', 'ZW' => 'sn_ZW'
       
   176     );
       
   177 
       
   178     /**
       
   179      * Autosearch constants
       
   180      */
       
   181     const BROWSER     = 'browser';
       
   182     const ENVIRONMENT = 'environment';
       
   183     const ZFDEFAULT   = 'default';
       
   184 
       
   185     /**
       
   186      * Defines if old behaviour should be supported
       
   187      * Old behaviour throws notices and will be deleted in future releases
       
   188      *
       
   189      * @var boolean
       
   190      */
       
   191     public static $compatibilityMode = false;
       
   192 
       
   193     /**
       
   194      * Internal variable
       
   195      *
       
   196      * @var boolean
       
   197      */
       
   198     private static $_breakChain = false;
       
   199 
       
   200     /**
       
   201      * Actual set locale
       
   202      *
       
   203      * @var string Locale
       
   204      */
       
   205     protected $_locale;
       
   206 
       
   207     /**
       
   208      * Automatic detected locale
       
   209      *
       
   210      * @var string Locales
       
   211      */
       
   212     protected static $_auto;
       
   213 
       
   214     /**
       
   215      * Browser detected locale
       
   216      *
       
   217      * @var string Locales
       
   218      */
       
   219     protected static $_browser;
       
   220 
       
   221     /**
       
   222      * Environment detected locale
       
   223      *
       
   224      * @var string Locales
       
   225      */
       
   226     protected static $_environment;
       
   227 
       
   228     /**
       
   229      * Default locale
       
   230      *
       
   231      * @var string Locales
       
   232      */
       
   233     protected static $_default = array('en' => true);
       
   234 
       
   235     /**
       
   236      * Generates a locale object
       
   237      * If no locale is given a automatic search is done
       
   238      * Then the most probable locale will be automatically set
       
   239      * Search order is
       
   240      *  1. Given Locale
       
   241      *  2. HTTP Client
       
   242      *  3. Server Environment
       
   243      *  4. Framework Standard
       
   244      *
       
   245      * @param  string|Zend_Locale $locale (Optional) Locale for parsing input
       
   246      * @throws Zend_Locale_Exception When autodetection has been failed
       
   247      */
       
   248     public function __construct($locale = null)
       
   249     {
       
   250         $this->setLocale($locale);
       
   251     }
       
   252 
       
   253     /**
       
   254      * Serialization Interface
       
   255      *
       
   256      * @return string
       
   257      */
       
   258     public function serialize()
       
   259     {
       
   260         return serialize($this);
       
   261     }
       
   262 
       
   263     /**
       
   264      * Returns a string representation of the object
       
   265      *
       
   266      * @return string
       
   267      */
       
   268     public function toString()
       
   269     {
       
   270         return (string) $this->_locale;
       
   271     }
       
   272 
       
   273     /**
       
   274      * Returns a string representation of the object
       
   275      * Alias for toString
       
   276      *
       
   277      * @return string
       
   278      */
       
   279     public function __toString()
       
   280     {
       
   281         return $this->toString();
       
   282     }
       
   283 
       
   284     /**
       
   285      * Return the default locale
       
   286      *
       
   287      * @return array Returns an array of all locale string
       
   288      */
       
   289     public static function getDefault()
       
   290     {
       
   291         if ((self::$compatibilityMode === true) or (func_num_args() > 0)) {
       
   292             if (!self::$_breakChain) {
       
   293                 self::$_breakChain = true;
       
   294                 trigger_error('You are running Zend_Locale in compatibility mode... please migrate your scripts', E_USER_NOTICE);
       
   295                 $params = func_get_args();
       
   296                 $param = null;
       
   297                 if (isset($params[0])) {
       
   298                     $param = $params[0];
       
   299                 }
       
   300                 return self::getOrder($param);
       
   301             }
       
   302 
       
   303             self::$_breakChain = false;
       
   304         }
       
   305 
       
   306         return self::$_default;
       
   307     }
       
   308 
       
   309     /**
       
   310      * Sets a new default locale which will be used when no locale can be detected
       
   311      * If provided you can set a quality between 0 and 1 (or 2 and 100)
       
   312      * which represents the percent of quality the browser
       
   313      * requested within HTTP
       
   314      *
       
   315      * @param  string|Zend_Locale $locale  Locale to set
       
   316      * @param  float              $quality The quality to set from 0 to 1
       
   317      * @throws Zend_Locale_Exception When a autolocale was given
       
   318      * @throws Zend_Locale_Exception When a unknown locale was given
       
   319      * @return void
       
   320      */
       
   321     public static function setDefault($locale, $quality = 1)
       
   322     {
       
   323         if (($locale === 'auto') or ($locale === 'root') or ($locale === 'default') or
       
   324             ($locale === 'environment') or ($locale === 'browser')) {
       
   325             require_once 'Zend/Locale/Exception.php';
       
   326             throw new Zend_Locale_Exception('Only full qualified locales can be used as default!');
       
   327         }
       
   328 
       
   329         if (($quality < 0.1) or ($quality > 100)) {
       
   330             require_once 'Zend/Locale/Exception.php';
       
   331             throw new Zend_Locale_Exception("Quality must be between 0.1 and 100");
       
   332         }
       
   333 
       
   334         if ($quality > 1) {
       
   335             $quality /= 100;
       
   336         }
       
   337 
       
   338         $locale = self::_prepareLocale($locale);
       
   339         if (isset(self::$_localeData[(string) $locale]) === true) {
       
   340             self::$_default = array((string) $locale => $quality);
       
   341         } else {
       
   342             $elocale = explode('_', (string) $locale);
       
   343             if (isset(self::$_localeData[$elocale[0]]) === true) {
       
   344                 self::$_default = array($elocale[0] => $quality);
       
   345             } else {
       
   346                 require_once 'Zend/Locale/Exception.php';
       
   347                 throw new Zend_Locale_Exception("Unknown locale '" . (string) $locale . "' can not be set as default!");
       
   348             }
       
   349         }
       
   350 
       
   351         self::$_auto = self::getBrowser() + self::getEnvironment() + self::getDefault();
       
   352     }
       
   353 
       
   354     /**
       
   355      * Expects the Systems standard locale
       
   356      *
       
   357      * For Windows:
       
   358      * f.e.: LC_COLLATE=C;LC_CTYPE=German_Austria.1252;LC_MONETARY=C
       
   359      * would be recognised as de_AT
       
   360      *
       
   361      * @return array
       
   362      */
       
   363     public static function getEnvironment()
       
   364     {
       
   365         if (self::$_environment !== null) {
       
   366             return self::$_environment;
       
   367         }
       
   368 
       
   369         require_once 'Zend/Locale/Data/Translation.php';
       
   370 
       
   371         $language      = setlocale(LC_ALL, 0);
       
   372         $languages     = explode(';', $language);
       
   373         $languagearray = array();
       
   374 
       
   375         foreach ($languages as $locale) {
       
   376             if (strpos($locale, '=') !== false) {
       
   377                 $language = substr($locale, strpos($locale, '='));
       
   378                 $language = substr($language, 1);
       
   379             }
       
   380 
       
   381             if ($language !== 'C') {
       
   382                 if (strpos($language, '.') !== false) {
       
   383                     $language = substr($language, 0, strpos($language, '.'));
       
   384                 } else if (strpos($language, '@') !== false) {
       
   385                     $language = substr($language, 0, strpos($language, '@'));
       
   386                 }
       
   387 
       
   388                 $language = str_ireplace(
       
   389                     array_keys(Zend_Locale_Data_Translation::$languageTranslation),
       
   390                     array_values(Zend_Locale_Data_Translation::$languageTranslation),
       
   391                     (string) $language
       
   392                 );
       
   393 
       
   394                 $language = str_ireplace(
       
   395                     array_keys(Zend_Locale_Data_Translation::$regionTranslation),
       
   396                     array_values(Zend_Locale_Data_Translation::$regionTranslation),
       
   397                     $language
       
   398                 );
       
   399 
       
   400                 if (isset(self::$_localeData[$language]) === true) {
       
   401                     $languagearray[$language] = 1;
       
   402                     if (strpos($language, '_') !== false) {
       
   403                         $languagearray[substr($language, 0, strpos($language, '_'))] = 1;
       
   404                     }
       
   405                 }
       
   406             }
       
   407         }
       
   408 
       
   409         self::$_environment = $languagearray;
       
   410         return $languagearray;
       
   411     }
       
   412 
       
   413     /**
       
   414      * Return an array of all accepted languages of the client
       
   415      * Expects RFC compilant Header !!
       
   416      *
       
   417      * The notation can be :
       
   418      * de,en-UK-US;q=0.5,fr-FR;q=0.2
       
   419      *
       
   420      * @return array - list of accepted languages including quality
       
   421      */
       
   422     public static function getBrowser()
       
   423     {
       
   424         if (self::$_browser !== null) {
       
   425             return self::$_browser;
       
   426         }
       
   427 
       
   428         $httplanguages = getenv('HTTP_ACCEPT_LANGUAGE');
       
   429         if (empty($httplanguages) && array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
       
   430             $httplanguages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
       
   431         }
       
   432 
       
   433         $languages     = array();
       
   434         if (empty($httplanguages)) {
       
   435             return $languages;
       
   436         }
       
   437 
       
   438         $accepted = preg_split('/,\s*/', $httplanguages);
       
   439 
       
   440         foreach ($accepted as $accept) {
       
   441             $match  = null;
       
   442             $result = preg_match('/^([a-z]{1,8}(?:[-_][a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i',
       
   443                                  $accept, $match);
       
   444 
       
   445             if ($result < 1) {
       
   446                 continue;
       
   447             }
       
   448 
       
   449             if (isset($match[2]) === true) {
       
   450                 $quality = (float) $match[2];
       
   451             } else {
       
   452                 $quality = 1.0;
       
   453             }
       
   454 
       
   455             $countrys = explode('-', $match[1]);
       
   456             $region   = array_shift($countrys);
       
   457 
       
   458             $country2 = explode('_', $region);
       
   459             $region   = array_shift($country2);
       
   460 
       
   461             foreach ($countrys as $country) {
       
   462                 $languages[$region . '_' . strtoupper($country)] = $quality;
       
   463             }
       
   464 
       
   465             foreach ($country2 as $country) {
       
   466                 $languages[$region . '_' . strtoupper($country)] = $quality;
       
   467             }
       
   468 
       
   469             if ((isset($languages[$region]) === false) || ($languages[$region] < $quality)) {
       
   470                 $languages[$region] = $quality;
       
   471             }
       
   472         }
       
   473 
       
   474         self::$_browser = $languages;
       
   475         return $languages;
       
   476     }
       
   477 
       
   478     /**
       
   479      * Sets a new locale
       
   480      *
       
   481      * @param  string|Zend_Locale $locale (Optional) New locale to set
       
   482      * @return void
       
   483      */
       
   484     public function setLocale($locale = null)
       
   485     {
       
   486         $locale = self::_prepareLocale($locale);
       
   487 
       
   488         if (isset(self::$_localeData[(string) $locale]) === false) {
       
   489             $region = substr((string) $locale, 0, 3);
       
   490             if (isset($region[2]) === true) {
       
   491                 if (($region[2] === '_') or ($region[2] === '-')) {
       
   492                     $region = substr($region, 0, 2);
       
   493                 }
       
   494             }
       
   495 
       
   496             if (isset(self::$_localeData[(string) $region]) === true) {
       
   497                 $this->_locale = $region;
       
   498             } else {
       
   499                 $this->_locale = 'root';
       
   500             }
       
   501         } else {
       
   502             $this->_locale = $locale;
       
   503         }
       
   504     }
       
   505 
       
   506     /**
       
   507      * Returns the language part of the locale
       
   508      *
       
   509      * @return string
       
   510      */
       
   511     public function getLanguage()
       
   512     {
       
   513         $locale = explode('_', $this->_locale);
       
   514         return $locale[0];
       
   515     }
       
   516 
       
   517     /**
       
   518      * Returns the region part of the locale if available
       
   519      *
       
   520      * @return string|false - Regionstring
       
   521      */
       
   522     public function getRegion()
       
   523     {
       
   524         $locale = explode('_', $this->_locale);
       
   525         if (isset($locale[1]) === true) {
       
   526             return $locale[1];
       
   527         }
       
   528 
       
   529         return false;
       
   530     }
       
   531 
       
   532     /**
       
   533      * Return the accepted charset of the client
       
   534      *
       
   535      * @return string
       
   536      */
       
   537     public static function getHttpCharset()
       
   538     {
       
   539         $httpcharsets = getenv('HTTP_ACCEPT_CHARSET');
       
   540 
       
   541         $charsets = array();
       
   542         if ($httpcharsets === false) {
       
   543             return $charsets;
       
   544         }
       
   545 
       
   546         $accepted = preg_split('/,\s*/', $httpcharsets);
       
   547         foreach ($accepted as $accept) {
       
   548             if (empty($accept) === true) {
       
   549                 continue;
       
   550             }
       
   551 
       
   552             if (strpos($accept, ';') !== false) {
       
   553                 $quality        = (float) substr($accept, (strpos($accept, '=') + 1));
       
   554                 $pos            = substr($accept, 0, strpos($accept, ';'));
       
   555                 $charsets[$pos] = $quality;
       
   556             } else {
       
   557                 $quality           = 1.0;
       
   558                 $charsets[$accept] = $quality;
       
   559             }
       
   560         }
       
   561 
       
   562         return $charsets;
       
   563     }
       
   564 
       
   565     /**
       
   566      * Returns true if both locales are equal
       
   567      *
       
   568      * @param  Zend_Locale $object Locale to check for equality
       
   569      * @return boolean
       
   570      */
       
   571     public function equals(Zend_Locale $object)
       
   572     {
       
   573         if ($object->toString() === $this->toString()) {
       
   574             return true;
       
   575         }
       
   576 
       
   577         return false;
       
   578     }
       
   579 
       
   580     /**
       
   581      * Returns localized informations as array, supported are several
       
   582      * types of informations.
       
   583      * For detailed information about the types look into the documentation
       
   584      *
       
   585      * @param  string             $path   (Optional) Type of information to return
       
   586      * @param  string|Zend_Locale $locale (Optional) Locale|Language for which this informations should be returned
       
   587      * @param  string             $value  (Optional) Value for detail list
       
   588      * @return array Array with the wished information in the given language
       
   589      */
       
   590     public static function getTranslationList($path = null, $locale = null, $value = null)
       
   591     {
       
   592         require_once 'Zend/Locale/Data.php';
       
   593         $locale = self::findLocale($locale);
       
   594         $result = Zend_Locale_Data::getList($locale, $path, $value);
       
   595         if (empty($result) === true) {
       
   596             return false;
       
   597         }
       
   598 
       
   599         return $result;
       
   600     }
       
   601 
       
   602     /**
       
   603      * Returns an array with the name of all languages translated to the given language
       
   604      *
       
   605      * @param  string|Zend_Locale $locale (Optional) Locale for language translation
       
   606      * @return array
       
   607      * @deprecated
       
   608      */
       
   609     public static function getLanguageTranslationList($locale = null)
       
   610     {
       
   611         trigger_error("The method getLanguageTranslationList is deprecated. Use getTranslationList('language', $locale) instead", E_USER_NOTICE);
       
   612         return self::getTranslationList('language', $locale);
       
   613     }
       
   614 
       
   615     /**
       
   616      * Returns an array with the name of all scripts translated to the given language
       
   617      *
       
   618      * @param  string|Zend_Locale $locale (Optional) Locale for script translation
       
   619      * @return array
       
   620      * @deprecated
       
   621      */
       
   622     public static function getScriptTranslationList($locale = null)
       
   623     {
       
   624         trigger_error("The method getScriptTranslationList is deprecated. Use getTranslationList('script', $locale) instead", E_USER_NOTICE);
       
   625         return self::getTranslationList('script', $locale);
       
   626     }
       
   627 
       
   628     /**
       
   629      * Returns an array with the name of all countries translated to the given language
       
   630      *
       
   631      * @param  string|Zend_Locale $locale (Optional) Locale for country translation
       
   632      * @return array
       
   633      * @deprecated
       
   634      */
       
   635     public static function getCountryTranslationList($locale = null)
       
   636     {
       
   637         trigger_error("The method getCountryTranslationList is deprecated. Use getTranslationList('territory', $locale, 2) instead", E_USER_NOTICE);
       
   638         return self::getTranslationList('territory', $locale, 2);
       
   639     }
       
   640 
       
   641     /**
       
   642      * Returns an array with the name of all territories translated to the given language
       
   643      * All territories contains other countries.
       
   644      *
       
   645      * @param  string|Zend_Locale $locale (Optional) Locale for territory translation
       
   646      * @return array
       
   647      * @deprecated
       
   648      */
       
   649     public static function getTerritoryTranslationList($locale = null)
       
   650     {
       
   651         trigger_error("The method getTerritoryTranslationList is deprecated. Use getTranslationList('territory', $locale, 1) instead", E_USER_NOTICE);
       
   652         return self::getTranslationList('territory', $locale, 1);
       
   653     }
       
   654 
       
   655     /**
       
   656      * Returns a localized information string, supported are several types of informations.
       
   657      * For detailed information about the types look into the documentation
       
   658      *
       
   659      * @param  string             $value  Name to get detailed information about
       
   660      * @param  string             $path   (Optional) Type of information to return
       
   661      * @param  string|Zend_Locale $locale (Optional) Locale|Language for which this informations should be returned
       
   662      * @return string|false The wished information in the given language
       
   663      */
       
   664     public static function getTranslation($value = null, $path = null, $locale = null)
       
   665     {
       
   666         require_once 'Zend/Locale/Data.php';
       
   667         $locale = self::findLocale($locale);
       
   668         $result = Zend_Locale_Data::getContent($locale, $path, $value);
       
   669         if (empty($result) === true) {
       
   670             return false;
       
   671         }
       
   672 
       
   673         return $result;
       
   674     }
       
   675 
       
   676     /**
       
   677      * Returns the localized language name
       
   678      *
       
   679      * @param  string $value  Name to get detailed information about
       
   680      * @param  string $locale (Optional) Locale for language translation
       
   681      * @return array
       
   682      * @deprecated
       
   683      */
       
   684     public static function getLanguageTranslation($value, $locale = null)
       
   685     {
       
   686         trigger_error("The method getLanguageTranslation is deprecated. Use getTranslation($value, 'language', $locale) instead", E_USER_NOTICE);
       
   687         return self::getTranslation($value, 'language', $locale);
       
   688     }
       
   689 
       
   690     /**
       
   691      * Returns the localized script name
       
   692      *
       
   693      * @param  string $value  Name to get detailed information about
       
   694      * @param  string $locale (Optional) locale for script translation
       
   695      * @return array
       
   696      * @deprecated
       
   697      */
       
   698     public static function getScriptTranslation($value, $locale = null)
       
   699     {
       
   700         trigger_error("The method getScriptTranslation is deprecated. Use getTranslation($value, 'script', $locale) instead", E_USER_NOTICE);
       
   701         return self::getTranslation($value, 'script', $locale);
       
   702     }
       
   703 
       
   704     /**
       
   705      * Returns the localized country name
       
   706      *
       
   707      * @param  string             $value  Name to get detailed information about
       
   708      * @param  string|Zend_Locale $locale (Optional) Locale for country translation
       
   709      * @return array
       
   710      * @deprecated
       
   711      */
       
   712     public static function getCountryTranslation($value, $locale = null)
       
   713     {
       
   714         trigger_error("The method getCountryTranslation is deprecated. Use getTranslation($value, 'country', $locale) instead", E_USER_NOTICE);
       
   715         return self::getTranslation($value, 'country', $locale);
       
   716     }
       
   717 
       
   718     /**
       
   719      * Returns the localized territory name
       
   720      * All territories contains other countries.
       
   721      *
       
   722      * @param  string             $value  Name to get detailed information about
       
   723      * @param  string|Zend_Locale $locale (Optional) Locale for territory translation
       
   724      * @return array
       
   725      * @deprecated
       
   726      */
       
   727     public static function getTerritoryTranslation($value, $locale = null)
       
   728     {
       
   729         trigger_error("The method getTerritoryTranslation is deprecated. Use getTranslation($value, 'territory', $locale) instead", E_USER_NOTICE);
       
   730         return self::getTranslation($value, 'territory', $locale);
       
   731     }
       
   732 
       
   733     /**
       
   734      * Returns an array with translated yes strings
       
   735      *
       
   736      * @param  string|Zend_Locale $locale (Optional) Locale for language translation (defaults to $this locale)
       
   737      * @return array
       
   738      */
       
   739     public static function getQuestion($locale = null)
       
   740     {
       
   741         require_once 'Zend/Locale/Data.php';
       
   742         $locale            = self::findLocale($locale);
       
   743         $quest             = Zend_Locale_Data::getList($locale, 'question');
       
   744         $yes               = explode(':', $quest['yes']);
       
   745         $no                = explode(':', $quest['no']);
       
   746         $quest['yes']      = $yes[0];
       
   747         $quest['yesarray'] = $yes;
       
   748         $quest['no']       = $no[0];
       
   749         $quest['noarray']  = $no;
       
   750         $quest['yesexpr']  = self::_prepareQuestionString($yes);
       
   751         $quest['noexpr']   = self::_prepareQuestionString($no);
       
   752 
       
   753         return $quest;
       
   754     }
       
   755 
       
   756     /**
       
   757      * Internal function for preparing the returned question regex string
       
   758      *
       
   759      * @param  string $input Regex to parse
       
   760      * @return string
       
   761      */
       
   762     private static function _prepareQuestionString($input)
       
   763     {
       
   764         $regex = '';
       
   765         if (is_array($input) === true) {
       
   766             $regex = '^';
       
   767             $start = true;
       
   768             foreach ($input as $row) {
       
   769                 if ($start === false) {
       
   770                     $regex .= '|';
       
   771                 }
       
   772 
       
   773                 $start  = false;
       
   774                 $regex .= '(';
       
   775                 $one    = null;
       
   776                 if (strlen($row) > 2) {
       
   777                     $one = true;
       
   778                 }
       
   779 
       
   780                 foreach (str_split($row, 1) as $char) {
       
   781                     $regex .= '[' . $char;
       
   782                     $regex .= strtoupper($char) . ']';
       
   783                     if ($one === true) {
       
   784                         $one    = false;
       
   785                         $regex .= '(';
       
   786                     }
       
   787                 }
       
   788 
       
   789                 if ($one === false) {
       
   790                     $regex .= ')';
       
   791                 }
       
   792 
       
   793                 $regex .= '?)';
       
   794             }
       
   795         }
       
   796 
       
   797         return $regex;
       
   798     }
       
   799 
       
   800     /**
       
   801      * Checks if a locale identifier is a real locale or not
       
   802      * Examples:
       
   803      * "en_XX" refers to "en", which returns true
       
   804      * "XX_yy" refers to "root", which returns false
       
   805      *
       
   806      * @param  string|Zend_Locale $locale     Locale to check for
       
   807      * @param  boolean            $strict     (Optional) If true, no rerouting will be done when checking
       
   808      * @param  boolean            $compatible (DEPRECATED) Only for internal usage, brakes compatibility mode
       
   809      * @return boolean If the locale is known dependend on the settings
       
   810      */
       
   811     public static function isLocale($locale, $strict = false, $compatible = true)
       
   812     {
       
   813         if (($locale instanceof Zend_Locale)
       
   814             || (is_string($locale) && array_key_exists($locale, self::$_localeData))
       
   815         ) {
       
   816             return true;
       
   817         }
       
   818 
       
   819         if (($locale === null) || (!is_string($locale) and !is_array($locale))) {
       
   820             return false;
       
   821         }
       
   822 
       
   823         try {
       
   824             $locale = self::_prepareLocale($locale, $strict);
       
   825         } catch (Zend_Locale_Exception $e) {
       
   826             return false;
       
   827         }
       
   828 
       
   829         if (($compatible === true) and (self::$compatibilityMode === true)) {
       
   830             trigger_error('You are running Zend_Locale in compatibility mode... please migrate your scripts', E_USER_NOTICE);
       
   831             if (isset(self::$_localeData[$locale]) === true) {
       
   832                 return $locale;
       
   833             } else if (!$strict) {
       
   834                 $locale = explode('_', $locale);
       
   835                 if (isset(self::$_localeData[$locale[0]]) === true) {
       
   836                     return $locale[0];
       
   837                 }
       
   838             }
       
   839         } else {
       
   840             if (isset(self::$_localeData[$locale]) === true) {
       
   841                 return true;
       
   842             } else if (!$strict) {
       
   843                 $locale = explode('_', $locale);
       
   844                 if (isset(self::$_localeData[$locale[0]]) === true) {
       
   845                     return true;
       
   846                 }
       
   847             }
       
   848         }
       
   849 
       
   850         return false;
       
   851     }
       
   852 
       
   853     /**
       
   854      * Finds the proper locale based on the input
       
   855      * Checks if it exists, degrades it when necessary
       
   856      * Detects registry locale and when all fails tries to detect a automatic locale
       
   857      * Returns the found locale as string
       
   858      *
       
   859      * @param string $locale
       
   860      * @throws Zend_Locale_Exception When the given locale is no locale or the autodetection fails
       
   861      * @return string
       
   862      */
       
   863     public static function findLocale($locale = null)
       
   864     {
       
   865         if ($locale === null) {
       
   866             require_once 'Zend/Registry.php';
       
   867             if (Zend_Registry::isRegistered('Zend_Locale')) {
       
   868                 $locale = Zend_Registry::get('Zend_Locale');
       
   869             }
       
   870         }
       
   871 
       
   872         if ($locale === null) {
       
   873             $locale = new Zend_Locale();
       
   874         }
       
   875 
       
   876         if (!Zend_Locale::isLocale($locale, true, false)) {
       
   877             if (!Zend_Locale::isLocale($locale, false, false)) {
       
   878                 $locale = Zend_Locale::getLocaleToTerritory($locale);
       
   879 
       
   880                 if (empty($locale)) {
       
   881                     require_once 'Zend/Locale/Exception.php';
       
   882                     throw new Zend_Locale_Exception("The locale '$locale' is no known locale");
       
   883                 }
       
   884             } else {
       
   885                 $locale = new Zend_Locale($locale);
       
   886             }
       
   887         }
       
   888 
       
   889         $locale = self::_prepareLocale($locale);
       
   890         return $locale;
       
   891     }
       
   892 
       
   893     /**
       
   894      * Returns the expected locale for a given territory
       
   895      *
       
   896      * @param string $territory Territory for which the locale is being searched
       
   897      * @return string|null Locale string or null when no locale has been found
       
   898      */
       
   899     public static function getLocaleToTerritory($territory)
       
   900     {
       
   901         $territory = strtoupper($territory);
       
   902         if (array_key_exists($territory, self::$_territoryData)) {
       
   903             return self::$_territoryData[$territory];
       
   904         }
       
   905 
       
   906         return null;
       
   907     }
       
   908 
       
   909     /**
       
   910      * Returns a list of all known locales where the locale is the key
       
   911      * Only real locales are returned, the internal locales 'root', 'auto', 'browser'
       
   912      * and 'environment' are suppressed
       
   913      *
       
   914      * @return array List of all Locales
       
   915      */
       
   916     public static function getLocaleList()
       
   917     {
       
   918         $list = self::$_localeData;
       
   919         unset($list['root']);
       
   920         unset($list['auto']);
       
   921         unset($list['browser']);
       
   922         unset($list['environment']);
       
   923         return $list;
       
   924     }
       
   925 
       
   926     /**
       
   927      * Returns the set cache
       
   928      *
       
   929      * @return Zend_Cache_Core The set cache
       
   930      */
       
   931     public static function getCache()
       
   932     {
       
   933         require_once 'Zend/Locale/Data.php';
       
   934         return Zend_Locale_Data::getCache();
       
   935     }
       
   936 
       
   937     /**
       
   938      * Sets a cache
       
   939      *
       
   940      * @param  Zend_Cache_Core $cache Cache to set
       
   941      * @return void
       
   942      */
       
   943     public static function setCache(Zend_Cache_Core $cache)
       
   944     {
       
   945         require_once 'Zend/Locale/Data.php';
       
   946         Zend_Locale_Data::setCache($cache);
       
   947     }
       
   948 
       
   949     /**
       
   950      * Returns true when a cache is set
       
   951      *
       
   952      * @return boolean
       
   953      */
       
   954     public static function hasCache()
       
   955     {
       
   956         require_once 'Zend/Locale/Data.php';
       
   957         return Zend_Locale_Data::hasCache();
       
   958     }
       
   959 
       
   960     /**
       
   961      * Removes any set cache
       
   962      *
       
   963      * @return void
       
   964      */
       
   965     public static function removeCache()
       
   966     {
       
   967         require_once 'Zend/Locale/Data.php';
       
   968         Zend_Locale_Data::removeCache();
       
   969     }
       
   970 
       
   971     /**
       
   972      * Clears all set cache data
       
   973      *
       
   974      * @param string $tag Tag to clear when the default tag name is not used
       
   975      * @return void
       
   976      */
       
   977     public static function clearCache($tag = null)
       
   978     {
       
   979         require_once 'Zend/Locale/Data.php';
       
   980         Zend_Locale_Data::clearCache($tag);
       
   981     }
       
   982 
       
   983     /**
       
   984      * Disables the set cache
       
   985      *
       
   986      * @param  boolean $flag True disables any set cache, default is false
       
   987      * @return void
       
   988      */
       
   989     public static function disableCache($flag)
       
   990     {
       
   991         require_once 'Zend/Locale/Data.php';
       
   992         Zend_Locale_Data::disableCache($flag);
       
   993     }
       
   994 
       
   995     /**
       
   996      * Internal function, returns a single locale on detection
       
   997      *
       
   998      * @param  string|Zend_Locale $locale (Optional) Locale to work on
       
   999      * @param  boolean            $strict (Optional) Strict preparation
       
  1000      * @throws Zend_Locale_Exception When no locale is set which is only possible when the class was wrong extended
       
  1001      * @return string
       
  1002      */
       
  1003     private static function _prepareLocale($locale, $strict = false)
       
  1004     {
       
  1005         if ($locale instanceof Zend_Locale) {
       
  1006             $locale = $locale->toString();
       
  1007         }
       
  1008 
       
  1009         if (is_array($locale)) {
       
  1010             return '';
       
  1011         }
       
  1012 
       
  1013         if (empty(self::$_auto) === true) {
       
  1014             self::$_browser     = self::getBrowser();
       
  1015             self::$_environment = self::getEnvironment();
       
  1016             self::$_breakChain  = true;
       
  1017             self::$_auto        = self::getBrowser() + self::getEnvironment() + self::getDefault();
       
  1018         }
       
  1019 
       
  1020         if (!$strict) {
       
  1021             if ($locale === 'browser') {
       
  1022                 $locale = self::$_browser;
       
  1023             }
       
  1024 
       
  1025             if ($locale === 'environment') {
       
  1026                 $locale = self::$_environment;
       
  1027             }
       
  1028 
       
  1029             if ($locale === 'default') {
       
  1030                 $locale = self::$_default;
       
  1031             }
       
  1032 
       
  1033             if (($locale === 'auto') or ($locale === null)) {
       
  1034                 $locale = self::$_auto;
       
  1035             }
       
  1036 
       
  1037             if (is_array($locale) === true) {
       
  1038                 $locale = key($locale);
       
  1039             }
       
  1040         }
       
  1041 
       
  1042         // This can only happen when someone extends Zend_Locale and erases the default
       
  1043         if ($locale === null) {
       
  1044             require_once 'Zend/Locale/Exception.php';
       
  1045             throw new Zend_Locale_Exception('Autodetection of Locale has been failed!');
       
  1046         }
       
  1047 
       
  1048         if (strpos($locale, '-') !== false) {
       
  1049             $locale = strtr($locale, '-', '_');
       
  1050         }
       
  1051 
       
  1052         $parts = explode('_', $locale);
       
  1053         if (!isset(self::$_localeData[$parts[0]])) {
       
  1054             if ((count($parts) == 1) && array_key_exists($parts[0], self::$_territoryData)) {
       
  1055                 return self::$_territoryData[$parts[0]];
       
  1056             }
       
  1057 
       
  1058             return '';
       
  1059         }
       
  1060 
       
  1061         foreach($parts as $key => $value) {
       
  1062             if ((strlen($value) < 2) || (strlen($value) > 3)) {
       
  1063                 unset($parts[$key]);
       
  1064             }
       
  1065         }
       
  1066 
       
  1067         $locale = implode('_', $parts);
       
  1068         return (string) $locale;
       
  1069     }
       
  1070 
       
  1071     /**
       
  1072      * Search the locale automatically and return all used locales
       
  1073      * ordered by quality
       
  1074      *
       
  1075      * Standard Searchorder is Browser, Environment, Default
       
  1076      *
       
  1077      * @param  string  $searchorder (Optional) Searchorder
       
  1078      * @return array Returns an array of all detected locales
       
  1079      */
       
  1080     public static function getOrder($order = null)
       
  1081     {
       
  1082         switch ($order) {
       
  1083             case self::ENVIRONMENT:
       
  1084                 self::$_breakChain = true;
       
  1085                 $languages         = self::getEnvironment() + self::getBrowser() + self::getDefault();
       
  1086                 break;
       
  1087 
       
  1088             case self::ZFDEFAULT:
       
  1089                 self::$_breakChain = true;
       
  1090                 $languages         = self::getDefault() + self::getEnvironment() + self::getBrowser();
       
  1091                 break;
       
  1092 
       
  1093             default:
       
  1094                 self::$_breakChain = true;
       
  1095                 $languages         = self::getBrowser() + self::getEnvironment() + self::getDefault();
       
  1096                 break;
       
  1097         }
       
  1098 
       
  1099         return $languages;
       
  1100     }
       
  1101 }