有没有办法在 PHP 中获取可用语言环境的列表?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10073425/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 21:19:38  来源:igfitidea点击:

Is there a way to get the list of available locales in PHP?

phpinternationalizationlocale

提问by Benjamin

In Java, you can call Locale.getAvailableLocales()to get the list of available locales.

在 Java 中,您可以调用Locale.getAvailableLocales()以获取可用语言环境的列表。

I was expecting an equivalent from the PHP Localeclass, but could not find one.

我期待 PHP Locale类的等效项,但找不到。

Is there a way to get an array of all valid Locales?

有没有办法获得所有有效语言环境的数组?

回答by John Flatness

Part of the confusion here is that PHP has two concepts called "locale" that are pretty much totally separate.

这里的部分混淆是 PHP 有两个几乎完全独立的概念,称为“语言环境”。

The first is the older one, which basically just uses the C locale features. That's what's behind setlocaleand the locale support in some of PHP's functions (like money_formatfor example). This is what other answers that mention running locale -aon the command line and using setlocaleare talking about.

第一个是较旧的,它基本上只使用 C 语言环境功能。这就是setlocale某些 PHP 函数(money_format例如)的背后和语言环境支持。这就是提到locale -a在命令行上运行和使用的其他答案setlocale所讨论的内容。

PHP's Localeclass and the other related functionality from the intlextensionis newer, and doesn't work the same way. Instead of using the libc locale stuff, it uses a library called ICU, which ships its own locale data. PHP doesprovide a method to determine which locales are supported by thissystem: ResourceBundle::getLocales. The documentation is a little wooly here, but you can call this as a static method and pass the blank string to use ICU's default resources, thus getting a list of the supported locales for intl:

PHP 的Locale类和来自intl扩展其他相关功能更新,并且工作方式不同。它没有使用 libc 语言环境的东西,而是使用一个名为 ICU 的库,它提供自己的语言环境数据。PHP确实提供了一种方法来确定系统支持哪些语言环境:ResourceBundle::getLocales。这里的文档有点混乱,但您可以将其称为静态方法并传递空白字符串以使用 ICU 的默认资源,从而获得支持的语言环境列表intl

ResourceBundle::getLocales('');

回答by Benjamin

I don't think there is a built in functions for this. You need to ask the operating system which locales are installed.

我不认为有一个内置的功能。您需要询问操作系统安装了哪些语言环境。

For example, if you run on a unix system you will need to execute the command:

例如,如果您在 unix 系统上运行,则需要执行以下命令:

$ locale -a

回答by Benjamin

I also now solved this problem. Here's what happened.

我现在也解决了这个问题。这就是发生的事情。

<?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)'
);

回答by Balazs Nemeth

On Windows you can try to call the setlocale()php function with all the items of the following list:
http://msdn.microsoft.com/en-us/goglobal/bb895996.aspx

在 Windows 上,您可以尝试setlocale()使用以下列表中的所有项目调用php 函数:http:
//msdn.microsoft.com/en-us/goglobal/bb895996.aspx

Here is a code sniplet to list all available locales on a Windows based host:

这是一个代码片段,用于列出基于 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
?>

回答by Yevgeniy Afanasyev

you normally need only locales that compatible with UTF-8 to use it in html

您通常只需要与 UTF-8 兼容的语言环境即可在 html 中使用它

thus, the ResourceBundle is useless, but you still can call it like this

因此,ResourceBundle 是无用的,但你仍然可以这样称呼它

\ResourceBundle::getLocales('')

to be sure how useless it is.

确定它是多么无用。

So, you need to get a list of what supported by your Ubuntu (because Ubuntu is what you need)

因此,您需要获取 Ubuntu 支持的列表(因为 Ubuntu 是您所需要的)

    $string           = shell_exec("locale -a|grep .utf8");
    $array            = explode('.utf8' . "\n", $string);

you will get things like en_US, ru_RU, zh_CN- whatever you installed on your ubuntu. Now take one and use it like so

你会得到类似en_US, ru_RU, zh_CN- 无论你安装在你的 ubuntu 上的东西。现在拿一个并像这样使用它

$locale  = $array[0].'.UTF-8';
setlocale(LC_MONETARY, $locale);

but you can install more localeson your Ubuntu

但是你可以locales在你的 Ubuntu 上安装更多

回答by Qrzysio

system("locale -a|grep XX");where XXis language code ie. system("locale -a|grep de");

system("locale -a|grep XX");XX语言代码在哪里,即。system("locale -a|grep de");