Localiser des blocs

Blockly est compatible avec les définitions de bloc qui peuvent être localisées dans la langue de l'utilisateur. Grâce à l'utilisation de tables de chaînes, les chaînes de message de la définition de bloc JSON peuvent adapter les entrées, les champs et les étiquettes pour refléter le vocabulaire, l'ordre des mots et la direction de la langue.

"Lists_repeat" en anglais "Lists_repeat" en espagnol list_repeat block en coréen listes_repeat bloc en arabe de droite à gauche

Tous ces cas partagent la même définition de bloc 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}"
}

Table à chaînes

L'exemple lists_repeat inclut plusieurs chaînes "%{BKY_...}". Chacun de ces éléments est une référence à une chaîne de la table de chaînes Blockly.Msg. Lorsque le bloc est instancié, Blockly tente de remplacer la chaîne par la valeur.

Par exemple, %{BKY_LISTS_REPEAT_TITLE} est remplacé par la valeur de Blockly.Msg['LISTS_REPEAT_TITLE'], le cas échéant. Si la valeur n'existe pas, la notation %{BKY_...} reste en place et Blockly émet un avertissement pour la traduction manquante.

Comme le montre l'exemple, la notation fonctionne à plusieurs endroits. Les messages et les info-bulles permettent de remplacer les chaînes visibles par l'utilisateur. De même, les champs de liste déroulante peuvent également utiliser la notation pour le texte d'élément. L'URL d'aide peut être localisée pour que l'utilisateur soit redirigé vers une page où la langue est similaire. Enfin, la valeur colour peut utiliser cette notation pour centraliser la palette de blocs.

Si vous utilisez l'implémentation JavaScript et que vous ne prévoyez pas de modifier la langue de l'utilisateur au moment de l'exécution, il peut être plus simple d'utiliser une référence directe. Par exemple, Blockly.Msg['LISTS_REPEAT_TITLE'] ou Blockly.Msg.LISTS_REPEAT_TITLE'.

Les tables de chaînes sont chargées via l'un des fichiers .js spécifiques au langage dans msg/js. Chargez le fichier approprié sur votre page Web pour charger la traduction en bloc appropriée.

Interpolation de message JSON

L'attribut message0 (ainsi que message1, message2, etc.) dicte les entrées, les champs et le texte des libellés environnants. Pour LISTS_REPEAT_TITLE dans le bloc lists_repeat, la valeur en anglais est:

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

Deux repères d'interpolation, %1 et %2, marquent l'emplacement des deux entrées. Vous trouverez plus de détails dans le tableau args0. args1 correspond à la chaîne message1. Consultez le guide Créer des blocs personnalisés pour en savoir plus sur la spécification des entrées de blocs et des champs.

Le texte entre les repères d'interpolation est converti en champs de libellé sans nom. Cela crée l'ordre des mots du bloc et la façon dont il se lit:

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

Lors de la traduction dans des langues de droite à gauche, la chaîne de message est écrite dans l'ordre visuel et ne doit pas inclure de commandes de direction Unicode:

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

Recompiler des tables de chaînes

La création des fichiers .js de la table de chaînes fait partie du script build:langfiles. Le script utilise les clés d'identification et les traductions en anglais de msg/messages.js pour créer un en.json. Ensuite, combiné à toutes les traductions trouvées dans les autres fichiers JSON, il recréera les tables de chaînes JavaScript mises à jour pour toutes les langues, y compris le nouveau en.js.

Les fichiers JSON dans une langue autre que l'anglais proviennent de partenaires de TranslateWiki. Consultez les remarques sur la traduction pour savoir comment vous pouvez aider.