我从Yii 1.x迁移到Yii2。
在Yii 1.x中,您可以定义/更改文件中的本地化格式(类似于/app/i18n/en.php
),您可以在其中设置所有需要的格式,以后可以使用。
现在在Yii2,这已经消失了?
我有4种语言,每种语言都有不同的设置。如果我需要新的格式化功能,我该怎么办? 例如。我想在一个商店制作一个价格格式,每个不同的lang
DE - 1.234,56
EN - 1,234.567
SK - 1234,5
CZ - 1 234,5678
所以我创建了一个新的格式化函数Yii::$app->formatter->asPrice(1234.567890)
。
我是否必须在函数内编写switch
并检查语言?如果我需要更多这样的功能,这将是非常不方便的,并且有很多不完整之处。如果我以后有新语言,我将不得不用新的case
调整所有这些函数。
必须有一个更好的解决方案。有什么想法吗?
更新
我认为你们没有得到我的问题..我知道我可以设置语言环境,并使用asDecimal或类似的功能。但问题是我无法专门定制格式化选项 - 它会自动采用intl PHP扩展中定义的格式。我需要专门定制这些格式的可能性。也许是EN的默认值是2位小数,但我需要3.我在哪里可以设置它?
答案 0 :(得分:2)
In Yii2 official documentation:
您可以使用如下:
Yii::$app->formatter->locale = 'en-US';
echo Yii::$app->formatter->asDate('2014-01-01'); // output: January 1, 2014
Yii::$app->formatter->locale = 'de-DE';
echo Yii::$app->formatter->asDate('2014-01-01'); // output: 1. Januar 2014
Yii::$app->formatter->locale = 'ru-RU';
echo Yii::$app->formatter->asDate('2014-01-01'); // output: 1 января 2014 г.
因此,如果你有一个语言表,你可以在那里设置语言环境,并在主要布局中定义" Yii :: $ app-> formatter-> locale = $ lang-> locale"其中$ lang是与当前语言匹配的语言模型(类)的对象。
答案 1 :(得分:-1)
为什么不想用作十进制?
echo Yii::$app->formatter->asDecimal(1234.5678);
DE - 1.234,568
EN - 1,234.568
SK - 1 234,568
CZ - 1 234,568
或者您可以尝试以下方式:
private $_priceDecimals = [ 'de_DE' => 2, 'en_EN' => 3, 'sk_SK' => 1, 'cz_CZ' => 4];
public function asPrice($value)
{
return $this->asDecimal(
$value,
isset($this->_priceDecimals[$this->locale]) ? $this->_priceDecimals[$this->locale] : null
);
}