Поэтому я пытаюсь использовать функцию Drupal.t () в некоторых моих пользовательских кодах Javascript (в моей теме).
Как получить нужные мне строки в объекте Drupal.locale.strings? Я вижу некоторые строки там, но, конечно, не может быть загружена вся база данных. Какой лучший способ добавить к этому? Я хотел бы использовать функцию PHP t (), чтобы добавленные строки можно было редактировать в интерфейсе перевода.
Просто столкнулся с этой же проблемой сегодня и исследовал ее немного больше. Крис выше имеет хороший комментарий, но в конечном итоге он неверен. Вам не нужно использовать Drupal.behaviors для его работы.
Как отметил сам JonMcL в своем последнем комментарии, функция _locale_parse_js_file в locale.inc отвечает за синтаксический анализ шаблонов Drupal.t ("somestring"), начиная со строки 1493 (в Drupal 7.22):
Это просто «тупая» функция анализа, которая не заботится о семантике и просто находит все экземпляры Drupal.t («что-то») в любом файле, который она получает.
Что может быть распространенным недостатком, так это то, что вам нужно иметь всю строку в вашем исходном коде в форме Drupal.t ("translateme"), потому что (очевидно) никакой javascript не выполняется, когда файл открывается через file_get_contents в php. Это означает, что вы никогда не сможете использовать Drupal.t (somevariable) и надеяться, что Drupal перехватит все строковые переменные javascript, которые вы выбросили в Drupal.t.
Если вы хотите перевести «женщины» для диаграммы и дать строку контекст, синтаксис будет следующим:
Также, если у вас установлен drush, проверьте, что ваш js-файл анализируется с помощью команды;
Затем вы можете очистить кэш
... и повторите приведенную выше команду vget, чтобы убедиться, что список уже проанализированных файлов пуст. Таким образом, ваш файл будет обработан при следующем запуске (проверьте это тоже).
источник
drush vget javascript_parsed
! Более быстрый способ перестроить файлы сценариев переводов - просто удалить файлы CSS и JS с помощьюdrush @sitealias cc css-js
.Несколько ошибок, с которыми я столкнулся при реализации многоязычного JS в Drupal 7:
Во-первых, убедитесь, что ваш файл JS не включен . Начиная с Drupal 7.22,
Drupal.locale.strings
кажется, не обновляется автоматически, если вы встраиваете файлы JavaScript в Drupal . Интерфейс перевода все равно уловил строку, добавив к моему замешательству.Во-вторых, убедитесь, что вы используете Drupal.behaviors для прикрепления вашего JS к странице. Регулярное закрытие JS не вызовет "магический" анализ
Drupal.t()
вызовов Drupal . Технически это то, что вы должны делать в любом случае;)Оттуда это действительно довольно безболезненно. Просто используйте
Drupal.t()
текст, который вы хотите перевести, очищайте кэш каждый раз, когда вы обновляете файл, и ваши переводчики должны видеть новую строку в интерфейсе по адресу/admin/config/regional/translate/translate
. Это довольно приятно, как только вы работаете.источник