Así que estoy tratando de usar la función Drupal.t () en algunos de mis códigos JavaScript personalizados (en mi tema).
¿Cómo consigo que se completen las cadenas que necesito en el objeto Drupal.locale.strings? Veo algunas cadenas allí, pero, por supuesto, no se puede cargar toda la base de datos. ¿Cuál es la mejor manera de agregarle? Me gustaría usar la función t () de PHP para que las cadenas agregadas se puedan editar en la interfaz de traducción.
Hoy me encontré con este mismo problema y lo investigué un poco más. Chris arriba tiene un buen comentario, pero en última instancia es incorrecto. No necesita usar Drupal.behaviors para que funcione.
Como señaló el propio JonMcL en su último comentario, la función _locale_parse_js_file en locale.inc es responsable del análisis de los patrones Drupal.t ("somestring") a partir de la fila 1493 (en Drupal 7.22):
Es solo una función de análisis "tonta" que no se preocupa por la semántica y simplemente encuentra todas las instancias de Drupal.t ("algo") en cualquier archivo que recibe.
Lo que podría ser un problema común es que necesita tener toda la cadena en su código fuente en la forma Drupal.t ("translateme"), porque (obviamente) no se ejecuta javascript cuando el archivo se abre a través de file_get_contents en php. Eso significa que nunca puedes hacer Drupal.t (alguna variable) y esperar que Drupal capture todas las variables de JavaScript que contienen cadenas que arrojas a Drupal.t.
Si desea traducir "mujeres" para un gráfico y darle un contexto a la cadena, la sintaxis sería:
Además, si tiene drush instalado, verifique que su archivo js se analice con el comando;
Entonces puedes limpiar tu caché con
... y repita el comando vget anterior para verificar que la lista de archivos ya analizados esté vacía. De esta manera, su archivo se analizará la próxima vez (verifique eso también).
fuente
drush vget javascript_parsed
! Una forma más rápida de forzar la reconstrucción de los archivos de script de traducción es simplemente mediante la eliminación de archivos CSS y JSdrush @sitealias cc css-js
.Un par de problemas con los que me he encontrado al implementar JS multilingüe en Drupal 7:
Primero, asegúrese de que su archivo JS no se incluya en línea . A partir de Drupal 7.22,
Drupal.locale.strings
no parece actualizarse automáticamente si está incorporando archivos JavaScript en Drupal . La interfaz de traducción todavía recogió la cadena de todos modos, lo que aumentó mi confusión.En segundo lugar, asegúrese de estar usando Drupal.behaviors para adjuntar su JS a la página. Los cierres regulares de JS no activarán el análisis "mágico" de
Drupal.t()
invocaciones de Drupal . Esto es técnicamente algo que deberías estar haciendo de todos modos;)A partir de ahí, realmente es bastante indoloro. Simplemente use
Drupal.t()
alrededor del texto que desea traducir, borre su caché cada vez que actualice el archivo, y sus traductores deberían ver la nueva cadena en la interfaz en/admin/config/regional/translate/translate
. Es bastante agradable una vez que lo haces funcionar.fuente