Yii2更改区域设置格式

时间:2015-03-06 14:30:56

标签: internationalization formatting locale yii2

我从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.我在哪里可以设置它?

2 个答案:

答案 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
        );
    }