O Blockly oferece suporte a definições de bloco que podem ser localizadas para o idioma do usuário. Com o uso de tabelas de strings, as strings de mensagem na definição de bloco JSON podem adaptar as entradas, os campos e os rótulos para refletir o vocabulário, a ordem das palavras e a direção do idioma.
Todos esses casos compartilham a mesma definição de bloco 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}"
}
Mesa de strings
O exemplo lists_repeat
inclui várias strings "%{BKY_...}"
. Cada um deles
é uma referência a uma string na tabela de strings Blockly.Msg
. Quando o
bloco é instanciado, o Blockly tenta substituir a string pelo valor.
Por exemplo, %{BKY_LISTS_REPEAT_TITLE}
é substituído pelo valor de
Blockly.Msg['LISTS_REPEAT_TITLE']
, se houver. Se o valor não existir,
a notação %{BKY_...}
será mantida, e o Blockly emitirá um aviso
sobre a tradução ausente.
Como mostrado no exemplo, a notação funciona em vários locais. As mensagens
e as dicas permitem que as strings visíveis ao usuário sejam substituídas. Da mesma forma, os campos
suspensos também podem usar a notação para o texto do item. O URL de ajuda pode ser localizado para
garantir que o usuário seja direcionado a uma página com localização semelhante. E, por fim, o valor
colour
pode usar a notação para centralizar a paleta de blocos.
Se você estiver usando a implementação de JavaScript e não quiser mudar o
idioma do usuário durante a execução, talvez seja mais fácil usar uma referência direta. Por
exemplo, Blockly.Msg['LISTS_REPEAT_TITLE']
ou
Blockly.Msg.LISTS_REPEAT_TITLE'
.
As tabelas de strings são carregadas por qualquer um dos arquivos .js
de idiomas específicos em
msg/js
. Carregue o arquivo apropriado na sua página da Web para carregar a tradução em bloco correta.
Interpolação de mensagens JSON
O atributo message0
(e message1
, message2
etc.) determina as entradas,
os campos e o texto do rótulo ao redor. Para LISTS_REPEAT_TITLE
no
bloco lists_repeat
, o valor em inglês é:
Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';
Dois marcadores de interpolação, %1
e %2
, marcam os locais das duas entradas.
Mais detalhes são fornecidos na matriz args0
. args1
corresponderia à string message1
. Consulte o guia Criar blocos personalizados para mais detalhes sobre como especificar entradas e campos de blocos.
O texto entre os marcadores de interpolação é convertido em campos de rótulo sem nome. Isso cria a ordem de palavras do bloco e como ele é lido:
// 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번 넣어, 리스트 생성";
Ao traduzir para idiomas da direita para a esquerda, a string da mensagem é escrita na ordem visual e não deve incluir comandos de direção Unicode:
// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر %1 %2 مرات";
Como recriar tabelas de strings
A criação dos arquivos .js
da tabela de strings faz parte do script build:langfiles
. O
script usa as chaves do identificador e as traduções em inglês de
msg/messages.js
para criar um novo en.json
.
Em seguida, junto com as traduções encontradas nos
outros arquivos JSON,
ele vai recriar as
tabelas de strings JavaScript
atualizadas para todos os idiomas, incluindo um novo
en.js
.
Os arquivos JSON em outros idiomas que não o inglês vêm de parceiros da TranslateWiki. Consulte as notas sobre tradução para ver detalhes sobre como você pode ajudar.