2015-09-28 30 views
6

mam Yii2 zaawansowany szablon, chcę ustawić tłumaczenie dla moich poglądów frontend, oto co zrobiłem:Yii2 tłumaczenie nie działa

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', 
       ], 
      ], 
     ], 
    ], 
] 

potem dodałem i18n.php w 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, 
]; 

i common/messages/en-US/app.php:

<?php 

return[ 

    // Menu texts 

    'menu.login'=>'login', 

]; 

i użyłem go w poglądach jak: Yii::t('app', 'menu.login');

ale tłumaczenie nie działa, to wyświetlane jako menu.login

+0

Aby używać plików wiadomości opartych na kluczach, należy włączyć opcję 'forceTranslation', ponieważ aplikacje w domyślnym języku nie będą automatycznie tłumaczyć wiadomości –

Odpowiedz

10

Ty Tylko po to kroki ......

Krok 1: W katalogu common utwórz folder messages.

Krok 2: Tworzenie i18n.php plik wewnątrz common/config katalog z następującej treści:

<?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, 
]; 

Uwaga: Upewnij się, aby dodać wszystkie wymagane języki do tablicy 'języki'. W powyższym przykładzie dodałem angielski i rosyjski dla generowania wielojęzykowego Yii2 Framework.

Krok 3: Dodaj składnik i18n w config pliku common/main.php konfigurację następująco:

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

Krok 4:

Dodaj moduł językowy we wspólnym pliku konfiguracyjnym, aby użyć domyślnego języka w Twojej aplikacji, na przykład:

'language' => 'en-EN' wewnątrz common/main.php.

Teraz można używać Yii::$app->language = ‘en-EN’ w dowolnym czasie wykonywania, np. Żądanie adresu URL, kod zapytania.

Uwaga: W dowolnym modelu kontroler Generowanie przez Gii, można zobaczyć opcję wyboru biletu I18n, włącz tę opcję dla wielu języków. Gii Narzędzie automatycznie wygenerować model posiada zdefiniowane jak poniżej, ze względu na frontent lub backend folderu:

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

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

Krok 5: Run to linia poleceń z Yii2 folderze app:

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

ten linia poleceń wygeneruje wielojęzyczne pliki tłumaczeniowe Yii2 Framework wewnątrz common/messages i podzieli się na folder frontend i 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 
..... 

Jeśli chcesz edytować tekst przetłumaczyć, wystarczy otworzyć backend.php lub frontend.php i edytować plik.