«

»

Mai 30

Utilisation des dates pour l’international avec Yiiframework

Traduction de l’article »Using International Dates » de RussellEngland que vous trouverez ici. Lorsque « je » est utilisé, il s’agit bien évident de l’auteur d’origine RussellEngland.

Introduction

J’ai eu besoin d’utiliser des dates aux formats britannique (dd/mm/yyyy) dans mon application, mais il m’a été difficile de trouver des exemples sur la manière de faire jusqu’au jour ou j’ai trouvé de comment le faire – jusqu’à ce que je trouve sur ce forum un excellent « post » http: // www.yiiframework.com/forum/index.php ?/topic/3649-dealing-with-i18n-date-formats/

De ces « posts », j’ai réalisé une solution complète : j’ai noté qu’il fallait que j’utilise le format de date ‘court’.

Définir la variable locale

Ajoutez cette ligne à protected/main/config.php, à ajouter après le nom d’application

return array(
    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
    'name'=>'My Application',
    'sourceLanguage'=>'en_gb',

Définissez la règle de validation ¶

Dans votre modèle, eg : protected/models/client.php ajouter cette règle de format pour n’importe quelles dates

public function rules()
{
    return array(
        ...
        array('date_of_birth','date','format'=>Yii::app()->locale->getDateFormat('short')),
        ...

Dates d’épargne ¶

J’ai modifié le « post » du forum pour les dates courtes. De nouveau c’est dans votre modèle

protected function beforeSave()
{
    if(parent::beforeSave())
    {
        // Format dates based on the locale
        foreach($this->metadata->tableSchema->columns as $columnName => $column)
        {
            if ($column->dbType == 'date')
            {
                $this->$columnName = date('Y-m-d',
                    CDateTimeParser::parse($this->$columnName,
                    Yii::app()->locale->getDateFormat('short')));
            }
            elseif ($column->dbType == 'datetime')
            {
                $this->$columnName = date('Y-m-d H:i:s',
                    CDateTimeParser::parse($this->$columnName,
                    Yii::app()->locale->getDateTimeFormat('short')));
            }
        }
        return true;
    }
    else
        return false;
}

 

Formater les dates

Et finalement formaté vos dates au retour de la fonction de recherche dans votre modèle.

protected function afterFind()
{
    // Format dates based on the locale
    foreach($this->metadata->tableSchema->columns as $columnName => $column)
    {
        if (!strlen($this->$columnName)) continue;
 
        if ($column->dbType == 'date')
        {
            $this->$columnName = Yii::app()->dateFormatter->formatDateTime(
                    CDateTimeParser::parse(
                        $this->$columnName,
                        'yyyy-MM-dd'
                    ),
                    'short',null
                );
        }
        elseif ($column->dbType == 'datetime')
        {
            $this->$columnName = Yii::app()->dateFormatter->formatDateTime(
                    CDateTimeParser::parse(
                        $this->$columnName,
                        'yyyy-MM-dd hh:mm:ss'
                    ),
                    'short','short'
                );
        }
    }
    return true;
}

Changer la langue de destination

En théorie (je ne l’ai jamais testé) vous devriez pouvoir changer la langue à la volée – mon idée est lorsqu’un utilisateur se connecte, la variable locale est mise à jour dans la fonction « afterlogin » et les dates sont formatées selon la langue.

Yii::app()->setLanguage($lang);

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>