2015-12-18 9 views
8

モジュールFooを作者とリポジトリにインストールしたとします。モジュール構造は、このようなものです:Fooyii2上のモジュールの翻訳パスを上書きする

- Foo 
|- models 
|- controllers 
|- views 
|- messages 
|- config 

Messagesフォルダは、モジュールの翻訳ファイルが含まれています。今私はFooのいくつかの翻訳文字列を無効にしたい。 Yii2 i18n Documentationからbarカテゴリを(app\modules\Foo\messagesから読むのではなく)bar.phpにマップするために、翻訳コンポーネントの設定でfileMapプロパティを使用しようとしましたが、翻訳には何の影響もありません。私のi18nコンポーネントの構成は:

'i18n' => [ 
    'translations' => [ 
     '*' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'fileMap' => [ 
       'bar' => 'bar.php' 
      ], 
     ], 
    ], 
], 

どのように私の目標を達成するのですか?

+0

にある場合と同様に、このモジュールはその翻訳 – soju

答えて

2

モジュール内に含まれる各モジュールの翻訳を行う場合は、そのモジュールの翻訳を登録する必要があります。これは設定ファイルから単純に行うことはできません。あなたはおそらくすでにこれをあなたのモジュールファイルに持っているでしょう、私は完全性のためにインクルードします。あなたはmapping.Youは、単にのために、このフォーマットを使用することができ、ファイルを提供する必要があるようapp/modules/Foo.php

<?php 

namespace app\modules\foo; 

use Yii; 

class Module extends \yii\base\Module 
{ 
    public $controllerNamespace = 'app\modules\foo\controllers'; 

    public function init() 
    { 
     parent::init(); 
    /** Register custom translations for this module **/ 
     $this->registerTranslations(); 
    } 

    public function registerTranslations() 
    { 

    /**This registers translations for the Foo module **/ 
     Yii::$app->i18n->translations['modules/foo/*'] = [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'sourceLanguage' => 'en-US', 
      'basePath' => '@app/modules/foo/messages', 

    /**Tells yii where to find the translations for validation and form categories **/ 
      'fileMap' => [ 
       'modules/foo/validation' => 'validation.php', 
       'modules/foo/form' => 'form.php', 
       ... 
      ], 
     ]; 
    } 

    public static function t($category, $message, $params = [], $language = null) 
    { 
     return Yii::t('modules/users/' . $category, $message, $params, $language); 
    } 

} 

にあなたのケースでは、それは見ていないので、コードは、ドキュメントからコピーし、あなたのモジュールファイルにする必要がありますあなたのファイル

[[basePath]]/LanguageID/CategoryName.php 

残念ながら、私は利用可能なカテゴリのリストを見つけることができません。

モジュール翻訳のいくつかを無効にする場合は、設定ファイルで使用するカテゴリを指定する必要があります。 modules/foo/barカテゴリを特に上書きします。

'i18n' => [ 
    'translations' => [ 
     'modules/foo*' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'basePath' => '@app/messages', 
     ], 
    ], 
], 

あなたの翻訳ファイルは、上記の例では、それは

app/messages/ [language code] /modules/foo/bar.php 

Otheriseになるので、翻訳の説明でそのようなフォルダ構造を追跡する必要がある、あなたは別の場所にマッピングするためにfileMapを使用することができ、あなたのbar.phpファイルはアプリ/メッセージ/ [言語コード]

'fileMap' => [ 
'modules/foo/bar' => 'bar.php' 
] 
+0

ジョーを登録する方法を私たちに示してくださいyのおかげで私たちの包括的な答え!ちょうど私が構成上のキーとしてモジュールIDを使用したことに注意してください。私はあなたの答えにいくつかの編集を提案します、編集が正しいと分かったら、それを適用することは喜びです)。 – meysam

+0

申し訳ありませんが、あなたが提案した編集は私が提案した例では機能しません。あなた自身のユースケースは異なっているかもしれませんが、答えが意味をなさなくするためにはそのままの状態にする必要があります! @meysam –

+0

よろしくお願いします。 – meysam

関連する問題