Localizza blocchi

Blockly supporta definizioni di blocco che possono essere localizzate nella lingua dell'utente. Tramite l'uso di tabelle di stringhe, le stringhe di messaggi nella definizione del blocco JSON possono adattare gli input, i campi e le etichette per riflettere il vocabolario, l'ordine delle parole e la direzione della lingua.

list_repeat: blocco in inglese list_repeat: blocco in spagnolo list_repeat: blocco in coreano list_repeat blocco in arabo da destra a sinistra

Tutti questi casi condividono la stessa definizione di blocco JSON:

// 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}"
}

Tavolo con stringhe

L'esempio lists_repeat include diverse stringhe "%{BKY_...}". Ciascuno di questi elementi è un riferimento a una stringa nella tabella delle stringhe Blockly.Msg. Quando viene creata un'istanza del blocco, Blockly tenta di sostituire la stringa con il valore specificato.

Ad esempio, %{BKY_LISTS_REPEAT_TITLE} viene sostituito con il valore di Blockly.Msg['LISTS_REPEAT_TITLE'], se esistente. Se il valore non esiste, la notazione %{BKY_...} viene lasciata attiva e Blockly emette un avviso per la traduzione mancante.

Come mostrato nell'esempio, la notazione funziona in diverse posizioni. I messaggi e le descrizioni comando consentono di sostituire le stringhe visibili all'utente. Analogamente, anche i campi a discesa possono utilizzare la notazione per il testo dell'elemento. L'URL della guida può essere localizzato per garantire che l'utente venga indirizzato a una pagina localizzata simile. Infine, il valore colour può utilizzare la notazione per centralizzare la tavolozza dei blocchi.

Se utilizzi l'implementazione JavaScript e non prevedi di cambiare la lingua dell'utente in fase di runtime, potresti trovare più semplice utilizzare un riferimento diretto. Ad esempio, Blockly.Msg['LISTS_REPEAT_TITLE'] o Blockly.Msg.LISTS_REPEAT_TITLE'.

Le tabelle di stringhe vengono caricate tramite uno qualsiasi dei file .js specifici per la lingua in msg/js. Carica il file appropriato nella tua pagina web per caricare la traduzione del blocco corretta.

Interpolazione dei messaggi JSON

L'attributo message0 (e message1, message2 e così via) determinano gli input, i campi e il testo dell'etichetta circostante. Per LISTS_REPEAT_TITLE nel blocco lists_repeat, il valore in inglese è:

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

Due indicatori di interpolazione, %1 e %2, contrassegnano la posizione dei due input. Ulteriori dettagli sono disponibili nell'array args0. args1 corrisponde alla stringa message1. Per ulteriori informazioni sulla specifica di input e campi del blocco, consulta la guida Creazione di blocchi personalizzati.

Il testo tra gli indicatori di interpolazione viene convertito in campi etichetta senza nome. Questo crea l'ordine di parole del blocco e la relativa lettura:

// 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번 넣어, 리스트 생성";

Quando traduci in lingue da destra a sinistra, la stringa del messaggio è scritta nell'ordine visivo e non deve includere comandi di direzione Unicode:

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

Ricostruzione delle tabelle di stringhe

La creazione dei file .js della tabella stringa fa parte dello script build:langfiles. Lo script prende le chiavi degli identificatori e le traduzioni in inglese da msg/messages.js per creare un nuovo en.json. Quindi, combinata con le eventuali traduzioni trovate negli altri file JSON, ricrea le tabelle delle stringhe JavaScript aggiornate per tutti i linguaggi, incluso un nuovo en.js.

I file JSON non in inglese provengono dai partner di TranslateWiki. Leggi le note sulla traduzione per informazioni dettagliate su come puoi essere d'aiuto.