【问题标题】:Convert ISO 639-1 into a language name in local language with PHP使用 PHP 将 ISO 639-1 转换为本地语言的语言名称
【发布时间】:2021-08-31 17:20:57
【问题描述】:

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

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 手册,但它甚至从给定示例中复制粘贴也没有返回任何内容 - 可能是我的 ISP 没有提供所有必需的库。所以我什至无法检查它是否是我正在寻找的东西。无论如何,这个函数似乎无法获取 ISO 639-1 代码。

【问题讨论】:

  • 语法错误! if($lang = 'en'){$userlang = 'English';} 始终为真,因为你不比较,而是设置 $lang。
  • 如果您不想将它们全部放在代码中,为什么不制作一个包含所有这些条目的小文本文件并对其进行解析?
  • 是的,if($lang == 'en'){$userlang = 'English';} 是正确的。
  • 我向你保证,“PHP 方式”最终也会在某个地方解析为文件。即使是原生方式也会有操作系统或库文件。它可能是二进制的,但仍然是某个地方的文件。这是为您完成工作的really simple library,当然,它有一个专用文件。否则,您可以使用 PHP 国际扩展,但这在各种平台上可能会很奇怪。出于调试目的,我宁愿有一个文件来调试。
  • @Pimpfru,它只是一个带有帮助代码的数据文件,你可以只是 FTP 文件或使用 composer,没有什么可安装的(除非你还在谈论 PHP 扩展)。如果您的主机阻止您将 PHP/CSV 放在某个地方,我不知道该告诉您什么。如果您不能在您的主机上使用 composer,只需在本地使用 composer 并 FTP 文件。

标签: php locale


【解决方案1】:

在 php.net 上找到了 locale_get_display_script 手册,但它甚至没有返回给定示例的复制粘贴 - 可能是我的 ISP 没有提供所有必需的库。

您可以先检查一下,然后再假设您的提供商不支持它。就我在 PHP 中的经验而言,如果没有安装任何类,它会返回一个错误,而不是“nothing”。

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

【讨论】:

  • 如果错误被禁用,它很容易什么也不返回。
猜你喜欢
  • 2015-06-20
  • 2012-06-15
  • 2015-05-30
  • 1970-01-01
  • 2011-07-06
  • 2023-04-08
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多