[PHP](译)ローカリゼーションの謎を解く: 誰でも使える Php-Intl
元のアドレス: https://www.sitepoint.com/localization-demystified- Understanding-php-intl/
ほとんどのアプリケーション実行サイトが認識可能テキスト、日付、タイムゾーンなどの処理などの操作。 PHP Intl 拡張機能は、よく知られた ICU ライブラリの関数に接続するための優れた API を提供します。
インストール
この拡張機能は、PHP 5.3 以降にデフォルトでインストールされます。次のコマンドで見つけることができます:
php -m | grep 'intl'
この拡張機能は存在しません。インストール ガイドに従って手動でインストールできます。 Ubuntu を使用している場合は、次のコマンドを使用して直接インストールできます:
sudoapt-getupdatesudoapt-getinstallphp5-intl
PHP 7 を使用している場合は、PPA (ppa:ondrej/php) を追加する必要があります。システムをアップグレードし、拡張機能 Intl をインストールします。
# 添加 PPAsudoadd-apt-repositoryppa:ondrej/php-7.0# 升级索引库sudoapt-getupdate# 安装扩展功能sudoapt-getinstallphp7.0-intl
メッセージの書式設定
最新のアプリケーションのほとんどは、ローカルな注意を念頭に置いて構築されています。メッセージは、変数プレースホルダーを含む単純な文字列である場合もあれば、複雑な多重化された文字列である場合もあります。
シンプルなメッセージ
プレースホルダーを含むシンプルなメッセージから始めます。プレースホルダーは中括弧で囲まれた文字です。以下に例を示します。
var_dump( MessageFormatter::formatMessage( "en_US", "I have {0, number, integer} apples.", [ 3 ] )); // output string(16) "I have 3 apples."
フィードを MessageFormatter::formatMessage に渡すクラス関数は次のとおりです。
- メッセージのロケール
- メッセージ文字列
- プレースホルダー データ
プレースホルダー {0,number,integer} は、データベース配列の最初の項目として数値 - 整数を入力します ( Takeオプションをリストした以下の表を見てください) プレースホルダーで名前付きパラメーターを使用することもできます。次の例では、同じ結果が出力されます。
var_dump( MessageFormatter::formatMessage( "en_US", "I have {number_apples, number, integer} apples.", [ 'number_apples' => 3 ] ));
アラビア語、インド語など、言語によって数字の書き方が異なります。
前の例は en_US 環境を指していましたが、ar 環境に切り替えて違いを見てみましょう。
var_dump( MessageFormatter::formatMessage( "ar", "I have {number_apples, number, integer} apples.", [ 'number_apples' => 3 ] )); string(17) "I have ٣ apples."
再びベンガル語のシナリオ ( bn ) に切り替えましょう。
var_dump( MessageFormatter::formatMessage( "bn", "I have {number_apples, number, integer} apples.", [ 'number_apples' => 3 ] )); string(18) "I have ৩ apples."
ここまでは数字のみを述べてきました。次に、使用できる他のタイプを見てみましょう。
$time = time();var_dump( MessageFormatter::formatMessage( "en_US", "Today is {0, date, full} - {0, time}", array( $time )) ); string(47) "Today is Wednesday, April 6, 2016 - 11:21:47 PM"
var_dump( MessageFormatter::formatMessage( "en_US", "duration: {0, duration}", array( $time )) ); string(23) "duration: 405,551:27:58"
分数も表現できます。
var_dump( MessageFormatter::formatMessage( "en_US", "I have {0, spellout} apples", array( 34 )) ); string(25) "I have thirty-four apples"
これは、さまざまなロケールでも機能します。
var_dump( MessageFormatter::formatMessage( "ar", "لدي {0, spellout} تفاحة", array( 34 )) ); string(44) "لدي أربعة و ثلاثون تفاحة"
多様化
アプリケーションのローカライズの重要な部分は、ユーザー インターフェイスを可能な限り直観的なものにするために多様な情報を管理することです。上の Apple の例は、この点を示しています。この例では、情報がどのように表示されるかを次に示します。
- (number_apples = 0) : リンゴはありません。
- (number_apples = 1) : リンゴ 1 個。
- (number_apples > 1) : 複数のリンゴ。
var_dump( MessageFormatter::formatMessage( "en_US", 'I have {number_apples, plural, =0{no apples} =1{one apple} other{# apples}}', array('number_apples' => 10)) );
// number_apples = 0string(16) "I have no apples" // number_apples = 1string(16) "I have one apple" // number_apples = 10string(16) "I have 10 apples"
この構文は非常にシンプルで簡単で、ほとんどのパッケージに含まれています。詳細については、このドキュメントを参照してください。
{data, plural, offsetValue =value{message}... other{message}}
- データ : 値インデックス
- 複数形 : イベントパラメーターの型
- offsetValue : オプション ( offset:value )。値からオフセットを減算します。
- =value{message}: 同等性をテストします。メッセージは中括弧内にあります。これを複数回繰り返すことができます ( =0{リンゴなし} =1{リンゴ 1 個} =2{リンゴ 2 個} )。
- other{message}: switch - case ステートメントなどのデフォルトのケース。 # 記号を使用してデータ値を入力できます。
オプション
場合によっては、値の範囲ごとに異なる情報をリストする必要があります。たとえば、次の例:
var_dump( MessageFormatter::formatMessage( "en_US", 'The value of {0,number} is {0, choice, 0 # between 0 and 19 | 20 # between 20 and 39 | 40 # between 40 and 59 | 60 # between 60 and 79 | 80 # between 80 and 100 | 100 < more than 100 }', array(60)) ); string(38) "The value of 60 is between 60 and 79 "
argType はここで選択できるように設定されており、構文は次のとおりです:
{value, choice, choiceStyle}
ICU ファイル の正式な定義は次のとおりです:
choiceStyle = numberseparatormessage ('|' numberseparatormessage)* number = normal_number | ['-'] ∞ (U+221E, infinity)normal_number = double value (unlocalizedASCIIstring) separator = less_than | less_than_or_equalless_than = '<'less_than_or_equal = '#' | ≤ (U+2264)
注: ICU 開発者は選択タイプの使用を推奨していません。
選択
オプションの UI コンポーネントを選択する必要がある場合があります。プロフィール ページでは、このメソッドを使用して、ユーザーの性別などに基づいて UI 情報を更新します。以下に例を示します:
var_dump( MessageFormatter::formatMessage( "en_US", "{gender, select, ". "female {She has some apples} ". "male {He has some apples.}". "other {It has some apples.}". "}", array('gender' => 'female')) );string(19) "She has some apples"
パターンは次のように定義されます:
{value, select, selectStyle} // selectStyleselectValue {message} (selectValue {message})*
メッセージ フィードには、オプションなどの他のパターンが含まれます。と複数形。次のセクションでは、複数のパターンを組み合わせた例について説明します。
複雑さ
これまで、選択、多様化などの簡単な例を見てきました。しかし、多くの状況はさらに複雑です。 ICU のドキュメントには、これを説明する良い例が記載されています。理解を容易にするために、部分的に見てみましょう。
var_dump( MessageFormatter::formatMessage( "en_US", "{gender_of_host, select, ". "female {She has a party} ". "male {He has some apples.}". "other {He has some apples.}". "}", array('gender_of_host' => 'female', "num_guests" => 5, 'host' => "Hanae", 'guest' => 'Younes' )) );
これは前に使用したのと同じ例ですが、以前の単純な情報を使用する代わりに、num_guests 値に依存してカスタマイズしました (多様化の場合について説明します)。
var_dump( MessageFormatter::formatMessage( "en_US", "{gender_of_host, select, ". "female {". "{num_guests, plural, offset:1 ". "=0 {{host} does not have a party.}". "=1 {{host} invites {guest} to her party.}". "=2 {{host} invites {guest} and one other person to her party.}". "other {{host} invites {guest} and # other people to her party.}}}". "male {He has some apples.}". "other {He has some apples.}}", array('gender_of_host' => 'female', "num_guests" => 5, 'host' => "Hanae", 'guest' => 'Younes' )) );
num_guests からゲストを削除するには offset:1 を使用することに注意してください。
string(53) "Hanae invites Younes and 4 other people to her party."
以下は例の完全な段落です。
var_dump( MessageFormatter::formatMessage( "en_US", "{gender_of_host, select, ". "female {". "{num_guests, plural, offset:1 ". "=0 {{host} does not have a party.}". "=1 {{host} invites {guest} to her party.}". "=2 {{host} invites {guest} and one other person to her party.}". "other {{host} invites {guest} and # other people to her party.}}}". "male {". "{num_guests, plural, offset:1 ". "=0 {{host} does not have a party.}". "=1 {{host} invites {guest} to his party.}". "=2 {{host} invites {guest} and one other person to his party.}". "other {{host} invites {guest} and # other people to his party.}}}". "other {". "{num_guests, plural, offset:1 ". "=0 {{host} does not have a party.}". "=1 {{host} invites {guest} to their party.}". "=2 {{host} invites {guest} and one other person to their party.}". "other {{host} invites {guest} and # other people to their party.}}}}", array('gender_of_host' => 'female', "num_guests" => 5, 'host' => "Hanae", 'guest' => 'Younes' )) );
改变客人的数量来测试所有的信息类型:
// num_guests = 2string(55) "Hanae invites Younes and one other person to her party." // num_guests = 1string(34) "Hanae invites Younes to her party." // num_guests = 0string(28) "Hanae does not have a party."
消息解析
对于解析信息没有太多可以说;我们使用之前的模式从输出信息中来格式化额外信息。
$messageFormater = new MessageFormatter("en_US", 'I have {0, number}');var_dump( $messageFormater->parse("I have 10 apples") ); array(1) { [0]=> int(10)}
查看 文档 以获取更多关于信息解析的内容。
结论
在这篇介绍性的文章中,我们了解了使用 PHP Intel 的扩展功能来本地化我们的信息。接下来的部分会涉及格式化数字和日期,以及日历的使用。如果你对以上内容有任何疑惑,请给我们留言。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
