Então, eu estou tentando usar a função Drupal.t () em alguns dos meus códigos Javascript personalizados (no meu tema).
Como obtenho as strings necessárias no objeto Drupal.locale.strings? Eu vejo algumas strings lá, mas é claro que todo o banco de dados não pode ser carregado. Qual é a melhor maneira de adicionar a isso? Gostaria de usar a função PHP t () para que as seqüências adicionadas possam ser editadas na interface do Translate.
Acabei de encontrar o mesmo problema hoje e o pesquisei um pouco mais. Chris acima tem um bom comentário, mas está incorreto. Você não precisa usar o Drupal.behaviors para que ele funcione.
Conforme observado pelo próprio JonMcL em seu último comentário, a função _locale_parse_js_file em locale.inc é responsável pela análise dos padrões Drupal.t ("somestring") a partir da linha 1493 (no Drupal 7.22):
É apenas uma função de análise "burra" que não se preocupa com a semântica e simplesmente encontra todas as instâncias do Drupal.t ("alguma coisa") em qualquer arquivo que recebe.
O que poderia ser uma pegadinha comum é que você precisa ter toda a string no seu código-fonte no formato Drupal.t ("translateme"), porque (obviamente) nenhum javascript é executado quando o arquivo é aberto através de file_get_contents no php. Isso significa que você nunca pode executar o Drupal.t (algo variável) e torcer para que o Drupal pegue todas as variáveis javascript contendo strings que você lança no Drupal.t.
Se você deseja traduzir "mulheres" para um gráfico e fornecer um contexto à string, a sintaxe seria:
Além disso, se você tiver o drush instalado, verifique se o arquivo js foi analisado com o comando;
Então você pode limpar seu cache com
... e repita o comando vget acima para verificar se a lista de arquivos já analisados está vazia. Dessa forma, seu arquivo será reparado na próxima execução (verifique isso também).
fonte
drush vget javascript_parsed
! Uma maneira mais rápida de forçar a reconstrução dos arquivos de script de traduções é removendo os arquivos CSS e JS usandodrush @sitealias cc css-js
.Algumas dicas que encontrei ao implementar JS multilíngue no Drupal 7:
Primeiro, verifique se o seu arquivo JS não está sendo incluído inline . A partir do Drupal 7.22,
Drupal.locale.strings
não parece se atualizar automaticamente se você estiver incorporando arquivos JavaScript no Drupal . A interface de tradução ainda pegou a string de qualquer maneira, aumentando a minha confusão.Segundo, verifique se você está usando o Drupal.behaviors para anexar seu JS à página. O fechamento regular de JS não acionará a análise "mágica" de Drupal de
Drupal.t()
invocações. Tecnicamente, isso é algo que você deve fazer;)A partir daí, é realmente muito indolor. Use apenas o
Drupal.t()
texto que você deseja traduzir, limpe seu cache sempre que atualizar o arquivo e seus tradutores deverão ver a nova string na interface em/admin/config/regional/translate/translate
. É muito bom quando você faz isso funcionar.fonte