Y a-t-il un mécanisme dans le cadre YII pour traduire des messages dans des fichiers source JavaScript.
Par exemple avec: p> i peut générer des fichiers de traduction .php pour tous yii :: t (). p> est-il possible de générer des fichiers .js avec le même mécanisme. Actuellement, j'hore avec mes données JavaScript JSON avec la table renvoyée par fichier de traduction. P> p>
6 Réponses :
Il n'y a pas de moyen spécifique de traiter cette question. p>
Vous pouvez par exemple générer un fichier avec un tableau d'une matrice avec 'Message-ID' => 'Traduction' et inclut le bon, puis faire des trucs comme alerte ($ Messages "] ou quelque chose. p>
Une alternative pourrait être de faire des vues de votre JavaScript et d'utiliser la fonction Yii :: t () dessus. p>
C'est un très problème. Les sites multiples sont toujours un problème. Yii résolvez le problème pour le code PHP. Mais JS Code problème toujours sur la place. P>
Je ne suis pas une solution très élégante mais ça marche. Créez un contrôleur / composant et générer un code JS avec la localisation à la volée en utilisant T (). P>
/ js / get /? Fichier = SOI-JS-File En mode: p>
Bien sûr, chaque JS doit être réécrire. Si vous utilisez de petits morceaux de code (CS () -> registerscript), j'utilise T () aussi. p>
Une solution alternative serait de faire YII include les messages traduits dans le DOM, qui sera accessible ultérieurement par votre code JS, donc: p>
Je viens de tomber sur ce problème et j'utilise un contrôleur pour générer un code JS à la volée n'est pas une option car vous allez gaspiller des ressources en raison du démarrage d'un processus PHP supplémentaire sur chaque demande. Cela peut être un problème sur des sites de trafic élevés. J'ai donc mis en place une approche différente: Dans les messages .JS sont stockés dans des variables, par exemple
<?php $cs = Yii::app()->clientScript; $cs->registerScriptFile($this->module->assetsUrl.'/js/myjsclass.js'); if (Yii::app()->sourceLanguage != Yii::app()->language) { $cs->registerScript('MyScriptID', ' MyJsClass.lang.foo = \''.Yii::t('TranslationCategory', 'Translated Foo').'\'; MyJsClass.lang.bar = \''.Yii::t('TranslationCategory', 'Translated Bar').'\'; '); } ?>
J'ai créé une extension qui devrait gérer ceci: p>
Voici ma façon de le faire.
Peu de contexte pour mon application: p>
$ disponible CODE>. LI>
- J'ai créé de très petits fichiers de message pour pouvoir faire du public certains d'entre eux sans aucun problème de sécurité. J'ai ensuite créé une variable appelée
$ langfiles code> que je peux changer dans le contrôleur. LI>
ul> xxx pré> Je peux maintenant obtenir la traduction directement dans mes scripts en utilisant la même syntaxe que dans yii2. Exemple: P>
T ('app / citations', 'Hello World. Capitaine parlant!') Code> p> p> p> P>