Integración de contenido i18n
@teawithfruit si esperas algo en tu página HTML guardada (fuera del editor GrapesJS), lo único que veo que puede hacer es: '''js script: function() { console.log('¡guion hecho!') } ``` Así que no sirve de nada, probablemente eres otra víctima de pensar que los scripts dentro del editor GrapesJS funcionarán en el códig...
Lee la respuesta completa abajo ↓Pregunta
Hola,
Estoy trabajando en la integración de mi sistema de localización (i18n) con grapes.js. La idea es tener un campo de datos, que contenga la cadena i18n. '''html
<div class="content" data-i18n="common:localize.string"></div> ``` Si el atributo de datos está activado, grapes.js tomará la cadena y la hará visible en un campo de configuración. Si se modifica el campo de configuración, también se modifica el atributo de datos y también el contenido dentro del lienzo. Si se borra el campo de configuración, el atributo de datos se eliminará.Si el archivo se guarda, los atributos se incluirán. Al usar el archivo en producción, un pequeño script busca el atributo data-i18n para colocar el texto dentro del elemento en el idioma correcto.
Ahora tengo algunos problemas con la implementación.
- Si edito el campo de ajustes, el contenido del lienzo está bien configurado pero en "Ver código" y el archivo guardado no. Parece que el texto se añade y no se reemplaza. ¿Es ''' component.components('Insertar texto aquí...')' la forma correcta de reemplazar contenido dentro de un componente? (jsfiddle línea 29) Puedes emular una cadena i18n válida usando '''i18nString''' en el campo de configuración.
- Me gustaría integrar el script en el componente. Ahora tengo un problema usando funciones asincrónicas. ¿Es posible usar funciones asincrónicas dentro de un script de componentes? (jsfiddle línea 57)
- ¿Cuál es la mejor manera de actualizar el contenido del lienzo? Estoy pendiente entre la línea 27 y la línea 61. Ambos en el jsfiddle.
- Si altero el campo de ajustes, se reinician los ajustes tipográficos. ¿Es posible evitar eso?
- He leído la documentación y la documentación de la API. Pero no estoy seguro de si la forma en que creé el componente es la mejor. ¿Puedes darme un comentario sobre eso?
Puedes comprobar mis puntos añadiendo el bloque "Content" al lienzo y modificando el campo i18n en los ajustes. Aquí está el enlace de jsfiddle. https://jsfiddle.net/bool/gfbdyLup/6/
¡Gracias por esta estupenda biblioteca y por tu ayuda!
Respuestas (3)
@teawithfruit si esperas algo en tu página HTML guardada (fuera del editor GrapesJS), lo único que veo que puede hacer es: '''js script: function() { console.log('¡guion hecho!') }
Así que no sirve de nada, probablemente eres otra víctima de pensar que los scripts dentro del editor GrapesJS funcionarán en el código exportado (pero el HTML final no tiene nada que ver con el editor). Una explicación un poco más detallada [aquí](https://github.com/artf/grapesjs/issues/2181#issuecomment-520470116)
Hola @teawithfruit hay un par de problemas con tu código:
- no tienes acceso a ''this'' como modelo dentro del componente ''script'': Component & Js docs
- si tu caso de uso es controlar un atributo, no tienes que proporcionar un rasgo personalizado para ello; Simplemente define un rasgo normal y añade oyentes para los cambios sobre ese atributo:
modelo: {
init() {
this.on('change:attributes:data-i18n', this.handleTypeChange);
},
handleTypeChange() {
console.log('Entrada cambiada a: ', this.getAttributes()['data-i18n']);
},
Predeterminados: {
atributos:{
'data-i18n':''
},
Rasgos: [
{
Nombre: 'data-i18n',
etiqueta: 'i18n!'
}
],
//....
¡Salud!
¡Gracias por la respuesta tan útil! Este es mi bloque/componente actualizado. Ahora mismo solo tengo un problema más.
La función de script que he añadido al componente no se llama en la página html guardada. Si añado el bloque al lienzo en el editor, se llama a la función, pero no si guardo la página y la abro fuera de grapes.js. Si miro en el inspector de elementos, la etiqueta de script es visible pero no se llama.
¿Estoy haciendo algo mal?
'''js editor. DomComponents.addType('content', { isComponent: el => el.classList && el.classList.contains('content'), extiende: 'texto', modelo: { async init() { clave const = this.getAttributes()['data-i18n']
if(key && await Localize.exists(key) == true) { this.set('content', await Localize.get(key)) }
this.on('change:attributes:data-i18n', this.handleTypeChange) }, async handleTypeChange() { clave const = this.getAttributes()['data-i18n']
if(key && await Localize.exists(key) == true) { this.set('content', await Localize.get(key)) } else { Let Attributes = this.getAttributes()
if(attributes['data-i18n'] != indefinido) { eliminar atributos['data-i18n'] this.setAttributes(attributes) } } }, Predeterminados: { Rasgos: [ { Nombre: 'data-i18n', Etiqueta: 'i18N' } ], script: function() { console.log('¡guion hecho!') } } } })
editor. BlockManager.add('add-content', { etiqueta: 'Contenido', categoría: 'Elementos', Tipo: 'Contenido', content: '<div class="content">Insertar texto aquí...</div>` })
¡Gracias de nuevo por vuestra ayuda!
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #1777
[Pregunta] ¿Cómo cambiar dinámicamente los DomComponents?
Hola, gracias por esta gran biblioteca, estoy trabajando con un sistema de boletines que obtiene contenido de la base de datos y genera los...
Issue #2029
[Pregunta/Error] grapesjs lanza un DOMException si importas contenido HTML con atributos inválidos (numerados)
Hola @artf, Recibimos un informe que indica que cuando importas código HTML con atributos incorrectos, como '<td class="cell" 01234="0" >¡H...
Issue #1538
Contenido diferente al exportar
Hola, Estoy intentando usar Grapejs con contenido dinámico. Lo que quiero conseguir es, como en WordPress, tener códigos cortos / etiquetas...
Issue #1902
[PREGUNTAS] Desactivar/cambiar el comportamiento de los componentes integrados
Hola, Intentando conseguir trabajo de GrapesJ para un proyecto en el que estoy trabajando actualmente. ¿Pero hay alguna forma de desactivar...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.