返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中针对区域语言标记信息的示例分析
  • 414
分享到

PHP中针对区域语言标记信息的示例分析

2023-06-20 12:06:57 414人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关PHP中针对区域语言标记信息的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。获取及设置当前的区域语言信息首先就是我们可以动态地获取和设置相应的区域语言信息。// #&n

这篇文章给大家分享的是有关PHP中针对区域语言标记信息的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

获取及设置当前的区域语言信息

首先就是我们可以动态地获取和设置相应的区域语言信息。

// # echo $LANG;// en_US.UTF-8// php.ini// intl.default_locale => no value => no valueecho Locale::getDefault(), PHP_EOL; // en_US_POSIXini_set('intl.default_locale', 'zh_CN');echo Locale::getDefault(), PHP_EOL; // zh_CNLocale::setDefault('fr');echo Locale::getDefault(), PHP_EOL; // fr

默认情况下,使用 getDefault() 方法获得的是 php.ini 文件中的 intl.default_locale 配置的内容。如果在 php.ini 中也没有配置的话,就会取操作系统的 $LANG 值里面的内容,也就是我们上面例子中输出的 en_US_POSIX ,POSIX 表示的就是来自操作系统的配置。

使用 ini_set() 直接修改 ini 的配置或者使用 setDefault() 方法都是可以动态地修改当前的区域语言设置的。

关于语言标记的规则

在继续学习下面的内容之前,我们先来学习一下语言标记的规范。对于大多数人来说,可能只接触过 en_US 、 zh_CN 这类的标记,但其实它的完整定义是很长的,只是我们使用这种简写的方式时,很多内容会以默认的形式提供。完整的标记规则是:

language-extlang-script-region-variant-extension-privateuse
语言文字种类-扩展语言文字种类-书写格式-国家和地区-变体-扩展-私有

也就是说,我们的 zh_CN 可以这样写:

zh-cmn-Hans-CN-Latn-pinyin

代表的是:zh 语言文字种类,Hans 书写格式为简体中文,cmn 普通话,CN 国家和地区,Latn 变体拉丁字母,pinyin 变体拼音。

是不是感觉突然一下这么简单的东西一下子变得高大上了。另外,zh- 这个前缀现在已经不是推荐使用的了,zh- 现在已经不是语言 code 了,而是 Macrolang 也就是宏语言,我们直接使用 cmn 、 yue(粤语)、wuu(吴语)、hsn(湘语,湖南话)这类的就可以当做 language 来使用了。因此,上面的那一段也可以这么写:

cmn-Hans-CN-Latn-pinyin

在上篇文章中,我们讲 NumberFORMatter 时说过可以直接获得中文的数字格式的输出,现在我们想要繁体的结果呢?很简单,加上 Hant 标识书写格式为繁体中文即可。

关于语言标记规则的内容,大家可以看看文末知乎的参考链接,介绍的更为详尽。

$fmt = new NumberFormatter('zh-Hant', NumberFormatter::SPELLOUT);echo $fmt->format(1234567.891234567890000), PHP_EOL; // 一百二十三萬四千五百六十七點八九一二三四五六七九

获取指定语言标记规则中的各类信息

学习了语言标记的规则之后能干什么呢?Locale 类最主要的功能就在于可以分析获取这些属性信息。

单独获取各种属性信息

