使用 PHP 将 ISO 639-1 转换为当地语言的语言名称

Convert ISO 639-1 into a language name in local language with PHP

Stack Overflow 提供了一些“类似”的问题,但不幸的是,其中 none 是合适的。或者我是一个糟糕的搜索者。

MySQL 数据库中有 language 列,它根据用户设置存储不同的 ISO 639-1 代码。然后我将用户的 ISO 631-1 代码抓取到 $lang 变量中,并可以用 echo 输出它。没问题。

是否有 PHP 7 兼容技术可以将 en 转换为英语,将 es 转换为西班牙语,将 fr 转换为法语等?

我目前正在使用以下代码来实现此目的

if($lang == 'en'){$userlang = 'English';}
if($lang == 'es'){$userlang = 'Español';}
if($lang == 'fr'){$userlang = 'Français';}

我认为这不是最佳选择,因为有大量 ISO 639-1 代码列表,我绝对不想将它们全部放入代码中。

在 php.net 找到了 locale_get_display_script 手册,但它 returns 甚至没有从给定的示例中复制粘贴 - 可能是我的 ISP 没有提供所有必需的库。所以我什至无法检查它是否是我正在寻找的东西。无论如何,这个函数看起来不像可以获取 ISO 639-1 代码。

Found locale_get_display_script manual at php.net but it returns nothing even copypasted from a given example - may be my ISP doesn't provide all required libraries.

在假设您的提供商不支持之前,您可以先检查它。就我在 PHP 中的经验而言,如果没有安装 class,它将 return 一个错误,而不是“无”。

if (!class_exists('Locale')) {
    exit ('No php_intl extension installed.');
}

$userlang = Locale::getDisplayName($lang, $lang);

var_dump($userlang);

如果您没有任何访问权限,即使只是通过 Composer 安装已经支持 ISO 639-1 的软件包,您也可以使用此脚本(使用 file_get_contents())或下载 from my gist

$codes    = json_decode(file_get_contents('https://gist.githubusercontent.com/Kristories/f01f3d35d6ffbf3a3e2ee641b10e15e6/raw/d1b44ee63ff531ead9d27bc78e7815773fa706a4/ISO-639-1.json'), true);
$userlang = isset($codes[$lang]) ? $codes[$lang] : false;

var_dump($userlang);