2015-09-05 67 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

相关问题