Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in regionale Sprachinformationen in PHP

Einführung in regionale Sprachinformationen in PHP

藏色散人
藏色散人nach vorne
2021-07-07 09:09:252927Durchsuche

Betrieb regionaler Sprach-Markup-Informationen in PHP

Ich glaube, dass jeder mit zh_CN vertraut ist, egal ob in PHP oder auf unserer Webseite, Sie werden es sehen. Tatsächlich dient dies dazu, anzugeben, welches Land oder welche Region unsere Anzeigekodierung ist und welche Sprache verwendet wird. PHP macht auch viel Spaß beim Markup regionaler Sprachen. Die Locale-Klasse, die wir heute lernen werden, dient der Verarbeitung regionalsprachlicher Inhalte. Sie kann nicht instanziiert werden und alle funktionalen Methoden sind statisch.

Holen Sie sich die aktuellen regionalen Sprachinformationen und legen Sie sie fest

Das erste ist, dass wir die entsprechenden regionalen Sprachinformationen dynamisch abrufen und einstellen können.

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

Standardmäßig wird mit der Methode getDefault() der durch intl.default_locale in der Datei php.ini konfigurierte Inhalt abgerufen. Wenn in php.ini keine Konfiguration vorhanden ist, wird der Inhalt des $LANG-Werts des Betriebssystems übernommen, was in unserem Beispiel oben die Ausgabe en_US_POSIX darstellt, die die Konfiguration des Betriebssystems darstellt.

Verwenden Sie ini_set(), um die INI-Konfiguration direkt zu ändern, oder verwenden Sie die setDefault()-Methode, um die aktuellen regionalen Spracheinstellungen dynamisch zu ändern.

Über die Regeln von Sprach-Tags

Bevor wir den folgenden Inhalt weiter studieren, lernen wir zunächst die Spezifikationen von Sprach-Tags kennen. Für die meisten Menschen waren sie vielleicht nur Tags wie en_US und zh_CN ausgesetzt, aber tatsächlich ist die vollständige Definition sehr lang, aber wenn wir diese Abkürzung verwenden, werden viele Inhalte in der Standardform bereitgestellt. Die vollständigen Tagging-Regeln lauten:

language-extlang-script-region-variant-extension-privateuse

Sprache und Zeichentyp-erweiterte Sprache und Zeichentyp-Schreibformat-Land und Region-Variantenerweiterung-privat

Mit anderen Worten, unser zh_CN kann wie folgt geschrieben werden:

zh-cmn-Hans-CN-Latn-pinyin

repräsentiert : zh-Sprachtyp, Hans-Schreibformat ist vereinfachtes Chinesisch, cmn Mandarin, CN-Land und -Region, lateinische Variante des lateinischen Alphabets, Pinyin-Variante Pinyin.

Haben Sie das Gefühl, dass etwas so Einfaches plötzlich so groß wird? Darüber hinaus wird das Präfix zh- nicht mehr als Sprachcode empfohlen, sondern als Makrosprache. Wir verwenden direkt cmn, yue (Kantonesisch), wuu (Wu-Dialekt), hsn (Hunan-Dialekt). , Hunan-Dialekt) kann als Sprache verwendet werden. Daher kann der obige Absatz auch so geschrieben werden:

rrree

Als wir im letzten Artikel über NumberFormatter sprachen, sagten wir, dass wir die Ausgabe des chinesischen Zahlenformats direkt erhalten können. Was wollen wir nun als traditionelles Ergebnis? Es ist ganz einfach: Fügen Sie einfach das Hant-Logo-Schreibformat zum traditionellen Chinesisch hinzu.

Was den Inhalt der Sprachauszeichnungsregeln betrifft, können Sie sich den Referenzlink zu Zhihu am Ende des Artikels ansehen, um eine detailliertere Einführung zu erhalten.

cmn-Hans-CN-Latn-pinyin

Erhalten Sie verschiedene Informationen zu den angegebenen Sprach-Tagging-Regeln

Was können Sie tun, nachdem Sie die Sprach-Tagging-Regeln gelernt haben? Die Hauptfunktion der Locale-Klasse besteht darin, diese Attributinformationen zu analysieren und abzurufen.

Erfassen Sie verschiedene Attributinformationen separat.

$fmt = new NumberFormatter('zh-Hant', NumberFormatter::SPELLOUT);
echo $fmt->format(1234567.891234567890000), PHP_EOL; 
// 一百二十三萬四千五百六十七點八九一二三四五六七九

Wir verwenden zwei Markierungsmethoden, um den Code zu testen, und Sie können den Vergleich der Ergebnisse sehen. Die Methode

getDisplayLanguage() wird verwendet, um die angezeigten Sprachinformationen abzurufen, bei denen es sich um den Sprachinhalt in den Regeln handelt.

Die Methode getDisplayName() wird verwendet, um den Standardsprachennamen abzurufen, und Sie können sehen, dass der Inhalt umfangreicher ist.

Die Methode getDisplayRegion() ruft offensichtlich die Länderinformationen ab.

getDisplayScript() ruft die Informationen zum Schreibformat ab.

getDisplayVariant() ruft Varianteninformationen ab

Attributinformationen stapelweise abrufen

Natürlich können wir auch einige sprachbezogene Informationen stapelweise abrufen.

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

Verwenden Sie die Methode parseLocale(), um verschiedene Informationen in einem Sprach-Tag abzurufen und in einem Array zu speichern. Der Schlüssel ist der Name der Tag-Regel und der Wert ist der entsprechende Inhalt . von.

Alle Varianteninformationen abrufen

Wie Sie dem obigen Code entnehmen können, verfügen wir über zwei Varianteninformationen. Dies kann auch verwendet werden, um über eine getAllVariants()-Methode direkt ein Array aller Varianteninformationen im Sprach-Tag abzurufen. . Die Methode

$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() wird verwendet, um Sprachmarkierungsinformationen auf standardisierte Weise anzuzeigen. Sie können sehen, dass sie unsere Unterstriche in Unterstriche umwandelt und verschiedene nachfolgende Attribute in Großbuchstaben umwandelt. Für unsere Anwendungen und Webseiten werden jedoch Unterstriche sowie Groß- und Kleinschreibung unterstützt. Natürlich ist es für jeden am besten, es gemäß der Standardschreibmethode zu definieren.

getKeywords() wird verwendet, um sprachbezogene Informationsattribute aus dem @-Symbol abzurufen, z. B. das von uns definierte zh-cn, und definiert dann seine Währung als CMY und den Zeichensatz als UTF-8. Sie können getKeywords() direkt verwenden. Ruft ein Array von Währungs- und Zeichensatzeigenschaften ab.

Übereinstimmende Beurteilung von Sprach-Tag-Informationen

Bei Sprach-Tags können wir beurteilen, ob die beiden angegebenen Tags miteinander übereinstimmen, wie zum Beispiel:

$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

Natürlich können wir auch eine andere lookup()-Methode verwenden, um zu bestimmen, welches von a Der gegebene Satz von Sprachtokens kommt einem angegebenen Token am nächsten.

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;

Generieren Sie ein Standard-Regelsprachen-Markup

既然能够获取各类语言标记的属性信息,那么我们能不能生成一个标准的语言标记内容呢?

$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

Das obige ist der detaillierte Inhalt vonEinführung in regionale Sprachinformationen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:硬核项目经理. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen