更改特定语言的小数点分隔符

Change decimalseparator for a specific Language

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

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

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

在我的项目中,我有一个侦听器 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 = '.' 
        }
}

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

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

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