2015-12-18 4 views
8

Angenommen, ich habe das Modul Foo installiert, um ein Repository mit Composer zu erstellen. Die Modulstruktur ist wie folgt:Übersetzungspfad des Moduls auf yii2 überschreiben

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

Messages Ordner Foo enthält Übersetzungsdateien des Moduls. Jetzt möchte ich einige Übersetzungszeichenfolgen von Foo überschreiben. Von Yii2 i18n Documentation Ich habe versucht, fileMap Eigenschaft auf der Konfiguration der Übersetzung Komponente zu bar Kategorie zu bar.php zuordnen (anstelle von app\modules\Foo\messages lesen), aber es hat keine Auswirkungen auf Übersetzungen. Meine i18n-Komponentenkonfiguration lautet:

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

Wie erreiche ich mein Ziel?

+0

Bitte zeigen Sie uns, wie dieses Modul – soju

Antwort

2

Wenn Sie Übersetzungen für jedes im Modul enthaltene Modul haben möchten, müssen Sie die Übersetzungen für dieses Modul registrieren. Es kann nicht einfach aus der Konfigurationsdatei gemacht werden. Wahrscheinlich haben Sie dies bereits in Ihrer Moduldatei, ich füge nur zur Vollständigkeit hinzu. Der Code wird aus der Dokumentation kopiert und muss in der Moduldatei sein, also in 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); 
    } 

} 

In Ihrem Fall ist es nicht so aussehen wie Sie Datei zur Verfügung stellen müssen könnte mapping.You einfach dieses Format verwendet für Ihre Dateien

[[basePath]]/LanguageID/CategoryName.php 

Leider kann ich keine Liste der verfügbaren Kategorien finden.

Wenn Sie dann einige der Modulübersetzungen überschreiben möchten, müssen Sie die zu verwendende Kategorie angeben, wie dies in Ihrer Konfigurationsdatei der Fall ist. Es überschreibt speziell die Kategorie module/foo/bar.

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

Ihre Bedürfnisse Übersetzungsdatei einer Ordnerstruktur wie in der Übersetzung Beschreibung zu folgen, so in dem obigen Beispiel wäre es

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

Otherise sein, Sie fileMap an verschiedenen Orten zur Karte verwenden können, wie wenn Ihre bar.php Datei in app/Nachrichten/[Sprachcode] ist

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

Joe, vielen dank für y seine Übersetzungen registrieren unsere umfassende antwort !. Nur der Hinweis, dass ich die Modul-ID als Schlüssel für die Konfiguration verwendet habe. Ich werde einige Bearbeitungen auf Ihrer Antwort vorschlagen, wenn Sie sehen, dass die Bearbeitung korrekt ist, ist es angenehm, sie anzuwenden;). – meysam

+0

Entschuldigung, aber die von Ihnen vorgeschlagene Änderung wird für das von mir vorgeschlagene Beispiel nicht funktionieren. Ihr eigener Anwendungsfall mag anders gewesen sein, aber damit die Antwort sinnvoll ist, muss sie so bleiben wie sie ist! Danke für den Vorschlag obwohl @meysam –

+0

OK, nochmals vielen Dank;). – meysam

Verwandte Themen