echo Locale::getDisplayLanguage('cmn-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // cmnecho Locale::getDisplayLanguage('zh-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // 中文echo Locale::getDisplayName('cmn-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // cmn(简体,中国,LATN_PINYIN)echo Locale::getDisplayName('zh-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // 中文(简体,中国,LATN_PINYIN)echo Locale::getDisplayRegion('cmn-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // 中国echo Locale::getDisplayRegion('zh-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // 中国echo Locale::getDisplayScript('cmn-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // 简体中文echo Locale::getDisplayScript('zh-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // 简体中文echo Locale::getDisplayVariant('cmn-Hans-Latn-pinyin', 'zh_CN'), PHP_EOL; // LATN_PINYINecho Locale::getDisplayVariant('zh-Hans-CN-Latn-pinyin', 'zh_CN'), PHP_EOL; // LATN_PINYIN

我们分别使用两种标记方式来测试代码,可以看到结果的对比。

  • getDisplayLanguage() 方法用于获取显示的语言信息,也就是规则中的 language 内容。

  • getDisplayName() 方法用于获取标准的语言名称,可以看到内容更加地丰富。

  • getDisplayRegion() 方法很明显地就是获取到了国家信息。

  • getDisplayScript() 获取到的是书写格式的信息。

  • getDisplayVariant() 获取到的就是变体信息

批量获取属性信息

当然,我们也可以批量地获取到一些语言相关的信息。

$arr = Locale::parseLocale('zh-Hans-CN-Latn-pinyin');if ($arr) {    foreach ($arr as $key => $value) {        echo "$key : $value ", PHP_EOL;    }}// language : zh// script : Hans// region : CN// variant0 : LATN// variant1 : PINYIN

使用 parseLocale() 方法就能获取到一个语言标记中的各类信息并保存在数组中,键为标记规则名,值为对应的内容,看看是不是和我们上面介绍的内容是一样的。

获取所有变体信息

从上面的代码中可以看出,我们有两个变体信息,这个也可以通过一个 getAllVariants() 方法来直接获得语言标记中的所有变体信息的数组。

$arr = Locale::getAllVariants('zh-Hans-CN-Latn-pinyin');var_export($arr);echo PHP_EOL;//  array (//     0 => 'LATN',//     1 => 'PINYIN',//   )

获取字符集相关信息

echo Locale::canonicalize('zh-Hans-CN-Latn-pinyin'), PHP_EOL; // zh_Hans_CN_LATN_PINYIN$keyWords_arr = Locale::geTKEywords('zh-cn@currency=CMY;collation=UTF-8');if ($keywords_arr) {    foreach ($keywords_arr as $key => $value) {        echo "$key = $value", PHP_EOL;    }}// collation = UTF-8// currency = CMY

canonicalize() 方法用于规范化地显示语言标记信息,可以看到它把我们的中划线变成了下划线并且将后面的各种属性转成了大写,这就是规范化的写法。不过对于我们的应用程序和网页来说中划线以及大小写都是支持的。当然,大家最好还是按照标准的写法来定义。

getKeywords() 用于从 @ 符号后获取语言相关的信息属性,比如我们定义的这个 zh-cn ,然后定义了它的货币为 CMY ,字符集为 UTF-8 ,直接通过 getKeywords() 就能获取货币和字符集属性的数组。

匹配判断语言标记信息

对于语言标记来说,我们可以判断给定的两个标记之间是否相互匹配,比如:

echo (Locale::filterMatches('cmn-CN', 'zh-CN', false)) ? "Matches" : "Does not match", PHP_EOL;echo (Locale::filterMatches('zh-CN-Latn', 'zh-CN', false)) ? "Matches" : "Does not match", PHP_EOL;

当然,我们也可以使用另一个 lookup() 方法来确定给定的一系列语言标记哪个与指定的标记最接近。

$arr = [    'zh-hans',    'zh-hant',    'zh',    'zh-cn',];echo Locale::lookup($arr, 'zh-Hans-CN-Latn-pinyin', true, 'en_US'), PHP_EOL; // zh_hans

生成一个标准规则的语言标记

既然能够获取各类语言标记的属性信息,那么我们能不能生成一个标准的语言标记内容呢?

$arr = [    'language' => 'en',    'script' => 'Hans',    'region' => 'CN',    'variant2' => 'rozaj',    'variant1' => 'nedis',    'private1' => 'prv1',    'private2' => 'prv2',];echo Locale::composeLocale($arr), PHP_EOL; // en_Hans_CN_nedis_rozaj_x_prv1_prv2

没错,composeLocale() 方法根据一个数组格式的内容,就可以生成一个完整标准的语言标记格式内容。当然,这个测试代码是乱写的,相当于是一个 en_CN 的标记,正常不会这么写的。

acceptFromHttp 从请求头中读取语言信息

另外,Locale 类中还提供了一个从 header 头中的 Accept Language 中获取客户浏览器语言信息的方法。

// Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);echo Locale::acceptFromHttp('en_US'), PHP_EOL; // en_USecho Locale::acceptFromHttp('en_AU'), PHP_EOL; // en_AUecho Locale::acceptFromHttp('zh_CN'), PHP_EOL; // zhecho Locale::acceptFromHttp('zh_TW'), PHP_EOL; // zh

不过从测试的结果来说,其实它只需要一个字符串参数就可以了,所以我们在命令行也可以测试它。需要注意的是,对于中文来说,它不能返回区域信息,只能返回 language 信息。

感谢各位的阅读!关于“PHP中针对区域语言标记信息的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: PHP中针对区域语言标记信息的示例分析

本文链接: https://lsjlt.com/news/296803.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP中针对区域语言标记信息的示例分析
    这篇文章给大家分享的是有关PHP中针对区域语言标记信息的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。获取及设置当前的区域语言信息首先就是我们可以动态地获取和设置相应的区域语言信息。// #&n...
    99+
    2023-06-20
  • PHP中针对区域语言标记信息的操作
    相信大家对 zh_CN 这个东西绝对不会陌生,不管是 PHP 中,还是在我们的网页上,都会见到它的身影。其实这就是指定我们的显示编码是什么国家或者地区的,使用何种语言。对于这种区域语...
    99+
    2024-04-02
  • PHP中区域语言信息的示例分析
    小编给大家分享一下PHP中区域语言信息的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHP中针对区域语言标记信息的操作相信大家对 zh_CN 这个东西绝...
    99+
    2023-06-20
  • PHP中怎么操作区域语言标记信息
    小编给大家分享一下PHP中怎么操作区域语言标记信息,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相信大家对zh_CN这个东西绝对不会陌生,不管是PHP中,还是在我...
    99+
    2023-06-20
  • html中区断标记的示例分析
    这篇文章主要介绍了html中区断标记的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 <hr>水平线 <hr ...
    99+
    2024-04-02
  • php中artisan命令信息的示例分析
    这篇文章主要为大家展示了“php中artisan命令信息的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中artisan命令信息的示例分析”这篇文章吧。php artisan 命令...
    99+
    2023-06-20
  • Go语言使用指针的示例分析
    这篇文章给大家分享的是有关Go语言使用指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。普通指针和C语言一样, 允许用一个变量来存放其它变量的地址, 这种专门用于存储其它变量地址的变量, 我们称之为指针...
    99+
    2023-06-20
  • Java中回收对象标记和对象二次标记的示例分析
    这篇文章主要介绍Java中回收对象标记和对象二次标记的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、对象的标记什么是标记?怎么标记?      ...
    99+
    2023-05-31
    java
  • C语言结构体指针的示例分析
    这篇文章给大家分享的是有关C语言结构体指针的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。写结构体指针前,先说一下 . 号和 -> 的区别记得当初刚学C语言的...
    99+
    2023-06-20
  • VB.NET语言与VB语言对比的示例分析
    小编给大家分享一下VB.NET语言与VB语言对比的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!VB.NET语法对比旧语法 新语法 说明窗体装载事件,类初始化事件 Sub New procedure Sub New...
    99+
    2023-06-17
  • C语言中返回值指针函数的示例分析
    这篇文章主要为大家展示了“C语言中返回值指针函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中返回值指针函数的示例分析”这篇文章吧。   #inc...
    99+
    2023-06-29
  • C语言指针综合应用的示例分析
    这篇文章将为大家详细讲解有关C语言指针综合应用的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针是什么?指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简...
    99+
    2023-06-29
  • HTML中结束标记的示例分析
    这篇文章将为大家详细讲解有关HTML中结束标记的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 此前在HTML中,XHTML(指div css开发)申请有谨严的...
    99+
    2024-04-02
  • App中应用图标标记的示例分析
    这篇文章将为大家详细讲解有关App中应用图标标记的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、概念应用图标标记,称为Badge App Icon。Badge,徽章,具象来说,就...
    99+
    2023-06-19
  • c语言中缓冲区问题的示例分析
    这篇文章主要介绍了c语言中缓冲区问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。发现问题你是不是总会出现当你输入的时候(你想的是只输出一个内容),但是最后却输入两...
    99+
    2023-06-25
  • PHP随机生成用户信息的示例分析
    这篇文章将为大家详细讲解有关PHP随机生成用户信息的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。下面给大家介绍如何随机生成用户信息(号码、名字、时间)。随机生成号码function...
    99+
    2023-06-22
  • HTML5中语义标签的示例分析
    小编给大家分享一下HTML5中语义标签的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在HTML5标准中,新加了几个用于...
    99+
    2024-04-02
  • R语言中的MongoDB的示例分析
    今天就跟大家聊聊有关R语言中的MongoDB的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。R利剑MongeDB,分为4个章节。MongoD...
    99+
    2024-04-02
  • linux中C语言开发管道通信的示例分析
    这篇文章主要介绍了linux中C语言开发管道通信的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。linux C语言开发管道通信   Linux系统...
    99+
    2023-06-09
  • PHP Hash信息摘要扩展框架的示例分析
    这篇文章主要介绍PHP Hash信息摘要扩展框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PHP的Hash信息摘要扩展框架今天我们主要学习的是 PHP 中一些 Hash 散列加密相关的扩展函数的使用,而...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作