PHP学习_浅谈PHP中如何操作区域语言标记信息?

2021-09-10 0 287 百度已收录

PHP中若何针对于地区言语标志信息停止操纵?上面本篇文章给大师介绍介绍一下PHP中针对于地区言语标志信息的操纵,但愿对于大师有所协助!

PHP学习_浅谈PHP中如何操作区域语言标记信息?

置信大师对于 zh_CN 这个工具相对没有会生疏,不论是 PHP 中,仍是正在咱们的网页上,城市见到它的身影。实在这便是指定咱们的表现编码是甚么国度或许地域的,运用何种言语。关于这类地区言语的标志来讲,PHP 中也有良多好玩的内容。明天,咱们要进修的 Locale 类便是操纵地区言语相关内容的,它没法被实例化,一切局部功用办法都是动态的。

获得及配置以后的地区言语信息

起首便是咱们能够静态地获得以及配置响应的地区言语信息。

// # echo $LANG;
// en_US.UTF-8

// php.ini
// intl.default_locale => no value => no value

echo Locale::getDefault(), PHP_EOL; // en_US_POSIX
ini_set('intl.default_locale', 'zh_CN');
echo Locale::getDefault(), PHP_EOL; // zh_CN
Locale::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; // cmn
echo 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_PINYIN
echo 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_US
echo Locale::acceptFromHttp('en_AU'), PHP_EOL; // en_AU

echo Locale::acceptFromHttp('zh_CN'), PHP_EOL; // zh
echo Locale::acceptFromHttp('zh_TW'), PHP_EOL; // zh

不外从测试的后果来讲,实在它只要要一个字符串参数就能够了,以是咱们正在饬令行也能够测试它。需求留意的是,关于中文来讲,它不克不及前往地区信息,只能前往 language 信息。

总结

这个 Locale 类相关的内容实在正在笔者一样平常的开辟中根本没怎样打仗过,但置信很多做跨境名目的同窗会几多对于它们会有一些理解。只能说营业打仗没有到,那就只能先复杂地进修一下看看了,异样地,当前大师碰到相关的营业需要时,别忘了它们的存正在哦!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/5.PHP中针对于地区言语标志信息的操纵.php

参考文档:

https://www.php.net/manual/zh/class.locale.php

https://www.zhihu.com/question/20797118/answer/63480740

推选进修:《PHP视频教程

以上便是浅谈PHP中若何操纵地区言语标志信息?的具体内容,更多请存眷酷吧易资源网别的相关文章!

 

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

酷吧易资源网 PHP教程 PHP学习_浅谈PHP中如何操作区域语言标记信息? https://www.kubayi.com/7666.html

常见问题

相关文章

评论
暂无评论