Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改特定语言的小数分隔符_Php_Symfony_Intl - Fatal编程技术网

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

Php 更改特定语言的小数分隔符,php,symfony,intl,Php,Symfony,Intl,在俄语中,十进制分隔符字符没有固定的定义(GOST 8.417-2002和GOST 2.004-88-俄罗斯国家标准)。建议使用,(逗号),但也可以使用(点) php中的intl扩展将,(逗号)定义为俄语的十进制分隔符 我想根据用户偏好更改小数分隔符字符 在我的项目中,我有一个侦听器onKernelRequest,在这里我设置了区域设置。我假设这是更改预定义的十进制分隔符\u符号的位置 public function onKernelRequest(GetResponseEvent $e

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

php中的intl扩展将
(逗号)定义为俄语的十进制分隔符

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

在我的项目中,我有一个侦听器
onKernelRequest
,在这里我设置了区域设置。我假设这是更改预定义的
十进制分隔符\u符号的位置

    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()全局设置语言环境

但是我认为我们不能在全球范围内改变小数点分隔符。Php从操作系统获取语言环境信息。我没有找到任何允许更新区域设置信息的选项


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

难道你不能只使用吗?这个答案可能会提供你想要的:@DevDonkey:原则上是的,但是我必须触摸使用函数number\u format()的每个地方。并且必须决定是否必须更改标准值(
语言=='ru_ru'
)或不(
语言!='ru'ru'
)。@K0pernicus:你提到的答案不适合我的问题。这里有一个全局细枝设置。我想使此设置取决于所选语言(和用户偏好)。我已找到解决问题的方法。我创建了一个覆盖localizedcurrency过滤器函数的细枝扩展:
公共函数localizedcurrency($number,$currency=null,$locale=null){$formatter=twig\u get\u number\u formatter($locale,'currency');if($formatter->getLocale()='ru'){$formatter->setSymbol(\NumberFormatter::MONETARY_SEPARATOR_SYMBOL,'.');}返回$formatter->formatCurrency($number,$currency);}