Daher versuche ich, die Funktion Drupal.t () in einigen meiner benutzerdefinierten Javascript-Codes (in meinem Design) zu verwenden.
Wie erhalte ich die benötigten Zeichenfolgen im Objekt Drupal.locale.strings? Ich sehe dort einige Zeichenfolgen, aber natürlich kann nicht die gesamte Datenbank geladen werden. Was ist der beste Weg, um es hinzuzufügen? Ich möchte die PHP t () -Funktion verwenden, damit die hinzugefügten Zeichenfolgen in der Übersetzungsoberfläche bearbeitet werden können.
Ich bin heute auf dasselbe Problem gestoßen und habe es ein bisschen genauer untersucht. Chris oben hat einen guten Kommentar, aber er ist letztendlich falsch. Sie müssen Drupal.behaviors nicht verwenden, damit es funktioniert.
Wie JonMcL selbst in seinem letzten Kommentar bemerkt hat, ist die Funktion _locale_parse_js_file in locale.inc für das Parsen von Drupal.t-Mustern ("somestring") ab Zeile 1493 (in Drupal 7.22) verantwortlich:
Es ist nur eine "dumme" Analysefunktion, die sich nicht um die Semantik kümmert und einfach alle Instanzen von Drupal.t ("etwas") in jeder empfangenen Datei findet.
Ein häufiges Problem könnte sein, dass Sie die gesamte Zeichenfolge in Ihrem Quellcode im Formular Drupal.t ("translateme") haben müssen, da (offensichtlich) kein Javascript ausgeführt wird, wenn die Datei über file_get_contents in PHP geöffnet wird. Das bedeutet, dass Sie niemals Drupal.t (eine Variable) ausführen können und hoffen, dass Drupal alle Zeichenfolgen enthaltenden Javascript-Variablen abfängt, die Sie auf Drupal.t werfen.
Wenn Sie "Frauen" für ein Diagramm übersetzen und der Zeichenfolge einen Kontext geben möchten, lautet die Syntax:
Wenn Sie drush installiert haben, überprüfen Sie außerdem, ob Ihre js-Datei mit dem Befehl analysiert wurde.
Dann können Sie Ihren Cache mit bereinigen
... und wiederholen Sie den obigen Befehl vget, um sicherzustellen, dass die Liste der bereits analysierten Dateien leer ist. Auf diese Weise wird Ihre Datei beim nächsten Lauf repariert (überprüfen Sie dies auch).
quelle
drush vget javascript_parsed
! Eine schnellere Möglichkeit, die Neuerstellung von Übersetzungsskriptdateien zu erzwingen, besteht darin, CSS- und JS-Dateien mit zu entfernendrush @sitealias cc css-js
.Einige Fallstricke, auf die ich bei der Implementierung von mehrsprachigem JS in Drupal 7 gestoßen bin:
Stellen Sie zunächst sicher, dass Ihre JS-Datei nicht inline enthalten ist . Ab Drupal 7.22
Drupal.locale.strings
scheint es sich nicht automatisch zu aktualisieren, wenn Sie JavaScript-Dateien in Drupal einbinden . Die Übersetzungsoberfläche hat den String trotzdem aufgenommen, was zu meiner Verwirrung beigetragen hat.Stellen Sie zweitens sicher, dass Sie Drupal.behaviors verwenden , um Ihre JS an die Seite anzuhängen. Regelmäßige JS-Schließungen lösen nicht Drupals "magische" Analyse von
Drupal.t()
Aufrufen aus. Das ist technisch etwas, was du sowieso tun solltest;)Von dort ist es wirklich ziemlich schmerzlos. Verwenden
Drupal.t()
Sie einfach den zu übersetzenden Text, leeren Sie den Cache jedes Mal, wenn Sie die Datei aktualisieren, und Ihre Übersetzer sollten die neue Zeichenfolge in der Benutzeroberfläche unter sehen/admin/config/regional/translate/translate
. Es ist ganz nett, wenn Sie es zum Laufen bringen.quelle