使用 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);
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);