Estoy usando Blockly + SvelteJS, ahora estoy tratando de agregar soporte de idiomas. Así que tengo el componente Toolbox.svelte que se ve así:
<xml id="toolbox" bind:this={toolbox} style="display:none"> <category name={Msg.CATEGORY_LOGIC} colour="#5b80a5"> <block type="controls_if" /> </category> </xml> <script> import Blockly from "blockly"; $: Msg = Blockly.Msg; export let toolbox = undefined; </script>Y también tengo un script que tiene la función de actualización de configuración regional. Actualiza Blockly.Msg
import Blockly from "blockly"; import {categoryNames as categoryEN, blockNames as blockEN} from "./en_US.json"; import {categoryNames as categoryRU, blockNames as blockRU} from "./ru_RU.json"; export function applyBlocklyLocale(locale) { switch (locale) { case "en": for (let key in categoryEN) { Blockly.Msg["CATEGORY_" + key.toUpperCase()] = categoryEN[key]; }; for (let key in blockEN) { Blockly.Msg["BLOCK_" + key.toUpperCase()] = categoryEN[key]; }; break; case "ru": for (let key in categoryRU) { Blockly.Msg["CATEGORY_" + key.toUpperCase()] = categoryRU[key]; }; for (let key in blockRU) { Blockly.Msg["BLOCK_" + key.toUpperCase()] = categoryRU[key]; }; break; }; Blockly.Msg = Blockly.Msg };Pero cuando ejecuto esta función, Blockly.Msg se actualiza y toolbox xml no
Esto no funcionará:
$: Msg = Blockly.Msg;La reactividad no cruza ciertos límites; solo funciona dentro de los componentes y a través de accesorios de componente a componente.
Tendrá que hacer esto a través de eventos o usar una tienda en su lugar para preservar las notificaciones de cambios y la reactividad.