Próbuję więc użyć funkcji Drupal.t () w niektórych niestandardowych kodach JavaScript (w moim motywie).
Jak uzyskać ciągi, które muszę wypełnić w obiekcie Drupal.locale.strings? Widzę tam jakieś ciągi, ale oczywiście nie można załadować całej bazy danych. Jak najlepiej to dodać? Chciałbym użyć funkcji PHP t (), aby dodane łańcuchy mogły być edytowane w interfejsie Tłumacz.
Właśnie natknąłem się dziś na ten sam problem i przestudiowałem go nieco bardziej. Chris powyżej ma dobry komentarz, ale ostatecznie jest niepoprawny. Nie musisz używać Drupal.behaviors, aby działało.
Jak zauważył sam JonMcL w swoim ostatnim komentarzu, funkcja _locale_parse_js_file w locale.inc jest odpowiedzialna za analizowanie wzorców Drupal.t („somestring”) począwszy od wiersza 1493 (w Drupal 7.22):
Jest to po prostu „głupia” funkcja parsująca, która nie dba o semantykę i po prostu znajduje wszystkie wystąpienia Drupal.t („coś”) w każdym otrzymywanym pliku.
To, co może być powszechną gotcha, to to, że musisz mieć cały ciąg w kodzie źródłowym w formie Drupal.t („translateme”), ponieważ (oczywiście) żaden skrypt javascript nie jest wykonywany, gdy plik jest otwierany przez file_get_contents w php. Oznacza to, że nigdy nie możesz zrobić Drupal.t (gdziekolwiek) i mam nadzieję, że Drupal wyłapie wszystkie zmienne javascript zawierające łańcuchy, które rzucisz w Drupal.t.
Jeśli chcesz przetłumaczyć „kobiety” dla wykresu i nadać ciągowi kontekst, składnia wyglądałaby następująco:
Ponadto, jeśli masz zainstalowany Drush, sprawdź, czy plik js jest analizowany za pomocą polecenia;
Następnie możesz wyczyścić pamięć podręczną
... i powtórz powyższe polecenie vget, aby sprawdzić, czy lista już przeanalizowanych plików jest pusta. W ten sposób twój plik zostanie ponownie przeanalizowany przy następnym uruchomieniu (to też sprawdź).
źródło
drush vget javascript_parsed
! Szybszym sposobem wymuszenia odbudowania plików skryptów tłumaczeń jest usunięcie plików CSS i JS przy użyciudrush @sitealias cc css-js
.Kilka problemów, na które natknąłem się podczas wdrażania wielojęzycznego JS w Drupal 7:
Najpierw upewnij się, że plik JS nie jest dołączany bezpośrednio . Począwszy od Drupal 7.22,
Drupal.locale.strings
wydaje się , że nie aktualizuje się automatycznie, jeśli wstawiasz pliki JavaScript w Drupal . Interfejs tłumaczenia i tak podniósł ciąg znaków, co jeszcze bardziej mnie zamieszało.Po drugie, upewnij się, że używasz Drupal.behaviors, aby dołączyć JS do strony. Regularne zamykanie JS nie uruchomi „magicznej” analizy
Drupal.t()
wywołań Drupala . To jest technicznie coś, co powinieneś robić;)Stamtąd naprawdę jest całkiem bezbolesne. Po prostu użyj
Drupal.t()
wokół tekstu, który chcesz przetłumaczyć, wyczyść pamięć podręczną przy każdej aktualizacji pliku, a tłumacze powinni zobaczyć nowy ciąg znaków w interfejsie na/admin/config/regional/translate/translate
. To całkiem miłe, kiedy już zaczniesz działać.źródło