2

HTTP Accept-Language ヘッダーを解析するLocale::acceptFromHttpと、このロケール識別子に基づいてユーザーの優先通貨を取得する簡単で信頼できる方法はありますか? 「en-US」の「USD」のように。

PHP intl 拡張機能を使用してこれを行う方法があればいいのにと思いますが、これまでのところ、マニュアルで私の答えを見つけることができませんでした。Zend Framework が Zend_Currency でこれを実行できることを確認しましたが、私の特定のソフトウェアには大きすぎます。

これを達成する他のライブラリや方法はありますか? 多くのロケール識別子がなければならないので、単純なswitchものは少しやり過ぎです。

4

2 に答える 2

1

PHP 4 と PHP 5 の両方で、 and を使用してこれを行うことができsetlocale()ますlocaleconv()

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
setlocale(LC_MONETARY, $locale);

print_r(localeconv());

出力例:

Array
(
    [decimal_point] => .
    [thousands_sep] =>
    [int_curr_symbol] => EUR
    [currency_symbol] => €
    [mon_decimal_point] => ,
    [mon_thousands_sep] =>
    [positive_sign] =>
    [negative_sign] => -
    [int_frac_digits] => 2
    [frac_digits] => 2
    [p_cs_precedes] => 1
    [p_sep_by_space] => 1
    [n_cs_precedes] => 1
    [n_sep_by_space] => 1
    [p_sign_posn] => 1
    [n_sign_posn] => 2
    [grouping] => Array
        (
        )

    [mon_grouping] => Array
        (
            [0] => 3
            [1] => 3
        )

)

ISO 4217 コードは、結果の配列のint_curr_symbolキーに含まれています。

于 2011-11-14T14:38:08.077 に答える