LC_MONETARY it_IT @ utf8在使用PHP之前显示欧元符号

时间:2014-12-01 12:58:14

标签: php locale

将区域设置信息设置为:

$locale = 'it_IT';
$moneyFormat = '%n';

setlocale(LC_MONETARY, $locale.'.utf8');
$optionPrice = money_format($moneyFormat, floatval($option->optionPrice));

价格显示为:

€ 23

而不是

23 €

我找到了区域设置标识符p_sign_posn来设置货币符号的位置,但我不知道如何修改它,显然它在IT区域设置中默认设置为1.

任何人都可以启发我找到一个聪明的解决方案吗?

提前致谢。

编辑:意大利的语言环境显然安装在系统上

vmamp@AMP30:~> locale -a | grep it
it_CH
it_CH.utf8
it_IT
it_IT.utf8
it_IT@euro

2 个答案:

答案 0 :(得分:1)

要使用区域设置感知功能,您必须在计算机上安装所请求的区域设置。如果未显示请求的区域设置,则对setlocale 的调用将失败,并且不会更改任何内容。

例如,我安装了es_ES语言环境,但没有安装it_IT

setlocale(LC_MONETARY, 'es_ES.utf8');
echo money_format($moneyFormat, floatval(12))
// ⇒ 12,00 €
setlocale(LC_MONETARY, 'en_US.utf8');
echo money_format($moneyFormat, floatval(12))
// ⇒ $12.00
setlocale(LC_MONETARY, 'it_IT.utf8');
echo money_format($moneyFormat, floatval(12))
//   FAIL!!!
// ⇒ $12.00

正如您所看到的,后一个调用被忽略(setlocale返回0。)所以您遇到的问题不是欧元的位置;可能缺少it_IT l10n安装。

答案 1 :(得分:0)

对于意大利货币模式,您可以执行以下操作:

$ money = substr(money_format('%。2n',$ number),4)。' €';

给出$ number = 77500

你得到

77.500,00€