Yii - स्थानीयकरण

I18N (Internationalization)एक ऐसी एप्लिकेशन को डिजाइन करने की प्रक्रिया है जिसे विभिन्न भाषाओं में अनुकूलित किया जा सकता है। Yii I18N सुविधाओं का एक पूर्ण स्पेक्ट्रम प्रदान करता है।

लोकेल मापदंडों का एक समूह है जो उपयोगकर्ता की भाषा और देश को निर्दिष्ट करता है। उदाहरण के लिए, एन-यूएस का मतलब अंग्रेजी लोकल और यूनाइटेड स्टेट्स से है। Yii दो प्रकार की भाषाएं प्रदान करता है: स्रोत भाषा और लक्ष्य भाषा। स्रोत भाषा वह भाषा है जिसमें एप्लिकेशन के सभी पाठ संदेश लिखे जाते हैं। लक्ष्य भाषा वह भाषा है जिसका उपयोग अंतिम उपयोगकर्ताओं को सामग्री प्रदर्शित करने के लिए किया जाना चाहिए।

संदेश अनुवाद घटक स्रोत भाषा से लक्ष्य भाषा में पाठ संदेश का अनुवाद करता है। संदेश का अनुवाद करने के लिए, संदेश अनुवाद सेवा को संदेश स्रोत में देखना होगा।

संदेश अनुवाद सेवा का उपयोग करने के लिए, आपको चाहिए -

  • उन पाठ संदेशों को लपेटें जिन्हें आप Yii :: t () विधि में अनुवादित करना चाहते हैं।
  • संदेश स्रोतों को कॉन्फ़िगर करें।
  • संदेश स्रोत में संदेशों को संग्रहीत करें।

Step 1 - Yii :: t () विधि का उपयोग इस तरह किया जा सकता है।

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

उपरोक्त कोड स्निपेट में, 'ऐप' एक संदेश श्रेणी के लिए है।

Step 2 - अब, संशोधित करें config/web.php फ़ाइल।

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

उपरोक्त कोड में, हम स्रोत और लक्ष्य भाषाओं को परिभाषित करते हैं। हम द्वारा समर्थित एक संदेश स्रोत भी निर्दिष्ट करते हैंyii\i18n\PhpMessageSource। ऐप * पैटर्न इंगित करता है कि ऐप से शुरू होने वाली सभी संदेश श्रेणियों का इस विशेष संदेश स्रोत का उपयोग करके अनुवाद किया जाना चाहिए। उपरोक्त कॉन्फ़िगरेशन में, सभी रूसी अनुवाद संदेशों / आरयू-आरयू / ऐप.फ्प फ़ाइल में स्थित होंगे।

Step 3- अब, संदेश / आरयू-आरयू निर्देशिका संरचना बनाएं। आरयू-आरयू फ़ोल्डर के अंदर एक फाइल बनाएं, जिसे app.php कहा जाता है। यह सभी EN → RU अनुवादों को संग्रहीत करेगा।

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

Step 4 SiteController में ActionTranslation () नामक एक फंक्शन बनाएं।

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

Step 5 - URL दर्ज करें http://localhost:8080/index.php?r=site/translation वेब ब्राउज़र में, आप निम्नलिखित देखेंगे।

संदेश को रूसी में अनुवादित किया गया था क्योंकि हमने आरयू-आरयू को लक्ष्य भाषा निर्धारित की थी। हम एप्लिकेशन की भाषा को गतिशील रूप से बदल सकते हैं।

Step 6 - संशोधित करें actionTranslation() तरीका।

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

अब, संदेश अंग्रेजी में प्रदर्शित किया जाता है -

Step 7 - अनुवादित संदेश में, आप एक या एक से अधिक पैरामीटर सम्मिलित कर सकते हैं।

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

निम्नलिखित उत्पादन होगा।

आप व्यक्तिगत पाठ संदेशों का अनुवाद करने के बजाय, संपूर्ण दृश्य स्क्रिप्ट का अनुवाद कर सकते हैं। उदाहरण के लिए, यदि लक्ष्य भाषा आरयू-आरयू है और आप दृश्य / साइट / इंडेक्स.फैप व्यू फाइल का अनुवाद करना चाहते हैं, तो आपको दृश्य का अनुवाद करना चाहिए और इसे व्यू / साइट / आरयू-आरयू निर्देशिका के तहत सहेजना चाहिए।

Step 8- विचार / साइट / ru-RU निर्देशिका संरचना बनाएँ। फिर, आरयू-आरयू फ़ोल्डर के अंदर एक फ़ाइल बनाते हैं, जिसे निम्न कोड के साथ index.php कहा जाता है।

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

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

Step 9 - लक्ष्य भाषा रु-आरयू है, इसलिए यदि आप URL दर्ज करते हैं http://localhost:8080/index.php?r=site/index, आप रूसी अनुवाद के साथ पृष्ठ देखेंगे।