>  기사  >  백엔드 개발  >  PHP에서 지역 언어 태그 정보를 조작하는 방법

PHP에서 지역 언어 태그 정보를 조작하는 방법

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-07-01 15:26:001894검색

저는 모든 사람이 zh_CN에 대해 확실히 잘 알고 있다고 믿습니다. PHP에 있든 우리 웹사이트에 있든 여러분은 그것을 볼 수 있을 것입니다. 실제로 이는 디스플레이 인코딩이 어느 국가 또는 지역인지, 그리고 어떤 언어가 사용되는지를 지정하는 것입니다. 오늘 배울 내용은 지역별 언어 관련 컨텐츠를 운용하는 Locale 클래스입니다.

PHP에서 지역 언어 태그 정보를 조작하는 방법

PHP든 웹페이지든 모두가 zh_CN에 대해 잘 알고 있을 거라 믿습니다. 실제로 이는 디스플레이 인코딩이 어느 국가 또는 지역인지, 그리고 어떤 언어가 사용되는지를 지정하는 것입니다. 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-Hans-CN-Latn-pinyin

는 다음을 나타냅니다: zh 언어 및 문자 유형, Hans 작성 형식은 중국어 간체, cmn 중국어, CN 국가 및 지역, Latn 변형입니다. 라틴 알파벳, 병음 변형 병음.

단순한 일이 갑자기 커지는 기분이 드시나요? 또한 접두사 zh-는 더 이상 권장되지 않습니다. zh-는 더 이상 언어 코드가 아니라 매크로 언어인 매크로랭입니다. cmn, yue(광둥어), wuu(우어 방언), hsn(후난 방언)을 직접 사용합니다. , 후난 방언)을 언어로 사용할 수 있습니다. 따라서 위 단락은 다음과 같이 작성할 수도 있습니다.

cmn-Hans-CN-Latn-pinyin

지난 기사에서 NumberFormatter에 대해 이야기할 때 중국어 숫자 형식의 출력을 직접 얻을 수 있다고 말했습니다. 이제 우리가 원하는 전통적인 결과는 무엇입니까? 매우 간단합니다. 중국어 번체에 Hant 로고 작성 형식을 추가하기만 하면 됩니다.

언어 마크업 규칙의 내용에 대해서는 기사 마지막 부분에 있는 Zhihu의 참조 링크를 확인하시면 더 자세한 소개를 보실 수 있습니다.

$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() 메서드는 규칙의 언어 콘텐츠인 표시 언어 정보를 얻는 데 사용됩니다.

  • 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로 직접 사용할 수 있습니다. 통화 및 문자 집합 속성의 배열을 가져옵니다.

匹配判断语言标记信息

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

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 类相关的内容其实在笔者日常的开发中基本没怎么接触过,但相信不少做跨境项目的同学应该多少对它们会有一些了解。只能说业务接触不到,那就只能先简单地学习一下看看了,同样地,以后大家遇到相关的业务需求时,别忘了它们的存在哦!

推荐学习:php视频教程

위 내용은 PHP에서 지역 언어 태그 정보를 조작하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제