it-swarm.com.de

Wie bekomme ich übersetzte Zeichenfolgen in Drupal.locale.strings?

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 Funktion PHP t()) verwenden, damit die hinzugefügten Zeichenfolgen in der Übersetzungsoberfläche bearbeitet werden können.

9
JonMcL

Drupal behandelt das Auffüllen der erforderlichen Zeichenfolgen in das Javascript-Objekt. Ähnlich wie die gesamte Sammlung von Zeichenfolgen nicht auf jeder Seite geladen wird, werden dem JavaScript nur die erforderlichen Zeichenfolgen hinzugefügt.

Ich glaube, dies geschieht durch Durchlaufen der Skriptdateien, bevor sie tatsächlich zur Seite hinzugefügt werden.

Wenn Sie also Ihrem JavaScript-Code Drupal.t('Some string'); hinzufügen, sollten Sie dies in der Übersetzungsoberfläche übersetzen können.

8
googletorp

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 verantwortlich (in Drupal 7.22)). ::

preg_match_all('~
[^\w]Drupal\s*\.\s*t\s*                       # match "Drupal.t" with whitespace
\(\s*                                         # match "(" argument list start
(' . LOCALE_JS_STRING . ')\s*                 # capture string argument
(?:,\s*' . LOCALE_JS_OBJECT . '\s*            # optionally capture str args
  (?:,\s*' . LOCALE_JS_OBJECT_CONTEXT . '\s*) # optionally capture context
?)?                                           # close optional args
[,\)]                                         # match ")" or "," to finish
~sx', $file, $t_matches);

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.

Was häufig vorkommt, ist, 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 heißt, Sie können niemals Drupal.t (eine Variable) ausführen und hoffen, dass Drupal alle String-haltigen 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:

Drupal.t("women", {}, {context: "charts"}

Wenn Sie drush installiert haben, überprüfen Sie außerdem, ob Ihre js-Datei mit dem Befehl analysiert wurde.

drush vget javascript_parsed

Dann können Sie Ihren Cache mit bereinigen

drush cc all

... 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).

6
user19814

Paar Fallstricke, auf die ich bei der Implementierung von mehrsprachigem JS in Drupal 7:

  1. Stellen Sie zunächst sicher, dass Ihre JS-Datei nicht inline enthalten ist . Ab Drupal 7.22, Drupal.locale.strings Scheint sich nicht automatisch zu aktualisieren, wenn Sie Inlining von JavaScript-Dateien in Drupal . Die Übersetzungsoberfläche wurde weiterhin ausgewählt ohnehin die Saite hoch, was zu meiner Verwirrung beiträgt.

  2. Stellen Sie zweitens sicher, dass Sie Drupal.behaviors verwenden, um Ihr 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 Sie einfach Drupal.t() um 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 /admin/config/regional/translate/translate Sehen. Es ist ziemlich schön, wenn man es zum Laufen bringt.

0
Chris Ruppel