在PHP中有没有一种方法可以获取可用区域设置列表?

23

在Java中,你可以调用Locale.getAvailableLocales()方法来获取可用语言环境列表。

我希望在PHP的Locale类中也有类似的方法,但是没有找到。

是否有一种方式可以获取所有有效语言环境的数组?


8个回答

28

混淆的部分在于PHP有两个名为“locale”的概念,它们基本上是完全独立的。

第一个是比较老的,基本上只使用C语言环境特性。这就是setlocale和一些PHP函数(例如money_format)中的区域设置支持背后的原理。其他提到在命令行上运行locale -a和使用setlocale的答案都在谈论这个。

PHP的Locale类和与之相关的其他功能来自于intl扩展,它是更新的,工作方式不同。它不是使用libc的语言环境库,而是使用了一个叫做ICU的库,该库提供了自己的语言环境数据。PHP确实提供了一种方法来确定系统支持哪些区域设置:ResourceBundle::getLocales。文档在这里有点含糊,但你可以将其作为静态方法调用,并传递空字符串以使用ICU的默认资源,从而获取支持intl的区域设置列表:

ResourceBundle::getLocales('');

非常感谢,当时我确实在寻找 ICU 区域设置列表,完全错过了这个函数! - BenMorel
这在 PHP 5.6 中至少不起作用:Class 'ResourceBundle' not found - The Godfather
2
这确实回答了如何获得 "locales" 的问题,但如果想要获取一个语言列表,那么这将不起作用。该列表将不完整。请参阅 https://dev59.com/32kw5IYBdhLWcg3wMHkY#63276420 以获取语言列表。 - PowerKiKi
这就是为什么使用resourcebundle_locales()函数显示的区域设置调用setlocale('es_AR')会失败。区域设置的格式完全不同。那么,我们如何在Windows中列出/显示用于setlocale()的C语言区域设置呢? - undefined

15

我认为没有内置函数可以实现这个功能。你需要询问操作系统已经安装了哪些语言环境。

例如,如果你在一个Unix系统上运行,你需要执行以下命令:

$ locale -a

1
对于Windows,请参见http://msdn.microsoft.com/en-us/library/39cwe7zf%28v=vs.100%29.aspx。 - Valentin Despa
我写了一个 PHP 脚本,用 @user2627106 的列表检查支持哪些语言环境和不支持哪些语言环境。如果你在共享 web 主机上并且没有访问 shell 或 shell_exec('...')的权限,这可能会很有用。https://gist.github.com/Azeirah/266c52619ae8930ed4ef45776fc36532 - Azeirah

4
我现在已经解决了这个问题。以下是发生的情况。
<?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)'
);

14
这是一个固定的列表,可能对你有效,但在其他系统上可能是错误的。我想要的是在给定系统上可用的本地化列表,而不是硬编码的列表! - BenMorel
如果您正在使用翻译文件,这将非常有用。它们存储在数据库中,并根据所选的翻译文件进行本地存储。这种方法不依赖于操作系统。 - user2627106
2
本地化远不止是用于翻译文件的字符串,它们还提供了日期/时间和数字格式等国际化支持。因此,如果没有ICU数据的支持,硬编码列表几乎没有任何用处。 - BenMorel
4
这个扩展是与PHP捆绑在一起的,但据我所知,地区设置列表(数据)取决于系统。 - BenMorel
P.S.:可以毫无问题地使用它 :) http://site.icu-project.org "... 这些数据也来自Common Locale Data Repository... " (http://cldr.unicode.org) - user2627106
显示剩余2条评论

2

通常情况下,你只需要兼容UTF-8的语言环境就可以在HTML中使用它。

因此,ResourceBundle是无用的,但你仍然可以像这样调用它。

注:Original Answer翻译成“最初的回答”未能理解其含义,请提供更多上下文信息。
\ResourceBundle::getLocales('')

