加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

畅聊PHP中如何操作区域语言标记信息?

发布时间:2022-08-03 16:01:39 所属栏目:PHP教程 来源:互联网
导读:PHP中如何针对区域语言标记信息进行操作?下面本篇文章给大家介绍介绍一下PHP中针对区域语言标记信息的操作,希望对大家有所帮助! 相信大家对 zh_CN 这个东西绝对不会陌生,不管是 PHP 中,还是在我们的网页上,都会见到它的身影。其实这就是指定我们的显示
  PHP中如何针对区域语言标记信息进行操作?下面本篇文章给大家介绍介绍一下PHP中针对区域语言标记信息的操作,希望对大家有所帮助!
 
 
  相信大家对 zh_CN 这个东西绝对不会陌生,不管是 PHP 中,还是在我们的网页上,都会见到它的身影。其实这就是指定我们的显示编码是什么国家或者地区的,使用何种语言。对于这种区域语言的标记来说,PHP 中也有很多好玩的内容。今天,我们要学习的 Locale 类就是操作区域语言相关内容的,它无法被实例化,所有全部功能方法都是静态的。
 
  获取及设置当前的区域语言信息
  首先就是我们可以动态地获取和设置相应的区域语言信息。
 
  // 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 标识书写格式为繁体中文即可。
 
  关于语言标记规则的内容,大家可以看看文末知乎的参考链接,介绍的更为详尽。
 
 
  // 一百二十三萬四千五百六十七點八九一二三四五六七九
 
  获取指定语言标记规则中的各类信息
  学习了语言标记的规则之后能干什么呢?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) {
 
 
  // 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',
 
 
  $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

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读