Previous Next

Zend_Locale の使用法

Zend_Locale は、各ロケールについての情報も、 自分自身のロケールに合わせた形式で提供します。 たとえば他のロケールの名前や曜日名、月名などがこれにあたります。

ロケールオブジェクトのコピー、クローン作成およびシリアライズ

» オブジェクトのクローンを作成し、 ロケールオブジェクトを正確かつ効率的に複製することができます。 ロケール対応のメソッドのほとんどは、$locale->toString() が返す文字列表現のロケールを受け付けます。

Example #1 clone

$locale = new Zend_Locale('ar');

// $locale オブジェクトをシリアライズして保存します
$serializedLocale = $locale->serialize();
// もとのオブジェクトを再度作成します
$localeObject = unserialize($serializedLocale);

// ロケールの文字列表記を取得します
$stringLocale = $locale->toString();

// $local オブジェクトの複製を作成します
$copiedLocale = clone $locale;

print "copied: ", $copiedLocale->toString();

// PHP は、__toString() 経由で自動的に toString() をコールします
print "copied: ", $copiedLocale;

等式

Zend_Locale は、 二つのロケールを比較するための便利な関数も提供しています。 ロケール対応のクラスはすべて、これと同等の同一性チェック機能を提供しなければなりません。

Example #2 ロケールが同一かどうかの調査

$locale = new Zend_Locale();
$mylocale = new Zend_Locale('en_US');

// ロケールが同一かどうかを調べます
if ($locale->equals($mylocale)) {
    print "これらのロケールは同一です";
}

デフォルトのロケール

getDefault() メソッドは、関連するロケールの配列を返します。 これは、ユーザのウェブブラウザからの情報 (取得できる場合)、 ホストサーバの環境変数および Zend Framework の設定をもとに取得します。 Zend_Locale のコンストラクタの最初のパラメータで、 (BROWSERENVIRONMENT あるいは FRAMEWORK のうちの) どの情報を優先するかを選択します。 二番目のパラメータでは、マッチしたロケールをすべて返すのか あるいは最初にマッチした/一番マッチしたものを返すのかを指定します。 ロケール対応のコンポーネントは、通常は最初のロケールのみを使用します。 優先度が指定されている場合は、それも考慮します。

Example #3 デフォルトロケールの取得

$locale = new Zend_Locale();

// すべてのデフォルトロケールを返します
$found = $locale->getDefault();
print_r($found);

// ブラウザのロケールのみを返します
$found2 = $locale->getDefault(Zend_Locale::BROWSER,TRUE);
print_r($found2);

BROWSERENVIRONMENT あるいは FRAMEWORK のいずれかに対応するデフォルトロケールを取得するには、 それぞれ対応するメソッドを使用します。

  • getEnvironment()

  • getBrowser()

  • getLocale()

新しいロケールの設定

新しいロケールを設定するには、関数 setLocale() を使用します。この関数は、ロケール文字列をパラメータとして受け取ります。 ロケールを省略した場合は、ロケールが 自動的に選択 されます。Zend_Locale オブジェクトは "light" なので、このメソッドは既存のインスタンスを参照しているすべてのコードに影響をおよぼします。

Example #4 setLocale

$locale = new Zend_Locale();

// 実際のロケール
print $locale->toString();

// 新しいロケール
$locale->setLocale('aa_DJ');
print $locale->toString();

言語および地域の取得

getLanguage() を使用して、二文字の言語コード文字列を ロケール識別文字列から取得します。また、 getRegion() を使用して、二文字の地域コード文字列を ロケール識別文字列から取得します。

Example #5 getLanguage および getRegion

$locale = new Zend_Locale();

// ロケールが 'ja_JP' の場合は、'ja' が言語として返されます
print $locale->getLanguage();

// ロケールが 'ja_JP' の場合は、地域として 'JP' が返されます
print $locale->getRegion();

地域化された文字列の取得

getTranslationList() を使用すると、地域化された情報を利用することができます。 これらの情報は、各地域に特化したデータを顧客に対して提供する際に 翻訳の必要がなくなるので便利です。 これらはすでに使用可能となっています。

情報の一覧は、常に連想配列形式で返されます。 複数の値を明示的な型に渡したい場合は、複数の値ではなく配列を渡す必要があります。

Example #6 getTranslationList

$list = Zend_Locale::getTranslationList('language', 'de_AT');

print_r ($list);
// キーと値の組み合わせの例...
// [de] -> Deutsch
// [en] -> Englisch

// これらのキーのいずれかを getTranslation() メソッドで使用します
print Zend_Locale::getTranslation('de', 'language', 'zh');
// これは、言語 'de' を中国語で表した文字列を返します

すべての言語についてこの情報を取得できます。しかし、 言語によってはすべての情報が提供されているわけではないものもあります。 これらの型のいくつかについては、その型に特化した関数を用意して簡単に使用できるようにしています。 詳細はこの一覧を参照ください。

