Zend_Locale の使用法注意:このドキュメントでは、英語版のリビジョン 22755 の更新内容をスキップしています。 Zend_Locale は、各ロケールについての情報も、 自分自身のロケールに合わせた形式で提供します。 たとえば他のロケールの名前や曜日名、月名などがこれにあたります。 ロケールオブジェクトのコピー、クローン作成およびシリアライズ
» オブジェクトのクローンを作成し、
ロケールオブジェクトを正確かつ効率的に複製できます。
ロケール対応のメソッドのほとんどは、 Example #1 clone
等式Zend_Locale は、 二つのロケールを比較するための便利な関数も提供しています。 ロケール対応のクラスはすべて、これと同等の同一性チェック機能を提供しなければなりません。 Example #2 ロケールが同一かどうかの調査
デフォルトのロケールgetDefault() メソッドは、関連するロケールの配列を返します。 これは、ユーザのウェブブラウザからの情報 (取得できる場合)、 ホストサーバの環境変数および Zend Framework の設定をもとに取得します。 Zend_Locale のコンストラクタの最初のパラメータで、 (BROWSER、ENVIRONMENT あるいは FRAMEWORK のうちの) どの情報を優先するかを選択します。 二番目のパラメータでは、マッチしたロケールをすべて返すのか あるいは最初にマッチした/一番マッチしたものを返すのかを指定します。 ロケール対応のコンポーネントは、通常は最初のロケールのみを使用します。 優先度が指定されている場合は、それも考慮します。 Example #3 デフォルトロケールの取得 BROWSER、ENVIRONMENT あるいは FRAMEWORK のいずれかに対応するデフォルトロケールを取得するには、 それぞれ対応するメソッドを使用します。
新しいロケールの設定新しいロケールを設定するには、関数 setLocale() を使用します。この関数は、ロケール文字列をパラメータとして受け取ります。 ロケールを省略した場合は、ロケールが 自動的に選択 されます。 言語および地域の取得getLanguage() を使用して、二文字の言語コード文字列を ロケール識別文字列から取得します。また、 getRegion() を使用して、二文字の地域コード文字列を ロケール識別文字列から取得します。 領域を指定してロケールを取得When you only have the territory or country then it's also possible to get a locale from that information. You can manually search if there is a locale for this territory by using getLocaleToTerritory(). This method returns a locale for the given territory or NULL when there was has no locale been found. Example #6 getLocaleToTerritory
地域化された文字列の取得getTranslationList() を使用すると、地域化された情報を利用できます。 これらの情報は、各地域に特化したデータを顧客に対して提供する際に 翻訳の必要がなくなるので便利です。 これらはすでに使用可能となっています。 情報の一覧は、常に連想配列形式で返されます。 複数の値を明示的な型に渡したい場合は、複数の値ではなく配列を渡す必要があります。 Example #7 getTranslationList すべての言語についてこの情報を取得できます。しかし、 言語によってはすべての情報が提供されているわけではないものもあります。 これらの型のいくつかについては、その型に特化した関数を用意して簡単に使用できるようにしています。 詳細はこの一覧を参照ください。
単一の翻訳データがほしい場合は、 getTranslation() を使用します。 この関数は常に文字列を返しますが、 getTranslationList() メソッドよりも多くの型を使用できます。 また、値についても一点を除いて同じです。 取得したい値について、詳細を指定する必要があります。
詳細な情報は、次の表を参照ください。
以下の例は、さまざまな言語でのものの名前を取得する方法を示すものです。 Example #8 getTranslationList
次の例は、ある言語の名前を別の言語でどのようにいうのかを、 二文字の ISO 国コードを知らない場合に調べるものです。 Example #9 国の名前を、ある言語から別の言語に変換する
Zend_Locale で使用できるすべての言語の一覧を、それぞれの言語での表記で取得するには、
以下の例をウェブページで使用してみましょう。
同様に getCountryTranslationList() および
getCountryTranslation() を使用すると、
あなたのネイティブ言語での地域名と別の言語での地域名の対応表を作成できます。
Example #10 すべての言語を、その国のネイティブ言語で書き出す "yes" および "no" に対応する翻訳の取得プログラム上で、ユーザに "はい" あるいは "いいえ" で答えてもらうことがよくあります。 getQuestion() を使用すると、 ユーザに問い合わせるときに使用する単語あるいは正規表現文字列を含む配列を、 特定の $locale (デフォルトは、そのオブジェクトのロケール) にあわせて返します。 返される配列の中身は次のようになります。
これらのすべての情報は当然地域化されており、 設定されているロケールによって変化します。 以下の例で、どのような情報が取得できるのかを確認してみましょう。 Example #11 getQuestion()
既知のロケールの一覧の取得すべての既知のロケールの一覧を取得したいこともあるでしょう。 たとえば、ロケール選択用の select 要素を作成する場合などに必要となるはずです。 このようなときには、静的メソッド getLocaleList() を使用します。 このメソッドは、すべての既知のロケールの一覧を返します。 Example #12 getLocaleList()
ロケールの検出指定した入力がロケールかどうかを知りたい場合は、静的メソッド isLocale() を使用します。 このメソッドの最初のパラメータとして、調べたい文字列を指定します。 Example #13 シンプルなロケールの検出 ごらんのとおり、このメソッドの出力は常に boolean となります。 このメソッドをコールして唯一例外が発生するのは、 システム側でロケールを一切提供しておらず、Zend Framework がロケールを自動検出できなかった場合です。 通常、このような場合は、ご利用の OS 上で PHP の setlocale() がうまく動作しないでしょう。
指定したロケールに地域部が存在しない場合でも、
自動的に地域部をはずして検出してくれることにもお気づきでしょう。
先ほどの例では、言語
しかし、この自動変換機能がじゃまになることもあるでしょう。そんな場合には
isLocale() の 2 番目のパラメータを使用します。
Example #14 厳格なロケール検出 これで指定した文字列がロケールかどうかを判別できるようになったので、 自作のクラスでロケール対応の処理ができるようになりました。 しかし、すでにお気づきかもしれませんが、毎回のように次のような 15 行のコードを書かなければならないことになってしまいます。 Example #15 ロケールに対応した振る舞いの実装
Zend Framework 1.8 で、静的メソッド findLocale() が追加されました。これは、現在使用中のロケール文字列を返します。 このメソッドは、次のような処理を行います。
次の例は、さきほどのコードをたったひとつのメソッドコールで置き換えるものです。 Example #16 Zend Framework 1.8 以降でのロケール対応の振る舞いの実装
|