2015-09-28 21 views
6

ho Yii2 modello avanzato, voglio impostare una traduzione per mio punto di vista frontend, ecco quello che ho fatto:traduzione Yii2 non funziona

frontend/config/main.php:

'sourceLanguage'=>'en-US', 
'language'=>'en-US', 
'components' => [ 
'i18n' => [ 
    'translations' => [ 
      'app*' => [ 
       'class' => 'yii\i18n\PhpMessageSource', 
       'basePath' => '@common/messages', 
       'sourceLanguage' => 'en-US', 
       'fileMap' => [ 
        'app' => 'app.php', 
        'app/error' => 'error.php', 
       ], 
      ], 
     ], 
    ], 
] 

poi ho aggiunto i18n.php in common/config:

<?php 
return [ 
    'sourcePath' => __DIR__. '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR, 
    'languages' => ['fr-FR','en-US'], //Add languages to the array for the language files to be generated. 
    'translator' => 'Yii::t', 
    'sort' => false, 
    'removeUnused' => false, 
    'only' => ['*.php'], 
    'except' => [ 
     '.svn', 
     '.git', 
     '.gitignore', 
     '.gitkeep', 
     '.hgignore', 
     '.hgkeep', 
     '/messages', 
     '/vendor', 
    ], 
    'format' => 'php', 
    'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'messages', 
    'overwrite' => true, 
]; 

e la common/messages/en-US/app.php:

<?php 

return[ 

    // Menu texts 

    'menu.login'=>'login', 

]; 

e ho usato nelle viste come: Yii::t('app', 'menu.login');

ma la traduzione non ha funzionato, è visualizzato come menu.login

+0

Per utilizzare i file di messaggi basati su chiave, assicurati di aver attivato 'forceTranslation', poiché le app nella lingua predefinita non traducono automaticamente i messaggi –

risposta

10

basta seguire questa procedura ......

Passaggio 1: Nella directory common, creare la cartella messages.

Fase 2: Crearei18n.php file all'interno di directory common/config con seguente contenuto:

<?php 
return [ 
    'sourcePath' => __DIR__. '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR, 
    'languages' => ['en-EN', 'ru-RU'], //Add languages to the array for the language files to be generated, here are English and Russian. 
    'translator' => 'Yii::t', 
    'sort' => false, 
    'removeUnused' => false, 
    'only' => ['*.php'], 
    'except' => [ 
     '.svn', 
     '.git', 
     '.gitignore', 
     '.gitkeep', 
     '.hgignore', 
     '.hgkeep', 
     '/messages', 
     '/vendor', 
    ], 
    'format' => 'php', 
    'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR .  'messages', //path of messages folder created above 
    'overwrite' => true, 
]; 

Nota: Assicurarsi di aggiungere tutte le lingue necessarie alla serie 'lingue'. Nell'esempio sopra ho aggiunto inglese e russo per generare multi lingua Yii2 Framework.

Fase 3: Aggiungere il componente i18n in config file di configurazione common/main.php come segue:

'components' => [ 
    ... 
    'i18n' => [ 
     'translations' => [ 
      'frontend*' => [ 
       'class' => 'yii\i18n\PhpMessageSource', 
       'basePath' => '@common/messages', 
      ], 
      'backend*' => [ 
       'class' => 'yii\i18n\PhpMessageSource', 
       'basePath' => '@common/messages', 
      ], 
     ], 
    ], 
    ... 
], 

Fase 4:

Aggiungere il modulo di lingua nel file di configurazione comune utilizzare la lingua predefinita sulla tua app, ad esempio:

'language' => 'en-EN' all'interno di common/main.php.

Ora è possibile utilizzare Yii::$app->language = ‘en-EN’ in qualsiasi runtime come richiesta URL, codice di query.

Nota: In qualsiasi modello, Controller Generato da Gii, è possibile visualizzare Abilita scelta ticket I18n, abilitare questa opzione per Multi lingua. Gii strumento si auto genera una modella ha pre-definito di seguito, a causa di frontent o backend cartella:

Yii::t('frontend', 'Translatable String'); 

Yii::t('backend', 'Translatable String'); 

Fase 5: Eseguire questa riga di comando dalla cartella app Yii2:

yii message/extract @common/config/i18n.php 

Questo La riga di comando genererà i file di traduzione multilingue Yii2 Framework all'interno di common/messages e si suddivideranno nella cartella frontend e backend.

For example: Yii message will generate the translation files as follows: 
common/ 
..... 
     messages/ 
      en-EN/ 
        backend.php 
        frontend.php 
      ru-RU/ 
        backend.php 
        frontend.php 
..... 

Se si desidera modificare il testo tradurre, basta aprire backend.php o frontend.php file e la modifica.