"最初的回答"翻译成英文是 "Original Answer"。为了确定它的无用性,您需要获取一个由Ubuntu支持的列表(因为Ubuntu是您所需的)。请注意保留html标签。
    $string           = shell_exec("locale -a|grep .utf8");
    $array            = explode('.utf8' . "\n", $string);

您将获得像en_USru_RUzh_CN这样的东西 - 这取决于您在Ubuntu上安装的内容。现在选择其中一个并按如下方式使用。"最初的回答"
$locale  = $array[0].'.UTF-8';
setlocale(LC_MONETARY, $locale);

您可以在Ubuntu上安装更多的“locales”。最初的回答中提到了这一点。

你怎么知道他需要Ubuntu?如果他使用CentOS或其他发行版呢?这个回答中有太多假设了。 - scrnjakovic
每个人都需要Ubuntu :) - Yevgeniy Afanasyev

2
在Windows上,您可以尝试使用以下列表中的所有项目调用setlocale() php函数:
http://msdn.microsoft.com/en-us/goglobal/bb895996.aspx 这是一个代码片段,可列出基于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
?>

2
这可能与原帖略有不同,但我认为这是一个常见的用例,值得在此提到。如果您想要一个按 ICU 定义的 语言代码 列表而不是 locales 列表呢?

所有语言列表

基于 ResourceBundle::getLocales(''); 的解决方案会得到 locales,然后您需要将它们映射到 language codes。但即使这样,语言列表也不完整

以下是正确执行此操作的比较:

<?php

function getListFromLocales(): array
{
    return array_filter(ResourceBundle::getLocales(''), function ($value) {
        return strpos($value, '_') === false;
    });
}

function getListFromLanguages(): array
{
    $resourceBundle = new ResourceBundle('en', 'ICUDATA-lang', false);
    $languagesBundle = $resourceBundle['Languages'];

    $languages = [];
    foreach ($languagesBundle as $languageCode => $languageName) {
        $languages[] = $languageCode;
    }

    return $languages;
}

function languageForEndUser($language): string
{
    return Locale::getDisplayLanguage($language, $language) . ' (' . Locale::getDisplayLanguage($language) . ')';
}

$list1 = getListFromLocales();
$list2 = getListFromLanguages();

echo 'languages in list1: ' . count($list1) . PHP_EOL;
echo 'languages in list2: ' . count($list2) . PHP_EOL;
echo 'languages that exists in list1, but not in list2: ' . count(array_diff($list1, $list2)) . PHP_EOL;
echo 'languages that exists in list2, but not in list1: ' . count(array_diff($list2, $list1)) . PHP_EOL;

Locale::setDefault('fr'); // Assume end-user speaks french

echo 'examples of language for end-user: ' . PHP_EOL;
echo '    - ' . languageForEndUser('en') . PHP_EOL;
echo '    - ' . languageForEndUser('fr') . PHP_EOL;
echo '    - ' . languageForEndUser('ko') . PHP_EOL;


这将会输出类似下面的内容:
languages in list1: 204
languages in list2: 620
languages that exists in list1, but not in list2: 0
languages that exists in list2, but not in list1: 416
examples of language for end-user: 
    - English (anglais)
    - français (français)
    - 한국어 (coréen)

我们可以看到,正确的方法提供了约400多种语言(!)。

您可以在https://3v4l.org/TS292上看到代码实现。


1

IntlCalendar PHP类中有一个名为getAvailableLocales的方法,它返回PHP中所有可用和支持的本地化信息。 要运行此方法,需要intl扩展。

print_r(IntlCalendar::getAvailableLocales());

我在 PHP 8.1.x 中执行了代码,返回了 797 条记录。

Array
(
    [0]    af
    [1]    af_NA
    .....
    [454]    ko
    [455]    ko_KP
    .....
    [795]    zu
    [796]    zu_ZA
)

0

system("locale -a|grep XX"); 中的 XX 是语言代码,例如:system("locale -a|grep de");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接