Localizar blocos

O Blockly oferece suporte a definições de bloco que podem ser localizadas para o idioma do usuário. Ao usar tabelas de strings, as strings de mensagens na definição do bloco JSON pode adaptar as entradas, os campos e os rótulos para refletir o vocabulário do idioma; ordenação de palavras e direção.

Bloco "List_repeat" em inglês bloco "list_repeats" em espanhol "list_repeats" em coreano "List_repeat" 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}"
}

Tabela de strings

O exemplo lists_repeat inclui várias strings "%{BKY_...}". Cada um de Essa é 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_...} é mantida e emite um aviso no Blockly. para a tradução que está faltando.

Como mostrado no exemplo, a notação funciona em diversos locais. As mensagens e as dicas de ferramentas permitem que strings visíveis ao usuário sejam substituídas. Da mesma forma, o menu suspenso 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 para uma página localizada de forma semelhante. E, por fim, o O valor colour pode usar a notação para ajudar a centralizar a paleta de blocos.

Se você estiver usando a implementação JavaScript e não esperar alterar o do usuário no ambiente de execução, pode ser mais fácil usar uma referência direta. Para 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 específicos do idioma no msg/js. Carregue arquivo apropriado na sua página da Web para carregar a tradução em bloco correta.

Interpolação de mensagens JSON

Os atributos message0 (e message1, message2 etc.) determinam as entradas, campos e o texto do rótulo ao redor. Para LISTS_REPEAT_TITLE em lists_repeat, o valor em inglês será:

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 a a string message1. Consulte a Criar blocos personalizados para mais detalhes sobre como especificar entradas e campos de bloco.

O texto entre os marcadores de interpolação é convertido em caracteres campos de rótulo. Isso cria a palavra do bloco e como ele se lê:

// 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 em a 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. A usa as chaves do identificador e as traduções em inglês msg/messages.js para criar um novo en.json. Então, combinado com as traduções encontradas em os outros arquivos JSON, ele vai recriar Tabelas de strings JavaScript para todos os idiomas, incluindo um novo en.js

Os arquivos JSON em idiomas diferentes do inglês vêm de parceiros da TranslateWiki. Consulte a observações sobre tradução para mais detalhes sobre como você pode ajudar.