Yii - Localização

I18N (Internationalization)é o processo de criação de um aplicativo que pode ser adaptado a vários idiomas. O Yii oferece uma gama completa de recursos I18N.

Locale é um conjunto de parâmetros que especificam o idioma e o país de um usuário. Por exemplo, en-US significa o idioma inglês e os Estados Unidos. O Yii oferece dois tipos de idiomas: idioma de origem e idioma de destino. O idioma de origem é o idioma no qual todas as mensagens de texto do aplicativo são escritas. O idioma de destino é o idioma que deve ser usado para exibir o conteúdo aos usuários finais.

O componente de tradução de mensagens traduz mensagens de texto do idioma de origem para o idioma de destino. Para traduzir a mensagem, o serviço de tradução de mensagens deve procurá-la em uma fonte de mensagem.

Para usar o serviço de tradução de mensagens, você deve -

  • Envolva as mensagens de texto que deseja traduzir no método Yii :: t ().
  • Configure as fontes de mensagens.
  • Armazene mensagens na origem da mensagem.

Step 1 - O método Yii :: t () pode ser usado assim.

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

No trecho de código acima, o 'aplicativo' representa uma categoria de mensagem.

Step 2 - Agora, modifique o config/web.php Arquivo.

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

No código acima, definimos os idiomas de origem e de destino. Também especificamos uma fonte de mensagem suportada poryii\i18n\PhpMessageSource. O padrão app * indica que todas as categorias de mensagens iniciando com app devem ser traduzidas usando esta fonte de mensagem particular. Na configuração acima, todas as traduções em russo estarão localizadas no arquivo messages / ru-RU / app.php.

Step 3- Agora, crie a estrutura de diretório messages / ru-RU. Dentro da pasta ru-RU, crie um arquivo chamado app.php. Isso armazenará todas as traduções EN → RU.

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

Step 4 - Crie uma função chamada actionTranslation () no SiteController.

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

Step 5 - Insira o URL http://localhost:8080/index.php?r=site/translation no navegador da web, você verá o seguinte.

A mensagem foi traduzida para o russo quando definimos o idioma de destino como ru-RU. Podemos alterar dinamicamente o idioma do aplicativo.

Step 6 - Modifique o actionTranslation() método.

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

Agora, a mensagem é exibida em inglês -

Step 7 - Em uma mensagem traduzida, você pode inserir um ou vários parâmetros.

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

A seguir será a saída.

Você pode traduzir um script de exibição completo, em vez de traduzir mensagens de texto individuais. Por exemplo, se o idioma de destino é ru-RU e você deseja traduzir o arquivo de visão views / site / index.php, você deve traduzir a visão e salvá-la no diretório views / site / ru-RU.

Step 8- Crie a estrutura de diretório views / site / ru-RU. Então, dentro da pasta ru-RU crie um arquivo chamado index.php com o seguinte código.

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

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

Step 9 - O idioma de destino é ru-RU, portanto, se você inserir o URL http://localhost:8080/index.php?r=site/index, você verá a página com a tradução para o russo.