例
例 – I18Nv2 の使用例
API ドキュメント
I18Nv2 の提供する API の詳細については、PEAR の
API
ドキュメントを参照ください。
ロケールの設定
Un*x と Windows とでは使用しているロケールコードが異なるので、
PHP の setLocale() を安易に使用することはできません。
I18Nv2::setLocale()
がこの相違を吸収します。
I18Nv2 を用いれば、Linux と Windows のどちらでも
'en_US' のような標準的なロケールコードが使用できます。
しかし、コードのリストはまだ完全なものではありません。
もしまだ (I18Nv2::_main() の I18Nv2::$locales で)
カバーできていないロケールを見つけた場合は、
そのコードおよび対応する Win32 のコードを開発者にメールで教えてください。
<?php
require_once 'I18Nv2.php';
foreach (array('en_US', 'de', 'fr_CN') as $locale) {
if (!$syslocale = I18Nv2::setLocale($locale)) {
echo "ロケール '$locale' は使用できません!\n";
} else {
echo "'$locale' に対応するシステムのロケール: '$syslocale'\n";
}
}
?>
ロケールの規約の取得
I18Nv2 は、localeConv() から返されるロケール固有の規約をスタティックに保持します。
そのため、
I18Nv2::getInfo()
を使用して簡単にアクセスすることが可能となります。
使用可能な情報については、PHP マニュアルの
localeConv()
の情報を参照ください。
<?php
require_once 'I18Nv2.php';
I18Nv2::setLocale('fr');
$dec_point = I18Nv2::getInfo('decimal_point');
echo "フランス語ロケールの小数点は '$dec_point' です。\n";
echo "パラメータを指定せずに I18Nv2::getInfo() をコールすると、すべての情報を返します。\n";
print_r(I18Nv2::getInfo());
?>
出力文字セットの自動変換
I18Nv2 では、
ob_iconv_handler() を簡単に使用するために
I18Nv2::autoConv()
を用意しています。
<?php
require_once 'I18Nv2.php';
// DOS 窓でもきちんと表示されるシェルアプリケーションを書きます
if (I18Nv2_WIN) {
I18Nv2::autoConv('CP850');
}
// latin1 の文字を出力します
echo "????\n";
?>
I18Nv2_Locale の使用
I18Nv2_Locale は、日付や時刻、数値および金額を
ロケール固有の規約にもとづいた書式になおす機能を持つオブジェクトです。
<?php
require_once 'I18Nv2.php';
$locale = &I18Nv2::createLocale('de_AT');
echo "金額 2000: ",
$locale->formatCurrency(2000, I18Nv2_CURRENCY_INTERNATIONAL), "\n";
echo "今日の日付: ",
$locale->formatDate(null, I18Nv2_DATETIME_FULL), "\n";
echo "現在の時刻: ",
$locale->formatTime(null, I18Nv2_DATETIME_SHORT), "\n";
?>
I18Nv2_Negotiator の使用
I18Nv2 には、言語や文字セットおよびロケールに関する
HTTP ネゴシエーション機能が含まれています。
<?php
require_once 'I18Nv2/Negotiator.php';
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'en-US,en-GB,en;q=0.5,de';
$_SERVER['HTTP_ACCEPT_CHARSET'] = 'utf-8,iso-8859-1;q=0.5';
$neg = &new I18Nv2_Negotiator;
echo "ユーザエージェントが望んでいる言語: ",
$lang = $neg->getLanguageMatch(), "\n";
echo "ユーザエージェント '$lang' に対して望んでいる地域: ",
$neg->getCountryMatch($lang), "\n";
echo "ユーザエージェントが望んでいるロケール: ",
$neg->getLocaleMatch(), "\n";
echo "ユーザエージェントが望んでいる文字セット: ",
$neg->getCharsetMatch(), "\n";
?>
I18Nv2_Language の使用
I18Nv2 は、ISO 言語コードの変換リストを保持しています。
<?php
require_once 'I18Nv2/Language.php';
$lang = &new I18Nv2_Language('it', 'iso-8859-1');
echo "English をイタリア語で言うと: ",
$lang->getName('en'), "\n";
echo "French をイタリア語で言うと: ",
$lang->getName('fr'), "\n";
?>
I18Nv2_Country の使用
I18Nv2 は、ISO 国名コードの変換リストを保持しています。
<?php
require_once 'I18Nv2/Country.php';
$country = &new I18Nv2_Country('de', 'iso-8859-1');
echo "United States をドイツ語で言うと: ",
$country->getName('us'), "\n";
echo "Italia をドイツ語で言うと: ",
$country->getName('it'), "\n";
?>
I18Nv2_Country の使用
I18Nv2 には、言語と国名の両方を扱うためのデコレートされたクラスがあります。
<?php
require_once 'I18Nv2/Country.php';
require_once 'I18Nv2/DecoratedList/HtmlSelect.php';
require_once 'I18Nv2/DecoratedList/HtmlEntities.php';
$c = &new I18Nv2_Country('it', 'iso-8859-1');
$e = &new I18Nv2_DecoratedList_HtmlEntities($c);
$s = &new I18Nv2_DecoratedList_HtmlSelect($e);
// 属性を設定します
$s->attributes['select']['name'] = 'CountrySelect';
$s->attributes['select']['onchange'] = 'this.form.submit()';
// エントリを選択します
$s->selected['DE'] = true;
// HTML 選択ボックスを表示します
echo $s->getAllCodes();
?>
I18Nv2_CommonList::toDecoratedList()
<?php
require_once 'I18Nv2/Country.php';
$c = &new I18Nv2_Country('it', 'iso-8859-1');
$s = &$c->toDecoratedList('HtmlSelect');
// 属性を設定します
$s->attributes['select']['name'] = 'CountrySelect';
$s->attributes['select']['onchange'] = 'this.form.submit()';
// エントリを選択します
$s->selected['IT'] = true;
// HTML 選択ボックスを表示します
echo $s->getAllCodes();
?>