2 Stimmen

Internationalisierung von Yii-Modulen

Yii Doc:
M Ebenen verschachtelt werden. Das heißt, ein Modul kann enthalten ein weiteres Modul enthalten, das wiederum ein weiteres Modul enthalten kann. Wir nennen das erste übergeordnetes Modul, während das untergeordnete Modul. Kind-Module müssen deklariert werden in der Moduleigenschaft ihres Elternmoduls deklariert werden, so wie wir die Module in der oben gezeigten Anwendungskonfiguration wie oben gezeigt.

Ich versuche, meine zweisprachige Anwendung mit Yii::t() Funktion:

Yii Doc:
Und bei der Verwendung von Yii::t() zur Übersetzung einer Erweiterungsnachricht, wird die folgende Format stattdessen verwendet werden: Yii::t('Xyz.categoryName', 'message to be translated')

Ich übersetze Module Nachrichten mit Yii::t('MyModule.source', 'Test'); es funktioniert für Module.
Funktioniert aber nicht bei Untermodulen Yii::t('MyModule.SubModule.source', 'Test');
Die Frage ist:
Wie wird der Quellpfad für SubModule in Modulen definiert, wenn die Nachrichten in:
/protected/modules/MyModule/modules/SubModule/messages/

4voto

Jon Punkte 411383

Sie versuchen, die Yii::t falsch.

Der Pfad für die CPhpMessageSource (erster Parameter von Yii::t ) sollte das Modul bei dem der Aufruf von Yii::t erscheint . Es spielt keine Rolle, ob dieses Modul in einem anderen Modul zusammengefasst ist.

In Ihrem Beispiel sollten Sie also Folgendes verwenden

Yii::t('SubModule.source', 'Test');

und platzieren Sie die Nachrichten in /protected/modules/SubModule/messages/ .

Wenn sich die Meldung ändern soll, je nachdem, ob die Übersetzung innerhalb eines Submoduls durchgeführt wird, fügen Sie der Meldung Parameter hinzu.

1voto

SuVeRa Punkte 2672

Es scheint, dass dies nicht möglich ist, mit CPhpMessageSource zu tun, müssen Sie erweitern und erstellen Sie Ihre eigene Nachricht Klasse.

Sie müssen Ihre Konfigurationsdatei ändern, d.h. config/main.php auch.

'components'=>array(
    ...........
    'messages' => array(
        'class' => 'MyPhpMessageSource',
    ),
    .............

und hier ist das Beispiel MyPhpMessageSource.php, das für Ihre Bedürfnisse geeignet ist.

class MyPhpMessageSource extends CPhpMessageSource {

private $_files=array();

protected function getMessageFile($category,$language)
{
    if(!isset($this->_files[$category][$language]))
    {
        $parts = explode('.', $category);
        $count = count($parts);

        if( $count > 1 ) {
            $filePath = '';
            $moduleClass=$parts[$count-2];

            $class=new ReflectionClass($moduleClass);
            $filePath .= dirname($class->getFileName()).DIRECTORY_SEPARATOR;

            /*
            for($i=0; $i<$count-1; $i++) {
                $moduleClass=$parts[$i];

                if($i == 0) {
                    $class=new ReflectionClass($moduleClass);
                    $filePath .= dirname($class->getFileName()).DIRECTORY_SEPARATOR;
                } else
                    $filePath .= $moduleClass.DIRECTORY_SEPARATOR;
            }
            */

            $filePath .= 'messages' . DIRECTORY_SEPARATOR . $language . DIRECTORY_SEPARATOR . $parts[$count-1] . '.php';

            echo "$filePath<br/>";
            $this->_files[$category][$language] = $filePath;
        }
        else
            $this->_files[$category][$language]=$this->basePath.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$category.'.php';
    }
    return $this->_files[$category][$language];
}
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X