ホームページ >バックエンド開発 >PHPチュートリアル >PHP で地域言語タグ情報を操作する方法について簡単に説明します。

PHP で地域言語タグ情報を操作する方法について簡単に説明します。

青灯夜游
青灯夜游転載
2021-09-09 19:53:263410ブラウズ

PHP で地域言語タグ情報を操作するにはどうすればよいですか?次の記事では、PHP における地域言語のマークアップ情報の操作について説明します。

PHP で地域言語タグ情報を操作する方法について簡単に説明します。

zh_CN については、誰もがよく知っていると思いますが、PHP であれ、Web ページであれ、目にすることになるでしょう。実際、これは表示エンコーディングがどの国または地域であるか、およびどの言語が使用されているかを指定するためです。 PHP には、地域言語のマークアップを行うための楽しい機能もあります。今日、学習する Locale クラスは、地域言語関連のコンテンツを操作するためのもので、インスタンス化できず、すべての関数メソッドが静的です。

現在の地域言語情報を取得および設定する

1 つ目は、対応する地域言語情報を動的に取得および設定できることです。

// # 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

デフォルトでは、php.ini ファイル内の intl.default_locale 設定の内容は getDefault() メソッドを使用して取得されます。 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 言語タイプ、ハンス記述形式は簡体字中国語、cmn 北京語、CN 諸国および地域、ラテン文字のバリエーション、ピンインのバリエーション、ピンイン。

とても単純なものが、突然とても大きくなったような気がしませんか?さらに、接頭辞 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

2 つのマーキング方法を使用してコードをテストし、結果の比較を確認できます。

  • 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()メソッドを使用して、言語タグ内のさまざまな情報を取得し、配列に保存します。キーはタグルール名、値は対応する内容です。それが同じであるかどうかを確認してください上で紹介したものと内容は同じです。

すべてのバリアント情報の取得

上記のコードからわかるように、2 つのバリアント情報があり、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() メソッドは、標準化された方法で言語記号情報を表示するために使用されます。 into 下線を引き、以下の属性を大文字に変換するのが標準的な書き方です。ただし、アプリケーションと Web ページでは、アンダースコアと大文字と小文字がサポートされています。もちろん、誰もが標準的な書き方に従って定義するのが最善です。

getKeywords() は、定義した zh-cn などの @ 記号から言語関連の情報属性を取得するために使用され、getKeywords を通じて直接その通貨を 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 类相关的内容其实在笔者日常的开发中基本没怎么接触过,但相信不少做跨境项目的同学会多少对它们会有一些了解。只能说业务接触不到,那就只能先简单地学习一下看看了,同样地,以后大家遇到相关的业务需求时,别忘了它们的存在哦!

测试代码:

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 で地域言語タグ情報を操作する方法について簡単に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。