更改特定语言的decimalseparator

时间:2017-04-24 07:52:41

标签: php symfony intl

在俄语中,小数分隔符(GOST 8.417-2002和GOST 2.004-88 - 俄罗斯国家标准)没有固定的定义。建议使用,(逗号),但.(点)是可能的。

php中的 intl 扩展名将,(逗号)定义为俄语的小数分隔符。

我想根据用户偏好更改小数点分隔符。

在我的项目中,我有一个监听器onKernelRequest,我在其中设置了语言环境。我认为这是更改预定义DECIMAL_SEPARATOR_SYMBOL

的地方
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        if (!$request->hasPreviousSession()) {
            return;
        }

        // try to see if the locale has been set as a _locale routing parameter
        if ($locale = $request->attributes->get('_locale')) {
            $request->getSession()->set('_locale', $locale);
        } else {
            // if no explicit locale has been set on this request, use one from the session
            $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
        } 
        if ($locale == 'ru_RU') {
            // set NumberFormatter::DECIMAL_SEPARATOR_SYMBOL = '.' 
        }
}

1 个答案:

答案 0 :(得分:1)

我们可以使用setlocale(http://php.net/manual/en/function.setlocale.php)来全局设置区域设置。

但我不认为我们可以全局更改小数点分隔符。 Php从操作系统中获取区域设置信息。我没有找到任何允许更新语言环境信息的选项。

一个选项是您为货币使用不同的区域设置,并为日期/时间,语言等使用不同的区域设置。例如,如果您的用户选择俄语作为他们的语言,您可以调用setlocale(LC_NUMERIC,'en_US')。这将迫使Php使用美国语言环境来格式化数字