Yii - Lokalisasi

I18N (Internationalization)adalah proses mendesain aplikasi yang dapat disesuaikan dengan berbagai bahasa. Yii menawarkan spektrum lengkap fitur I18N.

Lokal adalah sekumpulan parameter yang menentukan bahasa dan negara pengguna. Misalnya, en-US adalah singkatan dari bahasa Inggris lokal dan Amerika Serikat. Yii menyediakan dua jenis bahasa: bahasa sumber dan bahasa target. Bahasa sumber adalah bahasa yang digunakan untuk menulis semua pesan teks dalam aplikasi. Bahasa target adalah bahasa yang harus digunakan untuk menampilkan konten kepada pengguna akhir.

Komponen terjemahan pesan menerjemahkan pesan teks dari bahasa sumber ke bahasa target. Untuk menerjemahkan pesan, layanan terjemahan pesan harus mencarinya di sumber pesan.

Untuk menggunakan layanan terjemahan pesan, Anda harus -

  • Bungkus pesan teks yang ingin Anda terjemahkan dengan metode Yii :: t ().
  • Konfigurasi sumber pesan.
  • Simpan pesan di sumber pesan.

Step 1 - Metode Yii :: t () bisa digunakan seperti ini.

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

Dalam cuplikan kode di atas, 'app' adalah singkatan dari kategori pesan.

Step 2 - Sekarang, modifikasi file config/web.php mengajukan.

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

Dalam kode di atas, kami mendefinisikan sumber dan bahasa target. Kami juga menentukan sumber pesan yang didukung olehyii\i18n\PhpMessageSource. Pola app * menunjukkan bahwa semua kategori pesan yang dimulai dengan aplikasi harus diterjemahkan menggunakan sumber pesan khusus ini. Dalam konfigurasi di atas, semua terjemahan bahasa Rusia akan ditempatkan di file messages / ru-RU / app.php.

Step 3- Sekarang, buat struktur direktori messages / ru-RU. Di dalam folder ru-RU buat file bernama app.php. Ini akan menyimpan semua terjemahan EN → RU.

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

Step 4 - Buat fungsi bernama actionTranslation () di SiteController.

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

Step 5 - Masukkan URL http://localhost:8080/index.php?r=site/translation di browser web, Anda akan melihat yang berikut ini.

Pesan tersebut diterjemahkan ke dalam bahasa Rusia saat kami menetapkan bahasa target ke ru-RU. Kami dapat secara dinamis mengubah bahasa aplikasi.

Step 6 - Ubah actionTranslation() metode.

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

Sekarang, pesan tersebut ditampilkan dalam bahasa Inggris -

Step 7 - Dalam pesan yang diterjemahkan, Anda dapat memasukkan satu atau beberapa parameter.

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

Berikut akan menjadi keluarannya.

Anda dapat menerjemahkan seluruh skrip tampilan, alih-alih menerjemahkan pesan teks individual. Misalnya, jika bahasa target adalah ru-RU dan Anda ingin menerjemahkan file view views / site / index.php, Anda harus menerjemahkan view dan menyimpannya di direktori views / site / ru-RU.

Step 8- Buat struktur direktori views / site / ru-RU. Lalu, di dalam folder ru-RU buat file bernama index.php dengan kode berikut.

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

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

Step 9 - Bahasa targetnya adalah ru-RU, jadi jika Anda memasukkan URL-nya http://localhost:8080/index.php?r=site/index, Anda akan melihat halaman dengan terjemahan bahasa Rusia.