getTranslationList($type = null, $locale = null, $value = null) の詳細
説明
Language 地域化された全言語の一覧を返します。 ロケールの言語部分がキー、そしてその翻訳が値となります。
Script 地域化された全文字の一覧を返します。 ロケールの文字部分がキー、そしてその翻訳が値となります。
Territory 地域化された全領域の一覧を返します。 ここに含まれるのは国と大陸、領域です。 領域と大陸のみを取得するには値として '1' を使用します。 国のみを取得するには値として '2' を使用します。 可能な場合、ロケールの国部分をキーとして使用します。 それ以外の場合は、この領域が使用している公式 ISO コードをキーとして使用します。 領域を翻訳したものが値となります。 値を省略した場合は、両方の一覧を取得します。
Variant 地域化された文字変化形の一覧を返します。 変化形がキー、そしてその翻訳が値となります。
Key 地域化されたキーの一覧を帰します。 このキーは、翻訳に使用する一般的な値となります。 通常はカレンダーや文字照合、通貨などです。 キーが配列のキー、そしてその翻訳が値となります。
Type 翻訳されたキーの型の一覧を返します。 これらは、カレンダーの表現や文字列照合方式を表します。 値として 'collation' を使用すると、文字列照合方式の一覧を取得します。 値として 'calendar' を使用すると、カレンダーの型の一覧を取得します。 値を省略した場合は、両方の一覧を取得します。 型がキー、そしてその翻訳が値となります。
Layout 特別なテキスト部分の書式を決めるルールの一覧を返します。
Characters このロケールで使用できる文字の一覧を返します。
Delimiters このロケールで使用できるクォート文字の一覧を返します。
Measurement 単位の値の一覧を返します。この一覧は廃止予定です。
Months このロケールにおけるすべての月の表現の一覧を返します。 異なる表現方式がある場合は配列として返されます。 値を省略すると、グレゴリオ暦におけるすべての月の一覧を返します。 値として、既知の暦の名前を指定することができます。 その場合は指定した暦における月の一覧を返します。 単純に行うには Zend_Date を使用します。
Month このロケールにおけるすべての月名の一覧を返します。 値を省略すると、グレゴリオ暦で通常使用する完全な月名を返します。 各月の数値がキー、そして月名の翻訳が値となります。 値として配列を指定すると、さまざまな暦や書式に対応する月を取得できます。 配列の最初のエントリが暦、2 番目は使用するコンテキスト、 そして 3 番目が返す幅となります。 単純に行うには Zend_Date を使用します。
Days このロケールにおけるすべての曜日の表現の一覧を返します。 異なる表現方式がある場合は配列として返されます。 値を省略すると、グレゴリオ暦におけるすべての曜日の一覧を返します。 値として、既知の暦の名前を指定することができます。 その場合は指定した暦における曜日の一覧を返します。 単純に行うには Zend_Date を使用します。
Day このロケールにおけるすべての曜日名の一覧を返します。 値を省略すると、グレゴリオ暦で通常使用する完全な曜日名を返します。 英語の各曜日名の略称がキー、そして曜日名の翻訳が値となります。 値として配列を指定すると、さまざまな暦や書式に対応する曜日を取得できます。 配列の最初のエントリが暦、2 番目は使用するコンテキスト、 そして 3 番目が返す幅となります。 単純に行うには Zend_Date を使用します。
Week ロケール内で週の計算を適切に行うための値の一覧を返します。 単純に行うには Zend_Date を使用します。
Quarters このロケールにおけるすべての四半期の表現の一覧を返します。 異なる表現方式がある場合は配列として返されます。 値を省略すると、グレゴリオ暦におけるすべての四半期の一覧を返します。 値として、既知の暦の名前を指定することができます。 その場合は指定した暦における四半期の一覧を返します。
Quarter このロケールにおけるすべての四半期名の一覧を返します。 値を省略すると、グレゴリオ暦で通常使用する完全な四半期名を返します。 四半期番号がキー、そして四半期名の翻訳が値となります。 値として配列を指定すると、さまざまな暦や書式に対応する四半期を取得できます。 配列の最初のエントリが暦、2 番目は使用するコンテキスト、 そして 3 番目が返す幅となります。
Eras このロケールにおけるすべての紀元の表現の一覧を返します。 値を省略すると、グレゴリオ暦におけるすべての紀元の一覧を返します。 値として、既知の暦の名前を指定することができます。 その場合は指定した暦における紀元の一覧を返します。
Era このロケールにおけるすべての紀元名の一覧を返します。 値を省略すると、グレゴリオ暦で通常使用する完全な紀元名を返します。 紀元番号がキー、そして紀元名の翻訳が値となります。 値として配列を指定すると、さまざまな暦や書式に対応する紀元を取得できます。 配列の最初のエントリが暦、 そして 2 番目が返す幅となります。
Date このロケールにおけるすべての日付フォーマットの一覧を返します。 使用する日付フォーマットの名前がキー、そしてフォーマットそのものが値となります。 値を省略すると、グレゴリオ暦における日付フォーマットの一覧を返します。 暦の名前を指定すると、さまざまな暦に対応する日付フォーマットを取得できます。 単純に行うには Zend_Date を使用します。
Time このロケールにおけるすべての時刻フォーマットの一覧を返します。 使用する時刻フォーマットの名前がキー、そしてフォーマットそのものが値となります。 値を省略すると、グレゴリオ暦における時刻フォーマットの一覧を返します。 暦の名前を指定すると、さまざまな暦に対応する時刻フォーマットを取得できます。 単純に行うには Zend_Date を使用します。
DateTime このロケールにおけるすべての日付-時刻フォーマットの一覧を返します。 使用する日付-時刻フォーマットの名前がキー、そしてフォーマットそのものが値となります。 値を省略すると、グレゴリオ暦における日付-時刻フォーマットの一覧を返します。 暦の名前を指定すると、さまざまな暦に対応する日付-時刻フォーマットを取得できます。 単純に行うには Zend_Date を使用します。
DateItem 指定した日付項目あるいは時刻項目に関するデフォルトフォーマットの一覧を返します。
DateInterval 間隔を表示したい際に使用する日付・時刻フォーマットの一覧を返します。 この一覧は多次元配列です。最初の配列が間隔の書式、 その次の配列が最大の差のトークンとなります。
Field 地域化した日付フィールドの一覧を返します。 これは、カレンダーや日付で 'month' や 'year' といった文字列を各国語で表示する際に使用します。 値を省略すると、グレゴリオ暦における一覧を返します。 暦の名前を指定すると、さまざまな暦に対応する一覧を取得できます。
Relative 地域化した相対日付の一覧を返します。 'yesterday' や 'tomorrow' といった文字列を各国語で表示する際に使用します。 値を省略すると、グレゴリオ暦における一覧を返します。 暦の名前を指定すると、さまざまな暦に対応する一覧を取得できます。
Symbols 数値表現に使用する文字の地域化した一覧を返します。
NameToCurrency 地域化した通貨名の一覧を返します。 通貨がキー、そして通貨名の翻訳が値となります。 Zend_Currency を使用します。
CurrencyToName 地域化した通貨名に対応する通貨の一覧を返します。 通貨名の翻訳がキー、そして通貨が値となります。 単純に行うには Zend_Currency を使用します。
CurrencySymbol 通貨に対応する地域化した通貨記号の一覧を返します。 通貨がキー、そして記号が値となります。 単純に行うには Zend_Currency を使用します。
Question 肯定 ('yes') および否定 ('no') に対応する地域化した文字列の一覧を返します。 単純に行うには Zend_Locale の getQuestion メソッド を使用します。
CurrencyFraction 通貨に対応する小数部の桁数を返します。 通貨がキー、そして小数部の桁数が値となります。 単純に行うには Zend_Currency を使用します。
CurrencyRounding 通貨に対応する丸め方式の一覧を返します。 通貨がキー、そして丸め方式が値となります。 単純に行うには Zend_Currency を使用します。
CurrencyToRegion その地域で使用する通貨の一覧を返します。 ISO3166 の値 ('region') が配列のキー、そして ISO4217 の値 ('currency') が配列の値となります。 単純に行うには Zend_Currency を使用します。
RegionToCurrency その通貨を使用している地域の一覧を返します。 ISO4217 の値 ('currency') が配列のキー、そして ISO3166 の値 ('region') が配列の値となります。 通貨が複数の地域で使用されている場合は、 空白で区切った形式になります。 単純に行うには Zend_Currency を使用します。
RegionToTerritory その国の領域一覧あるいはその領域に含まれるサブ領域の一覧を返します。 その通貨を使用している地域と領域の一覧を返します。 ISO の領域コード ('currency') が配列のキー、そして ISO3166 の値 ('region') が配列の値となります。 領域が複数の地域を含む場合は、 空白で区切った形式になります。
TerritoryToRegion 地域とその地域が存在する領域の一覧を返します。 ISO3166 のコード ('region') が配列のキー、 そして ISO の領域コード ('territory') が配列の値となります。 地域が複数の領域にまたがる場合は、 空白で区切った形式になります。
ScriptToLanguage その国で使用する文字の一覧を返します。 言語コードが配列のキー、そして文字コードが配列の値となります。 言語が複数の文字を含む場合は、 空白で区切った形式になります。
LanguageToScript ある文字を使用する言語の一覧を返します。 文字コードが配列のキー、そして言語コードが配列の値となります。 文字が複数の言語で用いられる場合は、 空白で区切った形式になります。
TerritoryToLanguage ある言語を使用する国の一覧を返します。 国コードが配列のキー、そして言語コードが配列の値となります。 言語が複数の国で用いられる場合は、 空白で区切った形式になります。
LanguageToTerritory 国と、その国で話されている言語の一覧を返します。 国コードが配列のキー、そして言語コードが配列の値となります。 領域が複数の言語を使用する場合は、 空白で区切った形式になります。
TimezoneToWindows Windows のタイムゾーンと、関連する ISO タイムゾーンの一覧を返します。 Windows のタイムゾーンが配列のキー、 そして ISO タイムゾーンが配列の値となります。
WindowsToTimezone ISO タイムゾーンと、関連する Windows のタイムゾーンの一覧を返します。 ISO タイムゾーンが配列のキー、 そして Windows のタイムゾーンが配列の値となります。
TerritoryToTimezone 地域あるいは領域と、関連する ISO タイムゾーンの一覧を返します。 ISO タイムゾーンが配列のキー、そして領域コードが配列の値となります。
TimezoneToTerritory タイムゾーンと、関連する地域あるいは領域コードの一覧を返します。 地域コードあるいは領域コードが配列のキー、 そして ISO タイムゾーンが配列の値となります。
CityToTimezone 地域化した都市名の一覧を返します。 これを用いて、関連するタイムゾーンの翻訳を行います。 すべてのタイムゾーンが翻訳できるわけではありませんが、 ユーザにとっては ISO タイムゾーン名よりも 母国語で書かれた都市名のほうがわかりやすいでしょう。 ISO タイムゾーンが配列のキー、そして都市名の翻訳が配列の値となります。
TimezoneToCity 地域化した都市名に対応するタイムゾーンの一覧を返します。 地域化した都市名が配列のキー、 そして ISO タイムゾーンが配列の値となります。
PhoneToTerritory 領域内で使用されている電話コードの一覧を返します。 領域 (地域) が配列のキー、 そして電話コードが配列の値となります。
TerritoryToPhone 電話コードが使用されている領域の一覧を返します。 電話コードが配列のキー、 そして領域 (地域) が配列の値となります。 ある電話コードが複数の領域で使用されている場合は、 空白で区切った形式になります。
NumericToTerritory 領域内で使用されている 3 桁の数値コードの一覧を返します。 領域 (地域) が配列のキー、 そして 3 桁の数値コードが配列の値となります。
TerritoryToNumeric 3 桁の数値コードに対応する領域の一覧を返します。 3 桁の数値コードが配列のキー、 そして領域 (地域) が配列の値となります。
Alpha3ToTerritory 領域内で使用されている 3 桁の文字コードの一覧を返します。 領域 (地域) が配列のキー、 そして 3 桁の文字コードが配列の値となります。
TerritoryToAlpha3 3 桁の文字コードに対応する領域の一覧を返します。 3 桁の文字コードが配列のキー、 そして領域 (地域) が配列の値となります。
PostalToTerritory その郵便番号が使われている領域の一覧を正規表現で返します。 ISO 領域コード ('territory') が配列のキー、 そして正規表現が配列の値となります。
NumberingSystem 桁表記に使用する文字の一覧を返します。
FallbackToChar よく使われる unicode 文字の置換用文字の一覧を返します。 これを使用して、たとえば "©" を "(C)" に置換したりします。
CharToFallback よく使われる置換用文字に対応する unicode 文字の一覧を返します。 これを使用して、たとえば "(C)" を "©" に置換したりします。
LocaleUpgrade ロケールの依存性の一覧を返します。 これを使用して、言語を完全修飾形式のロケールに変換します。
Unit 地域化したカレンダーの単位の一覧を帰します。 これを使用して、"day" や "month" などといった文字列を自動的に翻訳します。

