Yii - Lokalisierung

I18N (Internationalization)ist der Prozess des Entwurfs einer Anwendung, die an verschiedene Sprachen angepasst werden kann. Yii bietet ein umfassendes Spektrum an I18N-Funktionen.

Das Gebietsschema besteht aus einer Reihe von Parametern, die die Sprache und das Land eines Benutzers angeben. Zum Beispiel steht die en-US für das englische Gebietsschema und die Vereinigten Staaten. Yii bietet zwei Arten von Sprachen: Quellsprache und Zielsprache. Die Ausgangssprache ist die Sprache, in der alle Textnachrichten in der Anwendung geschrieben sind. Die Zielsprache ist die Sprache, in der Endbenutzern Inhalte angezeigt werden sollen.

Die Nachrichtenübersetzungskomponente übersetzt Textnachrichten von der Ausgangssprache in die Zielsprache. Um die Nachricht zu übersetzen, muss der Nachrichtenübersetzungsdienst sie in einer Nachrichtenquelle nachschlagen.

Um den Nachrichtenübersetzungsdienst zu verwenden, sollten Sie -

  • Schließen Sie Textnachrichten ein, die mit der Yii :: t () -Methode übersetzt werden sollen.
  • Nachrichtenquellen konfigurieren.
  • Speichern Sie Nachrichten in der Nachrichtenquelle.

Step 1 - Die Yii :: t () -Methode kann so verwendet werden.

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

Im obigen Codefragment steht die 'App' für eine Nachrichtenkategorie.

Step 2 - Ändern Sie nun die config/web.php Datei.

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

Im obigen Code definieren wir die Quell- und die Zielsprache. Wir geben auch eine Nachrichtenquelle an, die von unterstützt wirdyii\i18n\PhpMessageSource. Das App * -Muster gibt an, dass alle Nachrichtenkategorien, die mit der App beginnen, mit dieser bestimmten Nachrichtenquelle übersetzt werden müssen. In der obigen Konfiguration befinden sich alle russischen Übersetzungen in der Datei messages / ru-RU / app.php.

Step 3- Erstellen Sie nun die Verzeichnisstruktur messages / ru-RU. Erstellen Sie im Ordner ru-RU eine Datei mit dem Namen app.php. Dadurch werden alle EN → RU-Übersetzungen gespeichert.

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

Step 4 - Erstellen Sie im SiteController eine Funktion namens actionTranslation ().

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

Step 5 - Geben Sie die URL ein http://localhost:8080/index.php?r=site/translation Im Webbrowser sehen Sie Folgendes.

Die Nachricht wurde ins Russische übersetzt, als wir die Zielsprache auf ru-RU setzten. Wir können die Sprache der Anwendung dynamisch ändern.

Step 6 - Ändern Sie die actionTranslation() Methode.

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

Jetzt wird die Nachricht auf Englisch angezeigt -

Step 7 - In einer übersetzten Nachricht können Sie einen oder mehrere Parameter einfügen.

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

Es folgt die Ausgabe.

Sie können ein Skript für die gesamte Ansicht übersetzen, anstatt einzelne Textnachrichten zu übersetzen. Wenn die Zielsprache beispielsweise ru-RU ist und Sie die Ansichtsdatei views / site / index.php übersetzen möchten, sollten Sie die Ansicht übersetzen und im Verzeichnis views / site / ru-RU speichern.

Step 8- Erstellen Sie die Verzeichnisstruktur views / site / ru-RU. Erstellen Sie dann im Ordner ru-RU eine Datei mit dem Namen index.php mit dem folgenden Code.

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

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

Step 9 - Die Zielsprache ist ru-RU. Wenn Sie also die URL eingeben http://localhost:8080/index.php?r=site/indexsehen Sie die Seite mit russischer Übersetzung.