J'essaie donc d'utiliser la fonction Drupal.t () dans certains de mes codes Javascript personnalisés (dans mon thème).
Comment puis-je obtenir les chaînes dont j'ai besoin dans l'objet Drupal.locale.strings? Je vois des chaînes là-dedans, mais bien sûr, la base de données entière ne peut pas être chargée. Quelle est la meilleure façon d'y ajouter? Je voudrais utiliser la fonction PHP t () pour que les chaînes ajoutées puissent être éditées dans l'interface Translate.
Je suis juste tombé sur ce même problème aujourd'hui et je l'ai étudié un peu plus. Chris ci-dessus a un bon commentaire, mais il est finalement incorrect. Vous n'avez pas besoin d'utiliser Drupal.behaviors pour que cela fonctionne.
Comme indiqué par JonMcL lui-même dans son dernier commentaire, la fonction _locale_parse_js_file dans locale.inc est responsable de l'analyse des modèles Drupal.t ("somestring") à partir de la ligne 1493 (dans Drupal 7.22):
C'est juste une fonction d'analyse "stupide" qui ne se soucie pas de la sémantique et trouve simplement toutes les instances de Drupal.t ("quelque chose") dans n'importe quel fichier qu'il reçoit.
Ce qui pourrait être un piège commun, c'est que vous devez avoir toute la chaîne dans votre code source sous la forme Drupal.t ("translateme"), car (évidemment) aucun javascript n'est exécuté lorsque le fichier est ouvert via file_get_contents en php. Cela signifie que vous ne pouvez jamais faire Drupal.t (une variable) et espérons que Drupal interceptera toutes les variables javascript contenant des chaînes que vous lancez sur Drupal.t.
Si vous souhaitez traduire "femmes" pour un graphique et donner un contexte à la chaîne, la syntaxe serait:
De plus, si vous avez installé drush, vérifiez que votre fichier js est analysé avec la commande;
Ensuite, vous pouvez nettoyer votre cache avec
... et répétez la commande vget ci-dessus pour vérifier que la liste des fichiers déjà analysés est vide. De cette façon, votre fichier sera analysé lors de la prochaine exécution (vérifiez également).
la source
drush vget javascript_parsed
! Un moyen plus rapide de forcer la reconstruction des fichiers de script de traduction consiste simplement à supprimer les fichiers CSS et JS à l'aide dedrush @sitealias cc css-js
.Quelques accrochages que j'ai rencontrés lors de l'implémentation de JS multilingue dans Drupal 7:
Tout d'abord, assurez-vous que votre fichier JS n'est pas inclus en ligne . Depuis Drupal 7.22,
Drupal.locale.strings
ne semble pas se mettre à jour automatiquement si vous insérez des fichiers JavaScript dans Drupal . L'interface de traduction a quand même repris la chaîne, ajoutant à ma confusion.Ensuite, assurez-vous que vous utilisez Drupal.behaviors pour attacher votre JS à la page. Les fermetures JS régulières ne déclencheront pas l'analyse "magique" par Drupal des
Drupal.t()
invocations. C'est techniquement quelque chose que vous devriez faire de toute façon;)De là, c'est vraiment assez indolore. Utilisez simplement le
Drupal.t()
texte que vous souhaitez traduire, videz votre cache chaque fois que vous mettez à jour le fichier, et vos traducteurs devraient voir la nouvelle chaîne dans l'interface à/admin/config/regional/translate/translate
. C'est assez agréable une fois que vous l'avez fait fonctionner.la source