2015-09-05 25 views
2

我有一個Symfony應用程序,我在OS X上開發並部署到Debian Jessie,都運行PHP 5.6.12。 Symfony(標準版)版本在兩個系統上都是相同的:2.7.3。翻譯服務未啓用,在兩個系統上default_locale設置爲de(德語),並且在I18n或語言環境處理方面沒有配置差異。Sf2「錢」字段類型:小數點分隔符和區域設置

在此應用程序中,有一種使用「money」字段類型的表單,其中currency設置爲EUR。在OS X上,字段值以逗號作爲小數點分隔符顯示(因爲它在德語中很常見),字段後面顯示「€」符號。在Debian Jessie上,小數點分隔符是一個點,「€」符號顯示在該字段的左邊。對於發送不同的「Accept-Language」請求標頭的客戶端,這種行爲是相同的。

我的問題是:

  • 我能做些什麼使Debian安裝行爲類似於OS X安裝,即尊重de區域?或者以不同的方式問:行爲差異從何而來?
  • Sf2文檔說「根據貨幣 - 貨幣符號可能會顯示在輸入文本字段之前或之後」。在這兩個系統上,貨幣是相同的,但行爲不同,所以我猜文檔是不準確的。或者我完全錯過了什麼?
+0

您是否找到了解決方案?我面臨同樣的問題。 –

+0

不,不幸的不是。你有完全相同的設置嗎? – BlueM

+0

不,我正在Windows上開發並在Ubuntu服務器上部署。我沒有找到全球解決方案,嘗試設置全球的語言環境和其他一些選項 - 沒有幫助。所以最後我決定使用變壓器+自定義字段類型,我只是用逗號替換點分隔符。不是最好的解決方案,但現在它工作。 –

回答

2

您必須確保已安裝php-intl擴展。

因爲Symfony Intl Component,這是缺少php-intl擴展的替換層,只支持區域設置:'en',您可以在their php files中看到。

public function __construct($locale = 'en', $style = null, $pattern = null) 
{ 
    if ('en' !== $locale && null !== $locale) { 
     throw new MethodArgumentValueNotImplementedException(__METHOD__, 'locale', $locale, 'Only the locale "en" is supported'); 
    } 
    .... 
} 

而且還因爲exception is thrown,如果您嘗試調用下面的代碼。

\Locale::setDefault('de_DE'); 

symfony的\分量\國際\區域\區域:: setDefault()未實現。請安裝「intl」擴展程序以獲得完整的本地化功能。

500內部服務器錯誤 - MethodNotImplementedException

如上面的鏈接問題#1狀態下的回答,您必須安裝PHP-國際機場。對於我來說,在Ubuntu上,PHP-5和PHP-7可用是個問題。已安裝PHP5-intl,但未安裝PHP7-intl。你應該確保通過調用phpinfo();該擴展名真的被加載。

我的回答假設,你已經在symfony的配置區域,正如我在下面幾行已完成:

framework: 
    translator:  { fallbacks: ["%locale%", 'en'] } 
    default_locale: de 

在symfony的配置樹枝衍生物還支持以下(對我們發出不必要的)條目:

date: 
    format: d.m.Y, H:i:s 
    interval_format: '%%d Tage' 
    timezone: Europe/Paris 
number_format: 
    decimals: 2 
    decimal_point: ',' 
    thousands_separator: '.' 
+0

感謝您的詳細解釋。不幸的是,10天前我將項目重新定位到了不同的服務器,所以我無法測試這是否是真正的原因,但我確認在舊服務器上缺少'intl'擴展名,但是在新服務器上問題是不可觀察的),存在「intl」,因爲它在OS X系統上。因此,假設這導致了這個問題,這是絕對有道理的。 – BlueM

相關問題