2016-08-26 1 views
0

Je mis en place une page i18n, où je traduis des messages en utilisant yii\i18n\PhpMessageSource avec la partie de configuration suivante: (config/web.php)vue de la traduction pour l'application Yii pas trouvé

$config = [ 
'id' => 'basic', 
'basePath' => dirname(__DIR__), 
'bootstrap' => ['debug'], 
'language' => 'de-DE', 
'components' => [ 
    'i18n' => [ 
      'translations' => [ 
       'app*' => [ 
        'class' => 'yii\i18n\PhpMessageSource', 
        'basePath' => '@app/messages', 
        'fileMap' => [ 
         'app' => 'app.php', 
        ], 
        'forceTranslation' => true, 
       ], 
      ], 

]] 

... byt la manière : ça fonctionne bien. Pour une sorte de contenu statique - comme une empreinte -, j'aime utiliser une vue traduite complète. donc j'ai ajouté quelques sous-répertoires dans le views - dossier, avec la perspicacité de vue:

@app/views/myController/de-DE/myview.php 
@app/views/myController/en-US/myview.php 

Donc mon action effectue les opérations suivantes:

public function actionImpressum() { 
    \Yii::$app->language = 'en-US'; 
    return $this->render('myview'); 
} 

... qui se traduit par un paramètre non valide

yii\base\InvalidParamException: The view file does not 
exist: /path/to/my/app/views/myCtrl/myview.php 

Cette erreur est valide car il n'y a pas de vue sur ce chemin. Mais ne devrait pas la méthode render() utiliser le chemin pour les vues de traduction, comme: /path/to/my/app/views/myCtrl/en-US/myview.php ?? Y a-t-il quelque chose que j'ai oublié?

Merci.

Répondre

1

Puisqu'il n'y a pas sourceLanguage dans votre configuration, je suppose que vous ne l'avez pas changé et la langue source de votre application est en-US (par défaut).

Lorsque la langue source est la même que la langue cible est pas traduit.

Voir documentation à ce sujet:

Remarque: Si la langue cible est la même que celle vue originale en langue source sera rendue indépendamment de la présence de vue traduit.

Donc pour en-US il cherche le fichier /path/to/my/app/views/myCtrl/myview.php.

+0

Mais je définis: '' forceTranslation '=> true, '. Et, la même erreur se produit, si je mets 'language' et' sourceLanguage' à 'de-DE'. En passant: traduire des parties du texte avec phpMessages-Feature et les mêmes paramètres de configuration fonctionne bien. –

+1

'forceTranslation' est pour les messages seulement et avec' language' et 'sourceLanguage' tous les deux réglés sur' de-DE' c'est la même situation source = target – Bizley

+0

@Bizley a raison. Vous définissez 'forceTranslation = true' pour un dictionnaire spécifique, mais le rendu des vues ne dépend d'aucun dictionnaire. Découvrez ['FileHelper :: localize()'] (https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseFileHelper.php#L93) – SilverFire