単一の翻訳データがほしい場合は、getTranslation() を使用します。 この関数は常に文字列を返しますが、getTranslationList() メソッドよりも多くの型を使用することができます。 また、値についても一点を除いて同じです。 取得したい値について、詳細を指定する必要があります。

Note:

ほとんどすべての場合について値を指定する必要があるので、 このパラメータを最初に指定するようになっています。 この点は getTranslationList() メソッドと異なります。

詳細な情報は、次の表を参照ください。

getTranslation($value = null, $type = null, $locale = null) の詳細
説明
Language 言語の翻訳を返します。 希望通りの翻訳を選択するために、言語コードを値として指定する必要があります。
Script 文字の翻訳を返します。 希望通りの翻訳を選択するために、文字コードを値として指定する必要があります。
Territory あるいは Country 領域の翻訳を返します。 これは国、大陸および領域のいずれかとなります。 希望通りの翻訳を選択するために、領域コードを値として指定する必要があります。
Variant 文字の変化形の翻訳を返します。 希望通りの翻訳を選択するために、変化形コードを値として指定する必要があります。
Key 既知のキーの翻訳を返します。 このキーは、翻訳で使用する一般的な値です。 通常はカレンダーや文字照合、通貨などです。 希望通りのキーを選択するために、キーコードを値として指定する必要があります。
DefaultCalendar 指定したロケールにおけるデフォルトの暦を返します。 ほとんどのロケールでは、これは 'gregorian' (グレゴリオ暦) となります。 単純に行うには Zend_Date を使用します。
MonthContext 指定した暦で用いる月のデフォルトコンテキストを返します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
DefaultMonth 指定した暦で用いる月のデフォルトフォーマットを返します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
Month 月の翻訳を返します。 月を表す数値を値として指定する必要があります。 これは 1 から 12 までの数値となります。 他の暦、コンテキスト、フォーマットのデータを取得したい場合は、 値として整数値ではなく配列を指定します。 この配列の形式は array( 'calendar', 'context', 'format', 'month number') となります。整数値のみを指定した場合のデフォルトは、 暦が 'gregorian'、コンテキストが 'format' そしてフォーマットが 'wide' となります。 単純に行うには Zend_Date を使用します。
DayContext 指定した暦で用いる日のデフォルトコンテキストを返します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
DefaultDay 指定した暦で用いる曜日のデフォルトフォーマットを返します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
Day 曜日の翻訳を返します。 英語での曜日の省略名 ('sun', 'mon', など) を値として指定する必要があります。 他の暦、コンテキスト、フォーマットのデータを取得したい場合は、 値として文字列ではなく配列を指定します。 この配列の形式は array('calendar', 'context', 'format', 'day abbreviation') となります。文字列のみを指定した場合のデフォルトは、 暦が 'gregorian'、コンテキストが 'format' そしてフォーマットが 'wide' となります。 単純に行うには Zend_Date を使用します。
Quarter 四半期の翻訳を返します。 四半期を表す数値を値として指定する必要があります。 これは 1 から 4 までの数値となります。 他の暦、コンテキスト、フォーマットのデータを取得したい場合は、 値として数値ではなく配列を指定します。 この配列の形式は array('calendar', 'context', 'format', 'quarter number') となります。文字列のみを指定した場合のデフォルトは、 暦が 'gregorian'、コンテキストが 'format' そしてフォーマットが 'wide' となります。
Am そのロケールにおける 'AM' の翻訳を返します。 他の暦の値を取得したい場合は、その暦を文字列で指定します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
Pm そのロケールにおける 'PM' の翻訳を返します。 他の暦の値を取得したい場合は、その暦を文字列で指定します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
Era そのロケールにおける紀元の翻訳を返します。 紀元番号を文字列あるいは整数値で指定します。 他の暦やフォーマットの値を取得したい場合は、 値として数値ではなく配列を指定します。 この配列の形式は array('calendar', 'format', 'era number') となります。文字列のみを指定した場合のデフォルトは、 暦が 'gregorian'、コンテキストが 'format' そしてフォーマットが 'wide' となります。
DefaultDate 指定した暦で用いる日のデフォルトフォーマットを返します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
Date そのロケールにおける、指定した暦あるいはフォーマットでの日のフォーマットを返します。 値を省略した場合は、暦が 'gregorian'、フォーマットが 'medium' となります。 文字列を指定した場合は、暦が 'gregorian' でフォーマットが指定したものとなります。 array('calendar', 'format') のような配列を指定することもできます。 単純に行うには Zend_Date を使用します。
DefaultTime 指定した暦で用いる時刻のデフォルトフォーマットを返します。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
Time そのロケールにおける、指定した暦あるいはフォーマットでの時刻のフォーマットを返します。 値を省略した場合は、暦が 'gregorian'、フォーマットが 'medium' となります。 文字列を指定した場合は、暦が 'gregorian' でフォーマットが指定したものとなります。 array('calendar', 'format') のような配列を指定することもできます。 単純に行うには Zend_Date を使用します。
DateTime そのロケールにおける日付、時刻のフォーマットを返します。 これは、指定した暦において日付と時刻を表示する方法を示すものです。 値を省略した場合はグレゴリオ暦を使用します。 単純に行うには Zend_Date を使用します。
DateItem 指定した日付項目あるいは時刻項目に関するデフォルトフォーマットを返します。
DateInterval 指定した日付・時刻フォーマットの間隔フォーマットを返します。 最初の値は暦のフォーマットで、通常は 'gregorian' となります。 二番目の値は間隔フォーマットで、 三番目の値は最大の差のトークンです。 たとえば、array('gregorian', 'yMMMM', 'y') は間隔フォーマット 'yMMMM' で、最大の差は 'y' となります。
Field 日付フィールドの翻訳を返します。 これは、カレンダーや日付で 'month' や 'year' といった文字列を各国語で表示する際に使用します。 返したいフィールドを文字列で指定する必要があります。 この場合はグレゴリオ暦を使用します。 他の暦におけるフィールドを取得するには、 array('calendar', 'date field') のような配列を指定します。
Relative 相対日付の翻訳を返します。 'yesterday' や 'tomorrow' といった文字列を各国語で表示する際に使用します。 返したい日付を表す数値 (明日を基準とした相対値) を指定する必要があります。 昨日はら '-1'、明日なら '1' といったようになります。 この場合はグレゴリオ暦を使用します。 他の暦における相対日を取得するには、 array('calendar', 'relative days') のような配列を指定します。 単純に行うには Zend_Date を使用します。
DecimalNumber 指定したロケールにおける十進数値のフォーマットを返します。 単純に行うには Zend_Locale_Format を使用します。
ScientificNumber 指定したロケールにおける科学記法の数値フォーマットを返します。
PercentNumber 指定したロケールにおけるパーセンテージの数値フォーマットを返します。
CurrencyNumber 指定したロケールにおける通貨の数値フォーマットを返します。 単純に行うには Zend_Currency を使用します。
NameToCurrency 指定した通貨の翻訳を返します。 通貨は ISO フォーマットで指定する必要があります。 たとえば、通貨 'euro' を表すには 'EUR' と指定します。 単純に行うには Zend_Currency を使用します。
CurrencyToName 指定した地域化名に対応する通貨を返します。 単純に行うには Zend_Currency を使用します。
CurrencySymbol 指定したロケールにおいて使用する通貨記号を返します。 すべての通貨に記号が存在するわけではありません。 単純に行うには Zend_Currency を使用します。
Question 肯定 ('yes') および否定 ('no') に対応する地域化した文字列を返します。 'yes' あるいは 'no' を値として指定すると、対応する文字列を取得できます。 単純に行うには Zend_Locale の getQuestion メソッド を使用します。
CurrencyFraction 指定した通貨で使用する小数点以下の桁数を返します。 通貨は ISO 形式で指定する必要があります。 単純に行うには Zend_Currency を使用します。
CurrencyRounding 指定した通貨の丸め方式を返します。 通貨は ISO 形式で指定する必要があります。 通貨を省略した場合は、デフォルトの丸め規則を返します。 単純に行うには Zend_Currency を使用します。
CurrencyToRegion 指定した地域の通貨を返します。 地域コードは ISO3166 形式で指定する必要があります。 たとえばオーストリアは 'AT' となります。 単純に行うには Zend_Currency を使用します。
RegionToCurrency その通貨を使用している地域を返します。 通貨は ISO4217 のコードで指定する必要があります。 たとえばユーロは 'EUR' となります。 その通貨が複数の地域で用いられている場合は、 空白で区切った形式になります。 単純に行うには Zend_Currency を使用します。
RegionToTerritory 指定した領域の地域を返します。 領域は ISO4217 形式の文字列で指定する必要があります。 たとえば '001' は世界を現します。 この領域内の地域が空白区切り形式となります。
TerritoryToRegion 指定した地域が存在する領域を返します。 地域は ISO3166 形式の文字列で指定する必要があります。 たとえばオーストリアは 'AT' となります。 その地域が複数の領域にまたがる場合は、 空白で区切った形式になります。
ScriptToLanguage 指定した言語で用いる文字を返します。 言語は ISO 言語コードで指定する必要があります。 たとえば英語は 'en' となります。 その言語で複数の文字が用いられる場合は、 空白で区切った形式になります。
LanguageToScript 指定した文字が用いられている言語を返します。 文字は ISO 文字コードで指定する必要があります。 たとえばラテン文字は 'Latn' となります。 その文字が複数の言語で用いられている場合は、 空白で区切った形式になります。
TerritoryToLanguage 指定した言語が用いられている領域を返します。 言語は ISO 言語コードで指定する必要があります。 たとえば英語は 'en' となります。 その言語が複数の領域で用いられる場合は、 空白で区切った形式になります。
LanguageToTerritory 指定した領域で用いられている言語の一覧を返します。 領域は ISO3166 形式のコードで指定する必要があります。 たとえばイタリアは 'IT' となります。 その言語が複数の領域で用いられる場合は、 空白で区切った形式になります。
TimezoneToWindows 指定した Windows タイムゾーンに対応する ISO タイムゾーンを返します。
WindowsToTimezone 指定した ISO タイムゾーンに対応する Windows タイムゾーンを返します。
TerritoryToTimezone 指定した ISO タイムゾーンに対応する領域を返します。
TimezoneToTerritory 指定した領域に対応する ISO タイムゾーンを返します。
CityToTimezone 指定した ISO タイムゾーンに対応する地域化した都市名を返します。 すべてのタイムゾーンが都市名に変換できるわけではありません。
TimezoneToCity 指定した地域化都市名に対応する ISO タイムゾーンを返します。 すべての都市名がタイムゾーンに対応しているわけではありません。
PhoneToTerritory 指定した領域 (地域) に対応する電話コードを返します。 領域コードは ISO3166 形式の文字列で指定する必要があります。 たとえばオーストリアは 'AT' となります。
TerritoryToPhone 電話コードが使われている領域 (地域) を返します。 電話コードは整数値で指定する必要があります。 たとえば '43' は +43 を表します。 ひとつの電話コードが複数の領域 (地域) で使われている場合は、 空白で区切った形式になります。
NumericToTerritory 指定した領域 (地域) に対応する 3 桁の数値コードを返します。 領域コードは ISO3166 形式の文字列で指定する必要があります。 たとえばオーストリアは 'AT' となります。
TerritoryToNumeric 3 桁の数値コードに対応する領域 (地域) を返します。 3 桁の数値コードは整数値で指定する必要があります。 たとえば '43' のようになります。
Alpha3ToTerritory 指定した領域 (地域) に対応する 3 桁の文字コードを返します。 領域コードは ISO3166 形式の文字列で指定する必要があります。 たとえばオーストリアは 'AT' となります。
TerritoryToAlpha3 3 桁の文字コードに対応する領域 (地域) を返します。
PostalToTerritory 指定した領域に対応する郵便番号の正規表現を返します。 領域は ISO4217 形式の文字列で指定する必要があります。 たとえば世界全体は '001' となります。
NumberingSystem 桁表記に使用する文字を返します。
FallbackToChar よく使われる unicode 文字の置換用文字を返します。 これを使用して、たとえば "©" を "(C)" に置換したりします。
CharToFallback よく使われる置換用文字に対応する unicode 文字を返します。 これを使用して、たとえば "(C)" を "©" に置換したりします。
LocaleUpgrade 指定した言語に関するロケールの依存性を返します。 これを使用して、この言語を完全修飾形式のロケールに変換します。
Unit 地域化したカレンダーの単位を帰します。 これを使用して、"day" や "month" などといった文字列を自動的に翻訳します。 最初のパラメータには型を、そして次のパラメータには数を指定しなければなりません。

