Blöcke lokalisieren

Blockly unterstützt Blockdefinitionen, die in die Sprache des Nutzers lokalisiert werden können. Durch die Verwendung von Stringtabellen können Nachrichtenstrings in der JSON-Blockdefinition die Eingaben, Felder und Labels anpassen, um das Vokabular, die Wortreihenfolge und die Richtung der Sprache widerzuspiegeln.

Listen/Wiederholungsblock auf Englisch Listen/Wiederholungsblock auf Spanisch Listen/Wiederholungsblock auf Koreanisch list_Repeat (Block) in linksläufigem Arabisch

Alle diese Fälle haben dieselbe JSON-Blockdefinition:

// Block for creating a list with one element repeated.
{
  "type": "lists_repeat",
  "message0": "%{BKY_LISTS_REPEAT_TITLE}",
  "args0": [
    {
      "type": "input_value",
      "name": "ITEM"
    },
    {
      "type": "input_value",
      "name": "NUM",
      "check": "Number"
    }
  ],
  "output": "Array",
  "colour": "%{BKY_LISTS_HUE}",
  "tooltip": "%{BKY_LISTS_REPEAT_TOOLTIP}",
  "helpUrl": "%{BKY_LISTS_REPEAT_HELPURL}"
}

Stringtabelle

Das Beispiel lists_repeat enthält mehrere "%{BKY_...}"-Strings. Jede davon ist ein Verweis auf einen String in der Stringtabelle Blockly.Msg. Wenn der Block instanziiert wurde, versucht Blockly, den String durch den Wert zu ersetzen.

Beispielsweise wird %{BKY_LISTS_REPEAT_TITLE} durch den Wert von Blockly.Msg['LISTS_REPEAT_TITLE'] ersetzt, falls vorhanden. Wenn der Wert nicht vorhanden ist, bleibt die %{BKY_...}-Notation erhalten und Blockly gibt eine Warnung bezüglich der fehlenden Übersetzung aus.

Wie im Beispiel gezeigt, funktioniert die Notation an mehreren Stellen. Mithilfe der Meldungen und Kurzinfos können für den Nutzer sichtbare Strings ersetzt werden. Ebenso kann in Drop-down-Feldern die Notation für Elementtexte verwendet werden. Die Hilfe-URL kann lokalisiert werden, um sicherzustellen, dass der Nutzer auf eine ähnlich lokalisierte Seite weitergeleitet wird. Und schließlich kann der Wert colour die Notation verwenden, um die Palette der Blöcke zu zentralisieren.

Wenn Sie die JavaScript-Implementierung verwenden und nicht erwarten, die Nutzersprache zur Laufzeit zu ändern, ist es möglicherweise einfacher, eine direkte Referenz zu verwenden. Beispiel: entweder Blockly.Msg['LISTS_REPEAT_TITLE'] oder Blockly.Msg.LISTS_REPEAT_TITLE'.

Die Stringtabellen werden über eine der sprachspezifischen .js-Dateien in msg/js geladen. Laden Sie die entsprechende Datei in Ihre Webseite, um die korrekte Blockübersetzung zu laden.

JSON-Nachrichteninterpolation

Das message0-Attribut (und message1, message2 usw.) bestimmen die Eingaben, Felder und umgebenden Labeltext. Für LISTS_REPEAT_TITLE im lists_repeat-Block lautet der Wert für das Englische:

Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';

Die beiden Interpolationsmarkierungen %1 und %2 kennzeichnen die Positionen der beiden Eingaben. Weitere Informationen finden Sie im Array args0. args1 entspricht dem String message1. Weitere Informationen zur Angabe von Blockeingaben und -feldern finden Sie im Leitfaden Benutzerdefinierte Bausteine erstellen.

Der Text zwischen den Interpolationsmarkierungen wird in unbenannte Labelfelder umgewandelt. Dadurch wird die Wortreihenfolge des Blocks und die Textreihenfolge festgelegt:

// In Spanish
Blockly.Msg.LISTS_REPEAT_TITLE = "crear lista con el elemento %1 repetido %2 veces";
// In Korean
Blockly.Msg.LISTS_REPEAT_TITLE = "%1을 %2번 넣어, 리스트 생성";

Bei der Übersetzung in von rechts nach links geschriebene Sprachen wird der Nachrichtenstring in der visuellen Reihenfolge angegeben und sollte keine Unicode-Befehle für die Richtung enthalten:

// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر  %1 %2 مرات";

Stringtabellen neu erstellen

Das Erstellen der .js-Dateien der Stringtabelle ist Teil des Skripts build:langfiles. Das Skript verwendet die Kennungsschlüssel und die englischen Übersetzungen aus msg/messages.js, um ein neues en.json-Objekt zu erstellen. Anschließend werden in Kombination mit allen Übersetzungen, die in den anderen JSON-Dateien gefunden wurden, aktualisierte JavaScript-Stringtabellen für alle Sprachen neu erstellt, einschließlich einer neuen en.js.

Die nicht englischsprachigen JSON-Dateien stammen von Partnern bei TranslateWiki. Weitere Informationen dazu, wie Sie helfen können, finden Sie in den Hinweisen zum Übersetzen.