2011-10-30 7 views
3

私はマルチリンガルアプリケーションでフランス語のカナダ通貨をフォーマットしようとしています。私はNumberHelperの拡張バージョンを使用しています。addFormatをフランス語カナダのフォーマットに追加しましたが、問題はドル記号が表示されるようにCakePHPに指示する方法が見つからないということです。の後に量。CakePHP:小文字以外の通貨をシンボルでフォーマットするにはどうすればいいですか?

たとえば、カナダドルが3.57ドルの場合は、3.57ドルで表示されます。

afterプロパティを "$"に設定した場合、値がセントだけの場合はドルのように見えるため、$ 0.57は57ドルに見える57 $になります。

PHP setlocalemoney_formatコマンドを使用してロケールを設定しようとしましたが、すべての通貨の値を英語に変換しなければならないため、現時点では。

私はこれをCakePHPのメンテナンス可能な方法で動作させる方法についてのアイデアはありますか?

あらかじめ、経験豊富な大きな頭脳に感謝します。最後に

-Josh

答えて

1

は、私がNumberHelperクラスを拡張し、単に__construct()方法で私の必要な通貨を追加しました。次に、moneyという名前の別のメソッドを作成しました。私の言語設定がフランス語の場合、何千もの変換をブルートフォースで行いました。スペースが千切りではないことを確認してください。以下)。

私はこれに本当に満足していませんが、それは仕事を完了します。誰かがPHPのデータベースの挿入を不正にすることなくユーザのロケールを使う方法を提案できるなら、私は興味を持っています。

class CurrencyHelper extends NumberHelper { 

var $helpers = array('Session'); 

function __construct() { 
    parent::__construct(); 

    $this->addFormat('en_ca', array(
     'before' => '$', 
     'after' => false, 
     'zero' => 0, 
     'places' => 2, 
     'thousands' => ',', 
     'decimals' => '.', 
     'negative' => '()',)); 

    $this->addFormat('fr_ca', array(
     'before' => false, 
     'after' => false, 
     'zero' => 0, 
     'places' => 2, 
     'thousands' => ' ', 
     'decimals' => ',', 
     'negative' => '()',)); 
} 

function money($amount = 0, $useLocale = true) { 
    $locale = 'en_ca'; 
    if ($useLocale) { 
     $s = new CakeSession(); 
     $locale = $s->read('Config.language'); 
     unset($s); 
    } 

    $result = str_replace(' ', ' ', $this->currency($amount, $locale)) . ($locale == 'fr_ca' ? ' $' : ''); 
    return $result; 
} 

} 
0

言語を設定するbeforeFilter()コールバックで呼び出すAppControllerに_setLanguage()メソッドがあります。私はこのコードを追加してフランス語のカナダ通貨を設定しました。

if($this->Session->read('Config.language') == 'fra') { 
    CakeNumber::addFormat('fr_CA', array(
     'wholeSymbol' => '$', 
     'wholePosition' => 'after', 
     'thousands' => ' ', 
     'decimals' => ',', 
     'negative' => '()',)); 
    CakeNumber::defaultCurrency('fr_CA'); 
} 

これはCakePHP 2.3以降で動作するはずです。

関連する問題