データベースを使用しないYII2の多言語ウィジェット

Yii2のサイトをruとenの2つの言語で国際化する例。 国際化を担当するコンポーネントはすでにYii2に組み込まれており、i18nと呼ばれます。 使用を開始するには、コンポーネントセクションのアプリケーション構成に追加します。



ファイルの場所が異なる場合があるため、高度なテンプレートを使用します。



目的



  1. ruとenの2つの言語間でサイトを切り替える。
  2. site.com/en/の形式でアドレスバーに言語を表示します。
  3. ユーザーが言語を指定せずにサイトに切り替えた場合、ユーザーに最適な言語へのユーザーの自動リダイレクト。
  4. 翻訳は配列の形式でPHPファイルに保存する必要があります。


構成



設定ファイルを編集します。私の場合は\ frontend \ config \ main.phpです



return [ 'language'=>'en', //   ,                    . 'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'class' => 'frontend\widgets\MultiLang\components\UrlManager', //   .  . 'languages' => ['ru', 'en'], //      'enableDefaultLanguageUrlCode' => true, //     ,  false,           www.site.com/ ,  true – www.site.com/ru 'rules'=>[ '/' => 'site/index', '<controller:\w+>/<action:\w+>/'=>'<controller>/<action>', ], ], 'i18n' => [ 'translations' => [ 'app*' => [ // app   php      app.php (  ) 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@frontend/messages', //      frontend/messages/ru/app.php 'sourceLanguage' => 'en', //    ,  ,        ], ], ], ],
      
      





'class' => 'frontend \ widgets \ MultiLang \ components \ UrlManager'、ファイルの内容はここから取得さ 、開発者の指示に従ってコンポーザーを使用できますが、ウィジェットを行うので、UrlManager.phpをウィジェットにコピーするだけです。



翻訳フロントエンド/メッセージ/ ru / app.phpのリストを含むファイルには、配列が含まれている必要があります



 return [ ... 'Example text...' => ' ...', ... ];
      
      





組み込みメソッドtを使用します



 <?= Yii::t('app', 'Example text...') ?>
      
      





最初の引数で、カテゴリを指定します。1つあります-アプリ、多くの翻訳ファイルを作成できます。 2番目の引数では、サイトに表示される英語のテキストを記述します。



言語の切り替え。



ウィジェットフォルダーにMultiLangフォルダーを作成します。私にとっては次のようになります。



 Frontend\ Widgets\ MultiLang\ Components\ UrlManager.php Views\ View.php MultiLang.php
      
      





どこでも言語切り替えを表示するには、呼び出します



 <?= MultiLang::widget(['cssClass'=>'pull-right language']); ?>
      
      





ウィジェットへのパスを書くことを忘れないでください



 use frontend\widgets\MultiLang\MultiLang;
      
      







クラスコンテンツフロントエンド\ウィジェット\ MultiLang \ MultiLang.php



 <?php namespace frontend\widgets\MultiLang; use yii\helpers\Html; class MultiLang extends \yii\bootstrap\Widget { public $cssClass; public function init(){} public function run() { return $this->render('view', [ 'cssClass' => $this->cssClass, ]); } }
      
      





コンテンツビューフロントエンド\ウィジェット\ MultiLang \ビュー\ view.php



 <?php namespace frontend\widgets\MultiLang; use yii\helpers\Html; use Yii; ?> <div class="btn-group <?= $cssClass; ?>"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <span class="uppercase"><?= Yii::$app->language; ?></span> <span class="caret"></span> </a> <ul class="dropdown-menu"> <li class="item-lang"> <?= Html::a('Go to English', array_merge( \Yii::$app->request->get(), [\Yii::$app->controller->route, 'language' => 'en'] )); ?> </li> <li class="item-lang"> <?= Html::a('  ', array_merge( \Yii::$app->request->get(), [\Yii::$app->controller->route, 'language' => 'ru'] )); ?> </li> </ul> </div>
      
      





おわりに



一般に、Yii2での国際化の実装は難しくなく、3つのファイルを持つ単純なウィジェットであることが判明しました。



ここから取られた UrlManager.php MultiLang.phpはビューをレンダリングするだけです。 View.phpビュー自体。



All Articles