2015-05-07 14 views
8

Próbuję skonfigurować tłumaczenie frontendu strony internetowej za pomocą rzeczy i18l. Tu jest mój plik i18l.php umieszczone na frontend/configYii2 - Multi language

<?php 
return [ 
    'sourcePath' => 'frontend', 
    'languages' => ['en-US', 'pt-BR'] , //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' => 'frontend' . DIRECTORY_SEPARATOR . 'translations', 
    'overwrite' => true, 
]; 

i tu moja main.php również na frontend

(...) 
'language' => 'en-US', 
'components' => [ 
     'i18n' => [ 
      'translations' => [ 
      'app*' => [ 
       'class' => 'yii\i18n\PhpMessageSource', 
       'basePath' => 'frontend/translations', 

       'fileMap' => [ 
        'app' => 'app.php', 
        'app/error' => 'error.php', 
       ], 
      ], 
     ], 
] 

Używam <?= Yii::t('app', 'some string') ?> na witrynach i układów i kiedy biegnę polecenie ./yii message/extract @ frontend/config/i18n.php tworzy dla mnie folder o nazwie "translations" zawierający dwa inne foldery "en-US" i "pt-BR" zarówno z app.php, który już miałem wypełnione niektórymi tłumaczeniami. Ale nadal nie ma tłumaczenia, gdy zmieniam język na main.php, jak powinno być (myślę). Byłbym wdzięczny, gdyby ktoś mógł mi o tym powiedzieć.

Dzięki.

+1

Świetna wiadomość. Chciałem tylko wskazać jedną rzecz. ' Gogol

+0

Nie jestem pewien, czy to jest to, ale odkryłem, że jeśli cel docelowy i źródłowy są takie same, musisz wymusić tłumaczenia, aby uzyskać zgodność z plikiem zamiast z parametrem "Yii :: t'. http://www.yiiframework.com/doc-2.0/yii-i18n-messagesource.html#$forceTranslation-etetail –

Odpowiedz

4

Świetny post, ze wszystkimi potrzebnymi szczegółami.

Walczyłem z tymi samymi rzeczami, ale zrobiłeś to całkiem dobrze.

Tak więc, jeśli można uruchomić polecenie i wygeneruje plik, wówczas sourcePath jest poprawne. Jeśli nie wyświetla komunikatów przeliczane po starcie pomimo wprowadzonych zmian ustawień, po czym, jak sądzę z problem mógłby być na basePath:

Spróbuj użyć, konfiguracji BasePath, co następuje:

'basePath' => '@frontend/translations',