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