2012-04-09 12 views
11

En Java, puede llamar al Locale.getAvailableLocales() para obtener la lista de configuraciones regionales disponibles.¿Hay alguna forma de obtener la lista de configuraciones regionales disponibles en PHP?

Esperaba un equivalente de la clase PHP Locale, pero no pude encontrar uno.

¿Hay alguna forma de obtener una matriz de todas las configuraciones regionales válidas?

+0

Ver también: [ Obtener la configuración regional predeterminada para el lenguaje en PHP] (http://stackoverflow.com/q/8568762/367456) y [Lista de collaters disponibles en PHP?] (Http://stackoverflow.com/q/9422553/367456) – hakre

Respuesta

5

Parte de la confusión aquí es que PHP tiene dos conceptos llamados "locale" que están bastante separados.

El primero es el anterior, que básicamente solo utiliza las características de configuración regional C. Eso es lo que hay detrás de setlocale y el soporte de configuración regional en algunas de las funciones de PHP (como money_format, por ejemplo). Esto es lo que están hablando otras respuestas que mencionan ejecutar locale -a en la línea de comando y usar setlocale.

La clase Locale de PHP y la other related functionality from the intl extension es más reciente, y no funciona de la misma manera. En lugar de utilizar las cosas de la configuración regional de la biblioteca, utiliza una biblioteca llamada ICU, que envía sus propios datos de configuración regional. PHP hace proporciona un método para determinar qué configuraciones regionales son compatibles con este sistema: ResourceBundle::getLocales. La documentación es un poco de lana aquí, pero se puede llamar a esto como un método estático y pasar la cadena en blanco para usar los recursos predeterminados de la UCI, obteniendo así una lista de los idiomas admitidos por intl:

ResourceBundle::getLocales(''); 
+0

Muchas gracias, de hecho, estaba buscando una lista de locales ICU en ese momento, ¡y olvidé por completo esta función! – Benjamin

11

No creo que haya funciones incorporadas para esto. Debe preguntar al sistema operativo qué configuraciones regionales están instaladas.

Por ejemplo, si se ejecuta en un sistema UNIX que tendrá que ejecutar el comando:

$ locale -a 
+0

Looks como si tuvieras razón Gracias por tu respuesta. – Benjamin

+1

Para Windows, consulte http://msdn.microsoft.com/en-us/library/39cwe7zf%28v=vs.100%29.aspx –

+0

Escribí un script php que compara la lista de @ user2627106 para ver qué configuraciones regionales y no son compatibles. Esto podría ser útil si está en un servidor web compartido y no tiene acceso al shell o 'shell_exec ('...')' https://gist.github.com/Azeirah/266c52619ae8930ed4ef45776fc36532 – Azeirah

5

También he resuelto ahora este problema. Esto es lo que sucedió.

<?php 
return array(
    'aa_DJ' => 'Afar (Djibouti)', 
    'aa_ER' => 'Afar (Eritrea)', 
    'aa_ET' => 'Afar (Ethiopia)', 
    'af_ZA' => 'Afrikaans (South Africa)', 
    'sq_AL' => 'Albanian (Albania)', 
    'sq_MK' => 'Albanian (Macedonia)', 
    'am_ET' => 'Amharic (Ethiopia)', 
    'ar_DZ' => 'Arabic (Algeria)', 
    'ar_BH' => 'Arabic (Bahrain)', 
    'ar_EG' => 'Arabic (Egypt)', 
    'ar_IN' => 'Arabic (India)', 
    'ar_IQ' => 'Arabic (Iraq)', 
    'ar_JO' => 'Arabic (Jordan)', 
    'ar_KW' => 'Arabic (Kuwait)', 
    'ar_LB' => 'Arabic (Lebanon)', 
    'ar_LY' => 'Arabic (Libya)', 
    'ar_MA' => 'Arabic (Morocco)', 
    'ar_OM' => 'Arabic (Oman)', 
    'ar_QA' => 'Arabic (Qatar)', 
    'ar_SA' => 'Arabic (Saudi Arabia)', 
    'ar_SD' => 'Arabic (Sudan)', 
    'ar_SY' => 'Arabic (Syria)', 
    'ar_TN' => 'Arabic (Tunisia)', 
    'ar_AE' => 'Arabic (United Arab Emirates)', 
    'ar_YE' => 'Arabic (Yemen)', 
    'an_ES' => 'Aragonese (Spain)', 
    'hy_AM' => 'Armenian (Armenia)', 
    'as_IN' => 'Assamese (India)', 
    'ast_ES' => 'Asturian (Spain)', 
    'az_AZ' => 'Azerbaijani (Azerbaijan)', 
    'az_TR' => 'Azerbaijani (Turkey)', 
    'eu_FR' => 'Basque (France)', 
    'eu_ES' => 'Basque (Spain)', 
    'be_BY' => 'Belarusian (Belarus)', 
    'bem_ZM' => 'Bemba (Zambia)', 
    'bn_BD' => 'Bengali (Bangladesh)', 
    'bn_IN' => 'Bengali (India)', 
    'ber_DZ' => 'Berber (Algeria)', 
    'ber_MA' => 'Berber (Morocco)', 
    'byn_ER' => 'Blin (Eritrea)', 
    'bs_BA' => 'Bosnian (Bosnia and Herzegovina)', 
    'br_FR' => 'Breton (France)', 
    'bg_BG' => 'Bulgarian (Bulgaria)', 
    'my_MM' => 'Burmese (Myanmar [Burma])', 
    'ca_AD' => 'Catalan (Andorra)', 
    'ca_FR' => 'Catalan (France)', 
    'ca_IT' => 'Catalan (Italy)', 
    'ca_ES' => 'Catalan (Spain)', 
    'zh_CN' => 'Chinese (China)', 
    'zh_HK' => 'Chinese (Hong Kong SAR China)', 
    'zh_SG' => 'Chinese (Singapore)', 
    'zh_TW' => 'Chinese (Taiwan)', 
    'cv_RU' => 'Chuvash (Russia)', 
    'kw_GB' => 'Cornish (United Kingdom)', 
    'crh_UA' => 'Crimean Turkish (Ukraine)', 
    'hr_HR' => 'Croatian (Croatia)', 
    'cs_CZ' => 'Czech (Czech Republic)', 
    'da_DK' => 'Danish (Denmark)', 
    'dv_MV' => 'Divehi (Maldives)', 
    'nl_AW' => 'Dutch (Aruba)', 
    'nl_BE' => 'Dutch (Belgium)', 
    'nl_NL' => 'Dutch (Netherlands)', 
    'dz_BT' => 'Dzongkha (Bhutan)', 
    'en_AG' => 'English (Antigua and Barbuda)', 
    'en_AU' => 'English (Australia)', 
    'en_BW' => 'English (Botswana)', 
    'en_CA' => 'English (Canada)', 
    'en_DK' => 'English (Denmark)', 
    'en_HK' => 'English (Hong Kong SAR China)', 
    'en_IN' => 'English (India)', 
    'en_IE' => 'English (Ireland)', 
    'en_NZ' => 'English (New Zealand)', 
    'en_NG' => 'English (Nigeria)', 
    'en_PH' => 'English (Philippines)', 
    'en_SG' => 'English (Singapore)', 
    'en_ZA' => 'English (South Africa)', 
    'en_GB' => 'English (United Kingdom)', 
    'en_US' => 'English (United States)', 
    'en_ZM' => 'English (Zambia)', 
    'en_ZW' => 'English (Zimbabwe)', 
    'eo' => 'Esperanto', 
    'et_EE' => 'Estonian (Estonia)', 
    'fo_FO' => 'Faroese (Faroe Islands)', 
    'fil_PH' => 'Filipino (Philippines)', 
    'fi_FI' => 'Finnish (Finland)', 
    'fr_BE' => 'French (Belgium)', 
    'fr_CA' => 'French (Canada)', 
    'fr_FR' => 'French (France)', 
    'fr_LU' => 'French (Luxembourg)', 
    'fr_CH' => 'French (Switzerland)', 
    'fur_IT' => 'Friulian (Italy)', 
    'ff_SN' => 'Fulah (Senegal)', 
    'gl_ES' => 'Galician (Spain)', 
    'lg_UG' => 'Ganda (Uganda)', 
    'gez_ER' => 'Geez (Eritrea)', 
    'gez_ET' => 'Geez (Ethiopia)', 
    'ka_GE' => 'Georgian (Georgia)', 
    'de_AT' => 'German (Austria)', 
    'de_BE' => 'German (Belgium)', 
    'de_DE' => 'German (Germany)', 
    'de_LI' => 'German (Liechtenstein)', 
    'de_LU' => 'German (Luxembourg)', 
    'de_CH' => 'German (Switzerland)', 
    'el_CY' => 'Greek (Cyprus)', 
    'el_GR' => 'Greek (Greece)', 
    'gu_IN' => 'Gujarati (India)', 
    'ht_HT' => 'Haitian (Haiti)', 
    'ha_NG' => 'Hausa (Nigeria)', 
    'iw_IL' => 'Hebrew (Israel)', 
    'he_IL' => 'Hebrew (Israel)', 
    'hi_IN' => 'Hindi (India)', 
    'hu_HU' => 'Hungarian (Hungary)', 
    'is_IS' => 'Icelandic (Iceland)', 
    'ig_NG' => 'Igbo (Nigeria)', 
    'id_ID' => 'Indonesian (Indonesia)', 
    'ia' => 'Interlingua', 
    'iu_CA' => 'Inuktitut (Canada)', 
    'ik_CA' => 'Inupiaq (Canada)', 
    'ga_IE' => 'Irish (Ireland)', 
    'it_IT' => 'Italian (Italy)', 
    'it_CH' => 'Italian (Switzerland)', 
    'ja_JP' => 'Japanese (Japan)', 
    'kl_GL' => 'Kalaallisut (Greenland)', 
    'kn_IN' => 'Kannada (India)', 
    'ks_IN' => 'Kashmiri (India)', 
    'csb_PL' => 'Kashubian (Poland)', 
    'kk_KZ' => 'Kazakh (Kazakhstan)', 
    'km_KH' => 'Khmer (Cambodia)', 
    'rw_RW' => 'Kinyarwanda (Rwanda)', 
    'ky_KG' => 'Kirghiz (Kyrgyzstan)', 
    'kok_IN' => 'Konkani (India)', 
    'ko_KR' => 'Korean (South Korea)', 
    'ku_TR' => 'Kurdish (Turkey)', 
    'lo_LA' => 'Lao (Laos)', 
    'lv_LV' => 'Latvian (Latvia)', 
    'li_BE' => 'Limburgish (Belgium)', 
    'li_NL' => 'Limburgish (Netherlands)', 
    'lt_LT' => 'Lithuanian (Lithuania)', 
    'nds_DE' => 'Low German (Germany)', 
    'nds_NL' => 'Low German (Netherlands)', 
    'mk_MK' => 'Macedonian (Macedonia)', 
    'mai_IN' => 'Maithili (India)', 
    'mg_MG' => 'Malagasy (Madagascar)', 
    'ms_MY' => 'Malay (Malaysia)', 
    'ml_IN' => 'Malayalam (India)', 
    'mt_MT' => 'Maltese (Malta)', 
    'gv_GB' => 'Manx (United Kingdom)', 
    'mi_NZ' => 'Maori (New Zealand)', 
    'mr_IN' => 'Marathi (India)', 
    'mn_MN' => 'Mongolian (Mongolia)', 
    'ne_NP' => 'Nepali (Nepal)', 
    'se_NO' => 'Northern Sami (Norway)', 
    'nso_ZA' => 'Northern Sotho (South Africa)', 
    'nb_NO' => 'Norwegian Bokmål (Norway)', 
    'nn_NO' => 'Norwegian Nynorsk (Norway)', 
    'oc_FR' => 'Occitan (France)', 
    'or_IN' => 'Oriya (India)', 
    'om_ET' => 'Oromo (Ethiopia)', 
    'om_KE' => 'Oromo (Kenya)', 
    'os_RU' => 'Ossetic (Russia)', 
    'pap_AN' => 'Papiamento (Netherlands Antilles)', 
    'ps_AF' => 'Pashto (Afghanistan)', 
    'fa_IR' => 'Persian (Iran)', 
    'pl_PL' => 'Polish (Poland)', 
    'pt_BR' => 'Portuguese (Brazil)', 
    'pt_PT' => 'Portuguese (Portugal)', 
    'pa_IN' => 'Punjabi (India)', 
    'pa_PK' => 'Punjabi (Pakistan)', 
    'ro_RO' => 'Romanian (Romania)', 
    'ru_RU' => 'Russian (Russia)', 
    'ru_UA' => 'Russian (Ukraine)', 
    'sa_IN' => 'Sanskrit (India)', 
    'sc_IT' => 'Sardinian (Italy)', 
    'gd_GB' => 'Scottish Gaelic (United Kingdom)', 
    'sr_ME' => 'Serbian (Montenegro)', 
    'sr_RS' => 'Serbian (Serbia)', 
    'sid_ET' => 'Sidamo (Ethiopia)', 
    'sd_IN' => 'Sindhi (India)', 
    'si_LK' => 'Sinhala (Sri Lanka)', 
    'sk_SK' => 'Slovak (Slovakia)', 
    'sl_SI' => 'Slovenian (Slovenia)', 
    'so_DJ' => 'Somali (Djibouti)', 
    'so_ET' => 'Somali (Ethiopia)', 
    'so_KE' => 'Somali (Kenya)', 
    'so_SO' => 'Somali (Somalia)', 
    'nr_ZA' => 'South Ndebele (South Africa)', 
    'st_ZA' => 'Southern Sotho (South Africa)', 
    'es_AR' => 'Spanish (Argentina)', 
    'es_BO' => 'Spanish (Bolivia)', 
    'es_CL' => 'Spanish (Chile)', 
    'es_CO' => 'Spanish (Colombia)', 
    'es_CR' => 'Spanish (Costa Rica)', 
    'es_DO' => 'Spanish (Dominican Republic)', 
    'es_EC' => 'Spanish (Ecuador)', 
    'es_SV' => 'Spanish (El Salvador)', 
    'es_GT' => 'Spanish (Guatemala)', 
    'es_HN' => 'Spanish (Honduras)', 
    'es_MX' => 'Spanish (Mexico)', 
    'es_NI' => 'Spanish (Nicaragua)', 
    'es_PA' => 'Spanish (Panama)', 
    'es_PY' => 'Spanish (Paraguay)', 
    'es_PE' => 'Spanish (Peru)', 
    'es_ES' => 'Spanish (Spain)', 
    'es_US' => 'Spanish (United States)', 
    'es_UY' => 'Spanish (Uruguay)', 
    'es_VE' => 'Spanish (Venezuela)', 
    'sw_KE' => 'Swahili (Kenya)', 
    'sw_TZ' => 'Swahili (Tanzania)', 
    'ss_ZA' => 'Swati (South Africa)', 
    'sv_FI' => 'Swedish (Finland)', 
    'sv_SE' => 'Swedish (Sweden)', 
    'tl_PH' => 'Tagalog (Philippines)', 
    'tg_TJ' => 'Tajik (Tajikistan)', 
    'ta_IN' => 'Tamil (India)', 
    'tt_RU' => 'Tatar (Russia)', 
    'te_IN' => 'Telugu (India)', 
    'th_TH' => 'Thai (Thailand)', 
    'bo_CN' => 'Tibetan (China)', 
    'bo_IN' => 'Tibetan (India)', 
    'tig_ER' => 'Tigre (Eritrea)', 
    'ti_ER' => 'Tigrinya (Eritrea)', 
    'ti_ET' => 'Tigrinya (Ethiopia)', 
    'ts_ZA' => 'Tsonga (South Africa)', 
    'tn_ZA' => 'Tswana (South Africa)', 
    'tr_CY' => 'Turkish (Cyprus)', 
    'tr_TR' => 'Turkish (Turkey)', 
    'tk_TM' => 'Turkmen (Turkmenistan)', 
    'ug_CN' => 'Uighur (China)', 
    'uk_UA' => 'Ukrainian (Ukraine)', 
    'hsb_DE' => 'Upper Sorbian (Germany)', 
    'ur_PK' => 'Urdu (Pakistan)', 
    'uz_UZ' => 'Uzbek (Uzbekistan)', 
    've_ZA' => 'Venda (South Africa)', 
    'vi_VN' => 'Vietnamese (Vietnam)', 
    'wa_BE' => 'Walloon (Belgium)', 
    'cy_GB' => 'Welsh (United Kingdom)', 
    'fy_DE' => 'Western Frisian (Germany)', 
    'fy_NL' => 'Western Frisian (Netherlands)', 
    'wo_SN' => 'Wolof (Senegal)', 
    'xh_ZA' => 'Xhosa (South Africa)', 
    'yi_US' => 'Yiddish (United States)', 
    'yo_NG' => 'Yoruba (Nigeria)', 
    'zu_ZA' => 'Zulu (South Africa)' 
); 
+6

Esto es un lista fija que puede ser válida para usted, pero que puede estar mal en otros sistemas. Estaba pidiendo la lista de configuraciones regionales disponibles en * un sistema dado *, ¡no una lista codificada! – Benjamin

+0

Esto será útil si está usando archivos de traducción. Almacenado localmente en la base de datos y de acuerdo con esto, seleccionó un archivo de traducción. Este enfoque no depende del sistema operativo. –

+2

Las configuraciones regionales son mucho más que cadenas para usar en archivos de traducción, proporcionan compatibilidad con i18n para el formato de fecha/hora y números, etc. Por lo tanto, una lista codificada no sirve de nada si no está respaldada por [ICU] (http: //site.icu-project.org/) data. – Benjamin

3

En Windows, puede intentar llamar a la función setlocale() php con todos los elementos de la lista siguiente:
http://msdn.microsoft.com/en-us/goglobal/bb895996.aspx

Aquí es una sniplet código para enumerar todos los locales disponibles en un host basado en Windows:

<?php 
header('Content-Type: text/html; charset=utf-8'); 
// source of the list: 
// http://msdn.microsoft.com/en-us/library/39cwe7zf(v=vs.90).aspx 
$langs = array(
    // language, sublanguage, codes 
    array('Chinese', 'Chinese', array('chinese')), 
    array('Chinese', 'Chinese (simplified)', array('chinese-simplified', 'chs')), 
    array('Chinese', 'Chinese (traditional)', array('chinese-traditional', 'cht')), 
    array('Czech', 'Czech', array('csy', 'czech')), 
    array('Danish', 'Danish', array('dan', 'danish')), 
    array('Dutch', 'Dutch (default)', array('dutch', 'nld')), 
    array('Dutch', 'Dutch (Belgium)', array('belgian', 'dutch-belgian', 'nlb')), 
    array('English', 'English (default)', array('english')), 
    array('English', 'English (Australia)', array('australian', 'ena', 'english-aus')), 
    array('English', 'English (Canada)', array('canadian', 'enc', 'english-can')), 
    array('English', 'English (New Zealand)', array('english-nz', 'enz')), 
    array('English', 'English (United Kingdom)', array('eng', 'english-uk', 'uk')), 
    array('English', 'English (United States)', array('american', 'american english', 'american-english', 'english-american', 'english-us', 'english-usa', 'enu', 'us', 'usa')), 
    array('Finnish', 'Finnish', array('fin', 'finnish')), 
    array('French', 'French (default)', array('fra', 'french')), 
    array('French', 'French (Belgium)', array('frb', 'french-belgian')), 
    array('French', 'French (Canada)', array('frc', 'french-canadian')), 
    array('French', 'French (Switzerland)', array('french-swiss', 'frs')), 
    array('German', 'German (default)', array('deu', 'german')), 
    array('German', 'German (Austria)', array('dea', 'german-austrian')), 
    array('German', 'German (Switzerland)', array('des', 'german-swiss', 'swiss')), 
    array('Greek', 'Greek', array('ell', 'greek')), 
    array('Hungarian', 'Hungarian', array('hun', 'hungarian')), 
    array('Icelandic', 'Icelandic', array('icelandic', 'isl')), 
    array('Italian', 'Italian (default)', array('ita', 'italian')), 
    array('Italian', 'Italian (Switzerland)', array('italian-swiss', 'its')), 
    array('Japanese', 'Japanese', array('japanese', 'jpn')), 
    array('Korean', 'Korean', array('kor', 'korean')), 
    array('Norwegian', 'Norwegian (default)', array('norwegian')), 
    array('Norwegian', 'Norwegian (Bokmal)', array('nor', 'norwegian-bokmal')), 
    array('Norwegian', 'Norwegian (Nynorsk)', array('non', 'norwegian-nynorsk')), 
    array('Polish', 'Polish', array('plk', 'polish')), 
    array('Portuguese', 'Portuguese (default)', array('portuguese', 'ptg')), 
    array('Portuguese', 'Portuguese (Brazil)', array('portuguese-brazilian', 'ptb')), 
    array('Russian', 'Russian (default)', array('rus', 'russian')), 
    array('Slovak', 'Slovak', array('sky', 'slovak')), 
    array('Spanish', 'Spanish (default)', array('esp', 'spanish')), 
    array('Spanish', 'Spanish (Mexico)', array('esm', 'spanish-mexican')), 
    array('Spanish', 'Spanish (Modern)', array('esn', 'spanish-modern')), 
    array('Swedish', 'Swedish', array('sve', 'swedish')), 
    array('Turkish', 'Turkish', array('trk', 'turkish')) 
); 
echo '<table>'."\n"; 
echo '<tr>'."\n"; 
echo ' <th>Languange</th>'."\n"; 
echo ' <th>Sub-Languange</th>'."\n"; 
echo ' <th>Languange String</th>'."\n"; 
echo '</tr>'."\n"; 
foreach ($langs as $lang) { 
    echo '<tr>'."\n"; 
    echo ' <td>'.$lang[0].'</td>'."\n"; 
    echo ' <td>'.$lang[1].'</td>'."\n"; 
    $a = array(); 
    foreach ($lang[2] as $lang_code) { 
     $loc = setlocale(LC_ALL, $lang_code); 
     $a []= $lang_code.' '.(false === $loc ? '✖' : '✔ - '.$loc); 
    } 
    echo ' <td>'.implode('<br>', $a).'</td>'."\n"; 
    echo '</tr>'."\n"; 
} 
echo '</table>'."\n"; 
// Note: Norvegian (Bokmal) is Norvegian (Bokmål), see: http://en.wikipedia.org/wiki/Bokmål 
?> 
Cuestiones relacionadas