В Java вы можете вызвать Locale.getAvailableLocales()
чтобы получить список доступных локалей.
Я ожидал эквивалент из класса PHP Locale , но не смог найти его.
Есть ли способ получить массив всех допустимых локалей?
Часть путаницы здесь заключается в том, что PHP имеет две концепции, называемые «locale», которые в значительной степени полностью разделены.
Первый – это старший, который в основном использует функции языка C. Это то, что стоит за setlocale
и поддержкой money_format
в некоторых функциях PHP (например, money_format
). Вот о чем говорят другие ответы, в которых упоминается запуск locale -a
в командной строке и использование setlocale
.
Класс Locale
PHP и другие связанные функции из внутреннего расширения являются более новыми и не работают одинаково. Вместо использования языка libc, он использует библиотеку ICU, которая отправляет свои собственные данные локали. PHP предоставляет метод определения, какие локали поддерживаются этой системой: ResourceBundle :: getLocales . Документация здесь немного wooly, но вы можете назвать это как статический метод и передать пустую строку для использования ресурсов по умолчанию ICU, тем самым получив список поддерживаемых локалей для intl
:
ResourceBundle::getLocales('');
Я не думаю, что для этого есть встроенные функции. Вы должны спросить операционную систему, какие локали установлены.
Например, если вы запустите систему unix, вам нужно будет выполнить команду:
$ locale -a
Я также решил эту проблему. Вот что произошло.
<?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)' );
В Windows вы можете попытаться вызвать функцию setlocale()
php со всеми элементами следующего списка:
http://msdn.microsoft.com/en-us/goglobal/bb895996.aspx
Ниже приведен код sniplet для перечисления всех доступных локалей на хосте 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 ?>