Yii - Localizzazione

I18N (Internationalization)è il processo di progettazione di un'applicazione che può essere adattata a varie lingue. Yii offre una gamma completa di funzionalità I18N.

Le impostazioni locali sono un insieme di parametri che specificano la lingua e il paese di un utente. Ad esempio, en-US sta per la lingua inglese e gli Stati Uniti. Yii fornisce due tipi di lingue: lingua di origine e lingua di destinazione. La lingua di origine è la lingua in cui sono scritti tutti i messaggi di testo nell'applicazione. La lingua di destinazione è la lingua che dovrebbe essere utilizzata per mostrare il contenuto agli utenti finali.

Il componente di traduzione dei messaggi traduce i messaggi di testo dalla lingua di origine alla lingua di destinazione. Per tradurre il messaggio, il servizio di traduzione del messaggio deve cercarlo in un'origine del messaggio.

Per utilizzare il servizio di traduzione dei messaggi, dovresti:

  • Metti a capo i messaggi di testo che desideri tradurre nel metodo Yii :: t ().
  • Configura le origini dei messaggi.
  • Memorizza i messaggi nell'origine del messaggio.

Step 1 - Il metodo Yii :: t () può essere utilizzato in questo modo.

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

Nello snippet di codice sopra, "app" sta per una categoria di messaggi.

Step 2 - Ora, modifica il file config/web.php file.

<?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;
?>

Nel codice sopra, definiamo la lingua di origine e quella di destinazione. Specifichiamo anche un'origine del messaggio supportata dayii\i18n\PhpMessageSource. Il modello app * indica che tutte le categorie di messaggi che iniziano con app devono essere tradotte utilizzando questa particolare origine del messaggio. Nella configurazione precedente, tutte le traduzioni in russo si troveranno nel file messages / ru-RU / app.php.

Step 3- Ora, crea la struttura della directory messages / ru-RU. All'interno della cartella ru-RU crea un file chiamato app.php. Questo memorizzerà tutte le traduzioni EN → RU.

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

Step 4 - Crea una funzione chiamata actionTranslation () nel SiteController.

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

Step 5 - Immettere l'URL http://localhost:8080/index.php?r=site/translation nel browser web, vedrai quanto segue.

Il messaggio è stato tradotto in russo quando abbiamo impostato la lingua di destinazione su ru-RU. Possiamo cambiare dinamicamente la lingua dell'applicazione.

Step 6 - Modifica il file actionTranslation() metodo.

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

Ora il messaggio viene visualizzato in inglese -

Step 7 - In un messaggio tradotto, puoi inserire uno o più parametri.

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]);
}

Di seguito sarà l'output.

È possibile tradurre un intero script di visualizzazione, invece di tradurre singoli messaggi di testo. Ad esempio, se la lingua di destinazione è ru-RU e si desidera tradurre il file di visualizzazione views / site / index.php, è necessario tradurre la visualizzazione e salvarla nella directory views / site / ru-RU.

Step 8- Crea la struttura della directory views / site / ru-RU. Quindi, all'interno della cartella ru-RU crea un file chiamato index.php con il seguente codice.

<?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 lingua di destinazione è ru-RU, quindi se inserisci l'URL http://localhost:8080/index.php?r=site/index, vedrai la pagina con la traduzione russa.