在俄语中,小数分隔符(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 = '.'
}
}
答案 0 :(得分:1)
我们可以使用setlocale(http://php.net/manual/en/function.setlocale.php)来全局设置区域设置。
但我不认为我们可以全局更改小数点分隔符。 Php从操作系统中获取区域设置信息。我没有找到任何允许更新语言环境信息的选项。
一个选项是您为货币使用不同的区域设置,并为日期/时间,语言等使用不同的区域设置。例如,如果您的用户选择俄语作为他们的语言,您可以调用setlocale(LC_NUMERIC,'en_US')。这将迫使Php使用美国语言环境来格式化数字