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 출력이며 운영 체제의 구성을 나타냅니다.
ini_set()을 사용하여 ini 구성을 직접 수정하거나 setDefault() 메서드를 사용하여 현재 지역 언어 설정을 동적으로 수정합니다.
언어 태그의 규칙에 대하여
다음 내용을 계속 공부하기 전에 먼저 언어 태그의 사양을 알아보겠습니다. 대부분의 사람들에게는 en_US, zh_CN 등의 태그에만 노출되었을 수도 있지만 사실 그 전체 정의는 매우 길지만, 이 약어를 사용하게 되면 많은 내용이 기본 형태로 제공되게 됩니다. 전체 태그 지정 규칙은 다음과 같습니다.
language-extlang-script-region-variant-extension-privateuse
언어 및 문자 유형 확장 언어 및 문자 유형 쓰기 형식-국가 및 지역-변형-확장-개인
즉, zh_CN은 다음과 같이 작성할 수 있습니다. : zh 언어 유형, 한스 쓰기 형식은 중국어 간체, cmn 중국어, CN 국가 및 지역, 라틴 변형 라틴 알파벳, 병음 변형 병음입니다.
단순한 일이 갑자기 커지는 기분이 드시나요? 또한 접두사 zh-는 더 이상 권장되지 않습니다. zh-는 더 이상 언어 코드가 아니라 매크로 언어인 매크로랭입니다. cmn, yue(광둥어), wuu(우어 방언), hsn(후난 방언)을 직접 사용합니다. , 후난 방언)을 언어로 사용할 수 있습니다. 따라서 위 단락은 다음과 같이 작성할 수도 있습니다.
zh-cmn-Hans-CN-Latn-pinyin
지난 기사에서 NumberFormatter에 대해 이야기할 때 중국어 숫자 형식의 출력을 직접 얻을 수 있다고 말했습니다. 이제 우리가 원하는 전통적인 결과는 무엇입니까? 매우 간단합니다. 중국어 번체에 Hant 로고 작성 형식을 추가하기만 하면 됩니다.
언어 마크업 규칙의 내용에 대해서는 기사 마지막 부분에 있는 Zhihu의 참조 링크를 확인하시면 더 자세한 소개를 보실 수 있습니다.
cmn-Hans-CN-Latn-pinyin
언어 태깅 규칙을 배우고 나면 무엇을 할 수 있나요? Locale 클래스의 주요 기능은 이러한 속성 정보를 분석하고 얻는 것입니다.
다양한 속성 정보를 별도로 획득$fmt = new NumberFormatter('zh-Hant', NumberFormatter::SPELLOUT);
echo $fmt->format(1234567.891234567890000), PHP_EOL;
// 一百二十三萬四千五百六十七點八九一二三四五六七九
getDisplayLanguage() 메서드는 규칙의 언어 콘텐츠인 표시 언어 정보를 가져오는 데 사용됩니다.
표준 언어 이름을 얻기 위해 getDisplayName() 메소드를 사용하는데, 내용이 더욱 풍부해진 것을 볼 수 있습니다.
getDisplayRegion() 메소드는 분명히 국가 정보를 얻습니다.
getDisplayScript()는 쓰기 형식 정보를 가져옵니다.
getDisplayVariant()는 변형 정보를 가져옵니다
속성 정보를 일괄적으로 가져옵니다물론 일부 언어 관련 정보도 일괄적으로 가져올 수 있습니다.
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
parseLocale() 메소드를 사용하여 언어 태그의 다양한 정보를 얻어서 배열에 저장합니다. 키는 태그 규칙 이름이고 값은 위에서 소개한 것과 동일한지 확인하세요. . 의.
모든 변형 정보 가져오기위 코드에서 볼 수 있듯이 두 가지 변형 정보가 있습니다. 이는 getAllVariants() 메서드를 통해 언어 태그의 모든 변형 정보 배열을 직접 얻는 데에도 사용할 수 있습니다. .
$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
canonicalize() 메소드는 언어 표시 정보를 표준화된 방식으로 표시하는 데 사용됩니다. 밑줄을 밑줄로 변경하고 다양한 후속 속성을 대문자로 변환하는 것을 볼 수 있습니다. 그러나 당사의 애플리케이션 및 웹 페이지에서는 밑줄과 대소문자가 지원됩니다. 물론, 모두가 표준적인 글쓰기 방법에 따라 정의하는 것이 가장 좋습니다.
getKeywords()는 우리가 정의한 zh-cn과 같은 @ 기호에서 언어 관련 정보 속성을 얻은 다음 해당 통화를 CMY로 정의하고 문자 집합을 UTF-8로 직접 사용할 수 있습니다. 통화 및 문자 집합 속성의 배열을 가져옵니다.
언어 태그 정보 일치 판단언어 태그의 경우 다음과 같이 주어진 두 태그가 서로 일치하는지 판단할 수 있습니다. 주어진 언어 토큰 세트가 지정된 토큰에 가장 가깝습니다.
$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
既然能够获取各类语言标记的属性信息,那么我们能不能生成一个标准的语言标记内容呢?
$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 信息。
推荐学习:《PHP视频教程》
总结
这个 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!