首页 > 解决方案 > 如何获取 PHP 中所有语言的列表

问题描述

我使用处理来自 3rd 方 API 的响应的代码,并且该响应包含一些语言代码。我看到似乎有定义语言官方代码的标准,并且想知道是否有任何方法可以在 PHP 中访问这些代码。

我也知道有些人只是使用硬编码的代码列表,但我更愿意将维护列表留给其他人,不是每天都会添加新语言,但确实会发生

我的问题是如何获取 PHP 中的语言环境和语言列表?

标签: phplocaleintl

解决方案


我发现 PHP 扩展intl包含一些处理语言环境的类,但需要一些时间才能得到我想要的。

intl 扩展的文档在这里。对我来说安装它就像运行一样简单

sudo apt install php8.0-intl

然后为了展示如何获取不同的语言环境、代码和语言,我使用了以下代码:

$locales = ResourceBundle::getLocales('');
printf('Found %d locales like %s', count($locales), implode(',', array_slice($locales, 0, 5)));
echo PHP_EOL;

$languageCodes = array_unique(array_map(fn ($locale) => Locale::getPrimaryLanguage($locale), $locales));
printf('Found %d language codes like %s', count($languageCodes), implode(',', array_slice($languageCodes, 0, 5)));
echo PHP_EOL;

$languages = array_unique(array_map(fn ($code) => Locale::getDisplayName($code), $languageCodes));
printf('Found %d languages like %s', count($languages), implode(',', array_slice($languages, 0, 5)));
echo PHP_EOL;

在运行时,会产生:

Found 751 locales like af,af_NA,af_ZA,agq,agq_CM
Found 204 language codes like af,agq,ak,am,ar
Found 204 languages like Afrikaans,Aghem,Akan,Amharic,Arabic

推荐阅读