Localizza blocchi

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

list_repeat block in inglese list_repeat block in spagnolo list_repeat block in coreano Blocco liste_repeat 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}"
}

Tabella delle stringhe

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

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_...} rimane attiva e Blockly emette un avviso per trovare 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, i menu a discesa campi possono utilizzare anche la notazione per il testo dell'elemento. L'URL della guida può essere localizzato in assicurarsi che l'utente venga indirizzato a una pagina localizzata simile. E infine, Il valore colour può utilizzare la notazione per centralizzare la tavolozza di blocchi.

Se utilizzi l'implementazione JavaScript e non prevedi di modificare lingua dell'utente in fase di runtime, potresti trovare più semplice utilizzare un riferimento diretto. Per 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 il file appropriato nella pagina web per caricare la traduzione a blocchi corretta.

Interpolazione di messaggi JSON

Gli input sono dettati dall'attributo message0 (e da message1, message2 e così via), e il testo dell'etichetta circostante. Per LISTS_REPEAT_TITLE in 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 le posizioni dei due input. Nell'array args0 vengono forniti ulteriori dettagli. args1 corrisponde a la stringa message1. Consulta le Creare blocchi personalizzati guida per maggiori dettagli su come specificare gli input e i campi dei blocchi.

Il testo tra gli indicatori di interpolazione viene convertito in testo senza nome campi delle etichette. Questo crea la parola dell'ordine del blocco e come legge:

// 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 nelle lingue da destra a sinistra, la stringa del messaggio è scritta in l'ordine visivo e non devono 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 مرات";

Ricreazione delle tabelle di stringhe

La creazione dei file .js della tabella stringa fa parte dello script build:langfiles. La lo script prende le chiavi di identificatore e le traduzioni in inglese msg/messages.js per creare una nuova en.json. Quindi, combinate con le eventuali traduzioni trovate in gli altri file JSON, creerà di nuovo le istanze aggiornate Tabelle stringhe JavaScript per tutte le lingue, inclusa una nuova en.js.

I file JSON in lingue diverse dall'inglese provengono dai partner di TranslateWiki. Consulta le note relative a traduzione per informazioni dettagliate su come puoi essere d'aiuto.