Localiza bloques

Blockly admite definiciones de bloqueo que se pueden localizar al idioma del usuario. Mediante el uso de tablas de strings, las strings de mensajes en la definición del bloque JSON pueden adaptar las entradas, los campos y las etiquetas para reflejar el vocabulario, el orden de palabras y la dirección del lenguaje.

Bloque list_repetir en inglés Bloque list_repetir en español Bloque list_repetir en coreano Bloque list_repetir en árabe de derecha a izquierda

Todos estos casos comparten la misma definición de bloque 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}"
}

Tabla de cadenas

En el ejemplo lists_repeat, se incluyen varias strings "%{BKY_...}". Cada una de ellas es una referencia a una string en la tabla de strings Blockly.Msg. Cuando se crea una instancia del bloque, Blockly intenta reemplazar la cadena por el valor.

Por ejemplo, %{BKY_LISTS_REPEAT_TITLE} se reemplaza por el valor de Blockly.Msg['LISTS_REPEAT_TITLE'], si existe. Si el valor no existe, se mantiene la notación %{BKY_...}, y Blockly emite una advertencia para la traducción faltante.

Como se muestra en el ejemplo, la notación funciona en varias ubicaciones. Los mensajes y la información sobre la herramienta permiten reemplazar las strings visibles para los usuarios. Del mismo modo, los campos desplegables también pueden usar la notación para el texto del elemento. La URL de ayuda se puede localizar para garantizar que se dirija al usuario a una página localizada similar. Por último, el valor colour puede usar la notación para ayudar a centralizar la paleta de bloques.

Si usas la implementación de JavaScript y no esperas cambiar el lenguaje del usuario durante el tiempo de ejecución, puede que te resulte más fácil usar una referencia directa. Por ejemplo, Blockly.Msg['LISTS_REPEAT_TITLE'] o Blockly.Msg.LISTS_REPEAT_TITLE'.

Las tablas de cadenas se cargan a través de cualquiera de los archivos .js específicos de cada idioma en msg/js. Carga el archivo apropiado en tu página web para cargar la traducción de bloques correcta.

Interpolación de mensajes JSON

El atributo message0 (y message1, message2, etc.) dicta las entradas, los campos y el texto de la etiqueta circundante. Para LISTS_REPEAT_TITLE en el bloque lists_repeat, el valor en inglés es el siguiente:

Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';

Dos marcadores de interpolación, %1 y %2, marcan las ubicaciones de las dos entradas. Se proporcionan más detalles en el array args0. args1 correspondería a la string message1. Consulta la guía Crea bloques personalizados para obtener más detalles sobre cómo especificar entradas y campos de bloque.

El texto entre los marcadores de interpolación se convierte en campos de etiqueta sin nombre. Esto crea el orden de las palabras del bloque y la manera en que se lee:

// 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번 넣어, 리스트 생성";

Cuando traduces a idiomas de derecha a izquierda, la string del mensaje se escribe en el orden visual y no debe incluir comandos de dirección de Unicode:

// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر  %1 %2 مرات";

Vuelve a compilar tablas de cadenas

La compilación de los archivos .js de la tabla de strings forma parte de la secuencia de comandos build:langfiles. La secuencia de comandos toma las claves de identificador y las traducciones al inglés de msg/messages.js para crear una en.json nueva. Luego, junto con las traducciones que se encuentran en los otros archivos JSON, recreará tablas de strings de JavaScript actualizadas para todos los idiomas, incluido un en.js nuevo.

Los archivos JSON que no están en inglés provienen de socios de TranslateWiki. Consulta las notas sobre la traducción para obtener detalles sobre cómo puedes ayudar.