更改特定语言的小数点分隔符
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 使用美国语言环境来格式化数字
在俄语中,十进制分隔符 没有固定的定义(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 使用美国语言环境来格式化数字