2013-06-30 64 views
0

我正在開發一個多國家多語言應用程序,我遇到的其中一個問題是小數點分隔符和日期格式。我知道setLocale方法,但我看到的唯一更改是翻譯。我是否必須使用PHP內置的setlocale方法來正確格式化數字和日期,還是有其他方法?symfony 2號碼和日期格式

此外,數字(金錢)存儲在數據庫MySQL中,我應該使用數據轉換器在表單字段使用語言環境還是會由symfony自動處理?

+0

使用symfony的2.3 – mentalic

回答

0

數字與金錢的形式

對於數字和金錢表單域symfony已經有一個number和一個money表單類型,它根據語言環境處理小數點和分組。輸出

數字和日期的格式通常你格式化日期(樹枝)與像mydate|date("m/d/Y")日期過濾器,但你可以將其設置爲完整的樹枝環境,所以你只需要調用mydate|date。但是,如果區域設置要求對於整個應用程序是靜態的而不是基於用戶區域設置的,則只建議這樣做。爲此,您應該考慮@jkucharovic和@Kris發佈的樹枝延伸。

+0

這是不好解決。對於每個請求來說,通過做不必要的工作會浪費系統資源 - 新的監聽器注入Twig並覆蓋默認的Formates - 即使它不會被使用。 更好的解決方案(也是要求不高)創建自定義的Twig擴展,並只在需要時調用它。 – jkucharovic

+1

是的,刪除了偵聽器,並添加了提示給你發佈。 –

2

我建議用PHP intl創建自定義的枝條延伸。你可以看看my answer to similar question

namespace Acme\Bundle\DemoBundle\Twig; 

class IntlExtension extends \Twig_Extension 
{ 

    public function getFilters() 
    { 
     return array(
      new \Twig_SimpleFilter('intl_day', array($this, 'intlDay')), 
      new \Twig_SimpleFilter('intl_number', array($this, 'intlNumber')), 
     ); 
    } 

    // Other methods… 

    /** 
    * NULL locale cause load locale from php.ini 
    */ 
    public function intlNumber($number, $locale = NULL) 
    { 
     $fmt = new \NumberFormatter($locale, \NumberFormatter::DECIMAL); 
     return $fmt->format($number); 
    } 

    public function getName() 
    { 
     return 'intl_extension'; 
    } 
} 

然後在你的枝杈模板,你可以使用:

{{ entity.number_value|intl_number(app.request.locale) }} 

,或者如果您使用的Symfony < 2.1 app.session.locale