PHP 에서 지역 언어 로 정 보 를 표시 하 는 동작

8585 단어 PHP언어.표기
여러분 이 zhCN 이라는 물건 은 절대 낯 설 지 않 습 니 다.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 는 운영 체제 에서 온 설정 을 나타 낸다.
사용 iniset()는 ini 의 설정 을 직접 수정 하거나 setDefault()방법 을 사용 하면 현재 지역 언어 설정 을 동적 으로 수정 할 수 있 습 니 다.
언어 태그 에 대한 규칙
아래 의 내용 을 계속 공부 하기 전에 우 리 는 먼저 언어 표기 의 규범 을 배 워 보 자.대부분의 사람들 에 게 en 만 접 해 봤 을 수도 있 습 니 다.US 、 zh_CN 과 같은 표 시 는 사실 그것 의 완전한 정 의 는 매우 길다.다만 우리 가 이런 약자 방식 을 사용 할 때 많은 내용 이 기본 적 인 형식 으로 제공 된다.전체 태그 규칙 은:
language-extlang-script-region-variant-extension-privateuse
언어 문자 종류-확장 언어 문자 종류-쓰기 형식-국가 와 지역-변형-확장-사유
그 러 니까 우리 zhCN 은 이렇게 쓸 수 있다.
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; 
//      f       c          
지정 한 언어 태그 규칙 의 각종 정 보 를 가 져 옵 니 다.
언어 표기 의 규칙 을 배 워 서 무엇 을 할 수 있 습 니까?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
    맞 아,copose Locale()방법 은 하나의 배열 형식의 내용 에 따라 완전한 표준 언어 표기 형식 내용 을 생 성 할 수 있어.물론 이 테스트 코드 는 낙서 로 en 에 해당 합 니 다.CN 의 표 시 는 정상적으로 이렇게 쓰 지 않 을 것 이다.
    acceptFromHttp 요청 헤더 에서 언어 정 보 를 읽 습 니 다.
    또한 Locale 클래스 에 서 는 헤더 의 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://www.php.net/manual/zh/class.locale.php
    https://www.zhihu.com/question/20797118/answer/63480740
    PHP 에서 지역 언어 표기 정 보 를 다 루 는 동작 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 PHP 지역 언어 표기 정보 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기