Yii - Localisation

I18N (Internationalization)est le processus de conception d'une application adaptable à différentes langues. Yii offre une gamme complète de fonctionnalités I18N.

Les paramètres régionaux sont un ensemble de paramètres qui spécifient la langue et le pays d'un utilisateur. Par exemple, en-US représente les paramètres régionaux anglais et les États-Unis. Yii propose deux types de langues: la langue source et la langue cible. La langue source est la langue dans laquelle tous les messages texte de l'application sont écrits. La langue cible est la langue qui doit être utilisée pour afficher le contenu aux utilisateurs finaux.

Le composant de traduction de message traduit les messages texte de la langue source vers la langue cible. Pour traduire le message, le service de traduction de message doit le rechercher dans une source de message.

Pour utiliser le service de traduction de messages, vous devez -

  • Enveloppez les messages texte que vous souhaitez traduire dans la méthode Yii :: t ().
  • Configurez les sources de messages.
  • Stockez les messages dans la source du message.

Step 1 - La méthode Yii :: t () peut être utilisée comme ceci.

echo \Yii::t('app', 'This is a message to translate!');

Dans l'extrait de code ci-dessus, l '«application» représente une catégorie de message.

Step 2 - Maintenant, modifiez le config/web.php fichier.

<?php
   $params = require(__DIR__ . '/params.php');
   $config = [
      'id' => 'basic',
      'basePath' => dirname(__DIR__),
      'bootstrap' => ['log'],
      'components' => [
         'request' => [
            // !!! insert a secret key in the following (if it is empty) - this
               //is required by cookie validation
            'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
         ],
         'cache' => [
            'class' => 'yii\caching\FileCache',
         ],
         'i18n' => [
            'translations' => [
               'app*' => [
                  'class' => 'yii\i18n\PhpMessageSource',
                  'fileMap' => [
                     'app' => 'app.php'
                  ],
               ],
            ],
         ],
         'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
         ],
         'errorHandler' => [
            'errorAction' => 'site/error',
         ],
         'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
         ],
         'log' => [
            'flushInterval' => 1,
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
               [
                  'class' => 'yii\log\FileTarget',
                  'exportInterval' => 1,
                  'logVars' => [],
               ],
            ],
         ],
         'db' => require(__DIR__ . '/db.php'),
      ],
      // set target language to be Russian
      'language' => 'ru-RU',
      // set source language to be English
      'sourceLanguage' => 'en-US',
      'modules' => [
         'hello' => [
            'class' => 'app\modules\hello\Hello',
         ],
      ],
      'params' => $params,
   ];
   if (YII_ENV_DEV) {
      // configuration adjustments for 'dev' environment
      $config['bootstrap'][] = 'debug';
      $config['modules']['debug'] = [
         'class' => 'yii\debug\Module',
      ];
      $config['bootstrap'][] = 'gii';
      $config['modules']['gii'] = [
         'class' => 'yii\gii\Module',
      ];
   }
   return $config;
?>

Dans le code ci-dessus, nous définissons la source et les langues cibles. Nous spécifions également une source de message prise en charge paryii\i18n\PhpMessageSource. Le modèle app * indique que toutes les catégories de messages commençant par app doivent être traduites à l'aide de cette source de message particulière. Dans la configuration ci-dessus, toutes les traductions russes seront situées dans le fichier messages / ru-RU / app.php.

Step 3- Maintenant, créez la structure de répertoire messages / ru-RU. Dans le dossier ru-RU, créez un fichier appelé app.php. Cela stockera toutes les traductions EN → RU.

<?php
   return [
      'This is a string to translate!' => 'Эта строка для перевода!'
   ];
?>

Step 4 - Créez une fonction appelée actionTranslation () dans le SiteController.

public function actionTranslation() {
   echo \Yii::t('app', 'This is a string to translate!');
}

Step 5 - Entrez l'URL http://localhost:8080/index.php?r=site/translation dans le navigateur Web, vous verrez ce qui suit.

Le message a été traduit en russe lorsque nous avons défini la langue cible sur ru-RU. Nous pouvons changer dynamiquement la langue de l'application.

Step 6 - Modifier le actionTranslation() méthode.

public function actionTranslation() {
   \Yii::$app->language = 'en-US';
   echo \Yii::t('app', 'This is a string to translate!');
}

Maintenant, le message s'affiche en anglais -

Step 7 - Dans un message traduit, vous pouvez insérer un ou plusieurs paramètres.

public function actionTranslation() {
   $username = 'Vladimir';
   // display a translated message with username being "Vladimir"
   echo \Yii::t('app', 'Hello, {username}!', [
      'username' => $username,
   ]), "<br>";
   $username = 'John';
   // display a translated message with username being "John"
   echo \Yii::t('app', 'Hello, {username}!', [
      'username' => $username,
   ]), "<br>";
   $price = 150;
   $count = 3;
   $subtotal = 450;
   echo \Yii::t('app', 'Price: {0}, Count: {1}, Subtotal: {2}', [$price, $count, $subtotal]);
}

Voici la sortie.

Vous pouvez traduire un script de vue entier au lieu de traduire des messages texte individuels. Par exemple, si la langue cible est ru-RU et que vous souhaitez traduire le fichier de vue views / site / index.php, vous devez traduire la vue et l'enregistrer dans le répertoire views / site / ru-RU.

Step 8- Créez la structure de répertoires views / site / ru-RU. Ensuite, dans le dossier ru-RU, créez un fichier appelé index.php avec le code suivant.

<?php
   /* @var $this yii\web\View */
   $this->title = 'My Yii Application';
?>

<div class = "site-index">
   <div class = "jumbotron">
      <h1>Добро пожаловать!</h1>
   </div>
</div>

Step 9 - La langue cible est ru-RU, donc si vous entrez l'URL http://localhost:8080/index.php?r=site/index, vous verrez la page avec la traduction russe.