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