Localizar blocos

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.

List_repeat block em inglês "Lists_repeat block" em espanhol "Lists_repeat block" em coreano listas_repeat bloco em árabe da direita para a esquerda

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.