Note:

Zend Framework 1.5 では、いくつかの古い型の名前が変わりました。 新しい型が追加されたこと、スペルが間違ったいたこと、 そして使いやすさを考慮したことなどが理由です。 変更内容は以下の表でご確認ください。

Zend Framework 1.0 と 1.5 の違い
古い型 新しい型
Country Territory (値 '2')
Calendar Type (値 'calendar')
Month_Short Month (値 array('gregorian', 'format', 'abbreviated')
Month_Narrow Month (値 array('gregorian', 'stand-alone', 'narrow')
Month_Complete Months
Day_Short Day (値 array('gregorian', 'format', 'abbreviated')
Day_Narrow Day (値 array('gregorian', 'stand-alone', 'narrow')
DateFormat Date
TimeFormat Time
Timezones CityToTimezone
Currency NameToCurrency
Currency_Sign CurrencySymbol
Currency_Detail CurrencyToRegion
Territory_Detail TerritoryToRegion
Language_Detail LanguageToTerritory

以下の例は、さまざまな言語でのものの名前を取得する方法を示すものです。

Example #7 getTranslationList

// すべての国名をドイツ語で表示します
print_r(Zend_Locale::getTranslationList('country', 'de'));

次の例は、ある言語の名前を別の言語でどのようにいうのかを、 二文字の ISO 国コードを知らない場合に調べるものです。

Example #8 国の名前を、ある言語から別の言語に変換する

$code2name = Zend_Locale::getLanguageTranslationList('en_US');
$name2code = array_flip($code2name);
$frenchCode = $name2code['French'];
echo Zend_Locale::getLanguageTranslation($frenchCode, 'de_AT');
// 出力は、「フランス語」を表すドイツ語の名前になります

Zend_Locale で使用できるすべての言語の一覧を、それぞれの言語での表記で取得するには、 以下の例をウェブページで使用してみましょう。 同様に getCountryTranslationList() および getCountryTranslation() を使用すると、 あなたのネイティブ言語での地域名と別の言語での地域名の対応表を作成できます。 try .. catch ブロックで、 存在しないロケールを使用した場合の例外を処理するようにしましょう。 すべての言語がすべてのロケールに対応しているわけではありません。 この例では、例外を無視することで、 スクリプトが途中で終わってしまうことを防いでいます。

Example #9 すべての言語を、その国のネイティブ言語で書き出す

$list = Zend_Locale::getLanguageTranslationList('auto');

foreach($list as $language => $content) {
    try {
        $output = Zend_Locale::getLanguageTranslation($language, $language);
        if (is_string($output)) {
            print "\n
[".$language."] ".$output; } } catch (Exception $e) { continue; } }

"yes" および "no" に対応する翻訳の取得

プログラム上で、ユーザに "はい" あるいは "いいえ" で答えてもらうことがよくあります。 getQuestion() を使用すると、 ユーザに問い合わせるときに使用する単語あるいは正規表現文字列を含む配列を、 特定の $locale (デフォルトは、そのオブジェクトのロケール) にあわせて返します。 返される配列の中身は次のようになります。

  • yes および no: yes および no に対応する一般的な文字列表現です。 これは、yesarray および noarray の最初の要素でもあり、もっとも一般的な内容です。

    yesarray および noarray: yes および no に対応する内容をすべて含む配列です。 言語によっては単に「はい」「いいえ」以外の返答を持つものもあります。 一般に、これは完全な文字列とその省略形になります。

    yesexpr および noexpr: 正規表現で、ユーザの回答から yes か no かを判定できるようにします。

これらのすべての情報は当然地域化されており、 設定されているロケールによって変化します。 以下の例で、どのような情報が取得できるのかを確認してみましょう。

Example #10 getQuestion()

$locale = new Zend_Locale();
// 設問の文字列
print_r($locale->getQuestion('de'));

- - - 出力 - - -

Array
(
    [yes] => ja
    [no] => nein
    [yesarray] => Array
        (
            [0] => ja
            [1] => j
        )

    [noarray] => Array
        (
            [0] => nein
            [1] => n
        )

    [yesexpr] => ^([jJ][aA]?)|([jJ]?)
    [noexpr] => ^([nN]([eE][iI][nN])?)|([nN]?)
)

Note:

1.0.3 までは、yesabbr もロケールデータから取得可能でした。 1.5 以降、この情報は単体では存在しません。しかし、同じ情報を yesarray から取得できます。

既知のロケールの一覧の取得

すべての既知のロケールの一覧を取得したいこともあるでしょう。 たとえば、ロケール選択用の select 要素を作成する場合などに必要となるはずです。 このようなときには、静的メソッド getLocaleList() を使用します。 このメソッドは、すべての既知のロケールの一覧を返します。

Example #11 getLocaleList()

$localelist = Zend_Locale::getLocaleList();

Note:

返された配列のキーがロケール名となっていることに注意しましょう。 キーに対応する値は、常に true です。

ロケールの検出

指定した入力がロケールかどうかを知りたい場合は、静的メソッド isLocale() を使用します。 このメソッドの最初のパラメータとして、調べたい文字列を指定します。

Example #12 シンプルなロケールの検出

$input = 'to_RU';
if (Zend_Locale::isLocale($input)) {
    print "'{$input}' is a locale";
} else {
    print "Sorry... the given input is no locale";
}

ごらんのとおり、このメソッドの出力は常に boolean となります。 このメソッドをコールして唯一例外が発生するのは、 システム側でロケールを一切提供しておらず、Zend Framework がロケールを自動検出できなかった場合です。 通常、このような場合は、ご利用の OS 上で PHP の setlocale() がうまく動作しないでしょう。

指定したロケールに地域部が存在しない場合でも、 自動的に地域部をはずして検出してくれることにもお気づきでしょう。 先ほどの例では、言語 'to' は地域 'RU' 内に存在しません。しかし、返される結果は true となります。 Zend_Locale は指定した入力を処理できるからです。

しかし、この自動変換機能がじゃまになることもあるでしょう。そんな場合には isLocale() の 2 番目のパラメータを使用します。 strict パラメータのデフォルトは FALSE で、自動変換を無効にするにはこれを TRUE とします。

Example #13 厳格なロケール検出

$input = 'to_RU';
if (Zend_Locale::isLocale($input, true)) {
    print "'{$input}' is a locale";
} else {
    print "Sorry... the given input is no locale";
}

これで指定した文字列がロケールかどうかを判別できるようになったので、 自作のクラスでロケール対応の処理ができるようになりました。 しかし、すでにお気づきかもしれませんが、毎回のように次のような 15 行のコードを書かなければならないことになってしまいます。

Example #14 ロケールに対応した振る舞いの実装

if ($locale === null) {
    $locale = new Zend_Locale();
}

if (!Zend_Locale::isLocale($locale, true, false)) {
    if (!Zend_Locale::isLocale($locale, false, false)) {
        throw new Zend_Locale_Exception(
            "The locale '$locale' is no known locale");
    }

    $locale = new Zend_Locale($locale);
}

if ($locale instanceof Zend_Locale) {
    $locale = $locale->toString();
}

Zend Framework 1.8 で、静的メソッド findLocale() が追加されました。これは、現在使用中のロケール文字列を返します。 このメソッドは、次のような処理を行います。

  • 指定した文字列がロケールかどうかを調べる

  • 指定した地域にロケールが存在しない場合は地域部をはずす

  • 入力を省略した場合は、それまでにアプリケーションで設定されていたロケールを返す

  • ここまでの検出に失敗した場合はブラウザのロケールを検出する

  • ここまでの検出に失敗した場合は環境変数のロケールを検出する

  • ここまでの検出に失敗した場合はフレームワークのロケールを検出する

  • 常に、見つかったロケールを表す文字列を返す

次の例は、さきほどのコードをたったひとつのメソッドコールで置き換えるものです。

Example #15 Zend Framework 1.8 以降でのロケール対応の振る舞いの実装

$locale = Zend_Locale::findLocale($inputstring);
Previous Next
Introduction to Zend Framework
概要
インストール
Zend_Acl
導入
アクセス制御の洗練
高度な使用法
Zend_Amf
導入
Zend_Amf_Server
Zend_Application
導入
Zend_Application クイックスタート
Theory of Operation
コア機能
利用できるリソースプラグイン
Zend_Auth
導入
データベースのテーブルでの認証
ダイジェスト認証
HTTP 認証アダプタ
LDAP 認証
Open ID 認証
Zend_Cache
導入
キャッシュの仕組み
Zend_Cache のフロントエンド
Zend_Cache のバックエンド
Zend_Captcha
導入
Captcha の方法
CAPTCHA アダプタ
Zend_CodeGenerator
導入
Zend_CodeGeneratorサンプル
Zend_CodeGeneratorリファレンス
Zend_Config
導入
動作原理
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
導入
Getopt の規則の宣言
オプションおよび引数の取得
Zend_Console_Getopt の設定
Zend_Controller
Zend_Controller クイックスタート
Zend_Controller の基本
フロントコントローラ
リクエストオブジェクト
標準のルータ
ディスパッチャ
アクションコントローラ
アクションヘルパー
レスポンスオブジェクト
プラグイン
モジュラーディレクトリ構造の規約の使用
MVC での例外
以前のバージョンからの移行
Zend_Currency
Zend_Currency について
通貨の操作方法
以前のバージョンからの移行
Zend_Date
導入
動作原理
基本メソッド
Zend_Date API の概要
日付の作成
日付関数全般用の定数
動作例
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
導入
Zend_Db_Table_Definition
Zend_Debug
変数の出力
Zend_Dojo
導入
Zend_Dojo_Data: dojo.data エンベロープ
Dojo ビューヘルパー
Dojoフォーム要素とデコレーター
Zend_Dojo build layer support
Zend_Dom
導入
Zend_Dom_Query
Zend_Exception
例外の使用法
Zend_Feed
導入
フィードの読み込み
ウェブページからのフィードの取得
RSS フィードの使用
Atom フィードの使用
単一の Atom エントリの処理
フィードおよびエントリの構造の変更
独自のフィードクラスおよびエントリクラス
Zend_Feed_Reader
Zend_File
Zend_File_Transfer
Zend_File_Transfer 用のバリデータ
Filters for Zend_File_Transfer
以前のバージョンからの移行
Zend_Filter
導入
標準のフィルタクラス群
フィルタチェイン
フィルタの書き方
Zend_Filter_Input
Zend_Filter_Inflector
前バージョンからの移行
Zend_Form
Zend_Form
Zend_Form クイックスタート
Zend_Form_Element を用いたフォーム要素の作成
Zend_Form によるフォームの作成
Zend_Form_Decorator による独自のフォームマークアップの作成
Zend Framework に同梱されている標準のフォーム要素
Zend Framework に同梱されている標準のデコレータ
Zend_Form の国際化
Zend_Form の高度な使用法
Zend_Gdata
導入
AuthSub による認証
Using the Book Search Data API
ClientLogin による認証
Google Calendar の使用法
Google Documents List Data API の使用法
Using Google Health
Google Spreadsheets の使用法
Google Apps Provisioning の使用法
Google Base の使用法
Picasa Web Albums の使用法
YouTube Data API の使用法
Gdata の例外処理
Zend_Http
導入
Zend_Http_Client - 高度な使用法
Zend_Http_Client - 接続アダプタ
前バージョンからの移行
Zend_Http_Cookie および Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
導入
Zend_Json
導入
基本的な使用法
Zend_Json の高度な使用法
XML から JSON への変換
Zend_Json_Server - JSON-RPCサーバー
Zend_Layout
導入
Zend_Layout クイックスタート
Zend_Layout の設定オプション
Zend_Layout の高度な使用法
Zend_Ldap
導入
API概要
利用シナリオ
ツール
Zend_Ldap_Nodeを使用してLDAPツリーへのオブジェクト指向アクセス
LDAPサーバから情報を取得
LDIFへ、または、からのLDAPデータシリアライズ
Zend_Loader
ファイルやクラスの動的な読み込み
The Autoloader
Resource Autoloaders
プラグインのロード
Zend_Locale
導入
Zend_Locale の使用法
正規化および地域化
日付および時刻の扱い
サポートするロケール
以前のバージョンからの移行
Zend_Log
概要
ライター
フォーマッタ
フィルタ
Zend_Mail
導入
SMTP 経由での送信
SMTP 接続による複数のメールの送信
異なる転送手段の使用
HTML メール
ファイルの添付
受信者の追加
MIME バウンダリの制御
追加のヘッダ
文字セット
エンコーディング
SMTP 認証
セキュアな SMTP トランスポート
メールメッセージの読み込み
Zend_Measure
導入
計測値の作成
計測値の出力
計測値の操作
計測値の型
Zend_Memory
概要
メモリマネージャ
メモリオブジェクト
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_Navigation
導入
画面
Containers
Migrating from Previous Versions
Zend_OpenId
導入
Zend_OpenId_Consumer の基本
Zend_OpenId_Provider
Zend_Paginator
導入
使用法
設定
高度な使用法
Zend_Pdf
導入
PDF ドキュメントの作成および読み込み
PDF ドキュメントへの変更内容の保存
ページの操作
描画
Interactive Features
ドキュメントの情報およびメタデータ
Zend_Pdf モジュールの使用例
Zend_ProgressBar
Zend_ProgressBar
Zend_Queue
導入
使用例
フレームワーク
アダプタ
Zend_Queueのカスタマイズ
Stomp
Zend_Reflection
導入
Zend_Reflectionサンプル
Zend_Reflectionリファレンス
Zend_Registry
レジストリの使用法
Zend_Rest
導入
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
概要
インデックスの構築
インデックスの検索
クエリ言語
クエリ作成用の API
文字セット
拡張性
Java Lucene との相互運用
応用
ベストプラクティス
Zend_Server
導入
Zend_Server_Reflection
Zend_Service
導入
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Amazon_Ec2
Zend_Service_Amazon_Ec2: Instances
Zend_Service_Amazon_Ec2: Windows Instances
Zend_Service_Amazon_Ec2: Reserved Instances
Zend_Service_Amazon_Ec2: CloudWatch Monitoring
Zend_Service_Amazon_Ec2: Amazon Machine Images (AMI)
Zend_Service_Amazon_Ec2: Elastic Block Stroage (EBS)
Zend_Service_Amazon_Ec2: Elastic IP Addresses
Zend_Service_Amazon_Ec2: Keypairs
Zend_Service_Amazon_Ec2:リージョンおよび利用可能ゾーン
Zend_Service_Amazon_Ec2: Security Groups
Zend_Service_Amazon_S3
Zend_Service_Amazon_Sqs
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_Flickr
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
導入
Zend_Service_StrikeIron
Zend_Service_StrikeIron: バンドルされているサービス
Zend_Service_StrikeIron: 応用編
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_Yahoo
Zend_Session
導入
基本的な使用法
高度な使用法
グローバルセッションの管理
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDLアクセッサ
自動検出
Zend_Tag
導入
Zend_Tag_Cloud
Zend_Test
導入
Zend_Test_PHPUnit
Zend_Test_PHPUnit_Db
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
導入
Zend_TimeSync の動作
Zend_Tool_Framework
導入
CLIツールの使用
アーキテクチャ
Zend_Tool_Frameworkを利用してプロバイダを作成する
出荷されたシステムプロバイダー
Extending and Configuring Zend_Tool_Framework
Zend_Tool_Project
導入
プロジェクトを作成
Zend Toolプロジェクトプロバイダー
Zend_Translate
導入
Zend_Translate のアダプタ
翻訳アダプタの使用法
ソースファイルの作成
翻訳用の追加機能
Plural notations for Translation
以前のバージョンからの移行
Zend_Uri
Zend_Uri
Zend_Validate
導入
標準のバリデーションクラス群
バリデータチェイン
バリデータの書き方
検証メッセージ
Zend_Version
Zend Framework のバージョンの取得
Zend_View
導入
コントローラスクリプト
ビュースクリプト
ビューヘルパー
Zend_View_Abstract
以前のバージョンからの移行
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
導入
Zend_XmlRpc_Client
Zend_XmlRpc_Server
Zend Framework のシステム要件
導入
Zend Framework PHP 標準コーディング規約
概要
PHP ファイルの書式
命名規約
コーディングスタイル
Zend Framework Documentation Standard
Overview
Documentation File Formatting
Recommendations
Zend Framework MVC アプリケーションのために推奨されるプロジェクト構造
概要
推奨されるプロジェクト・ディレクトリ構造
モジュール構造
リライト設定ガイド
Zend Framework Performance Guide
導入
クラスの読み込み
Zend_Dbパフォーマンス
国際化(i18n)とローカライズ(l10n)
ビューのレンダリング
著作権に関する情報