Hemos creado un método JS personalizado para un trabajo de localización personalizado que carga el objeto I18n del lado del navegador con un atributo personalizado.
Quiero activar una reevaluación de este método JsLocaleHelper en cada uno de los clientes dependientes.
Estoy intentando encontrar una manera de activar esto desde el lado del servidor.
Esto solía funcionar, pero parece haber cambiado recientemente.
Los datos son correctos cuando elimino la caché local del cliente del navegador, pero obviamente esto no es viable para uso en producción. Demuestra que el problema es el almacenamiento en caché local.
Las cosas que he intentado incluyen:
Discourse.request_refresh!
o el más específico:
Discourse.request_refresh!(user_ids: user_ids)
que parece forzar la actualización al navegar. Sin embargo, sospecho que el script se está almacenando en caché, por lo que esta no es una solución.
Acabo de probar Discourse.request_refresh! y parece que está recargando todos los activos de javascript en la próxima navegación. Puede que no esté activando una actualización de JsLocaleHelper, no estoy suficientemente informado sobre cómo funciona eso.
¿Intentaste llamar a ExtraLocalesController.clear_cache! después de realizar cambios en extra-locales? Debería recalcular la versión durante la próxima solicitud.
Gracias. Sí, lo he hecho. Creo que eso es solo del lado del servidor y no cambia el número de versión en el archivo JS proporcionado configurado durante el arranque. Del lado del servidor, no hay ningún problema.
Estoy considerando mover estos datos al objeto del sitio y al serializador para ver si puedo tener más control.
Bueno, supongo que no entiendo qué intentas lograr.
Asumí que querías que el cliente simplemente recogiera los datos que agregaste en el servidor en la próxima recarga. Si quieres hacer todo en el cliente, ¿por qué no actualizar I18n.extras directamente en el cliente?
Si ejecuto ese comando desde la consola de Rails, ¿cómo invalida los scripts en el cliente?
(Para tu información, las etiquetas son un caso especial ya que se usan en las rutas, por lo que tengo que agregar un objeto especial para incluir traducciones, no puedo serializar una traducción de etiqueta en todas partes ya que las rutas no funcionarían).
La próxima vez que el cliente recargue la página, verá un hash diferente en el HTML y cargará el nuevo script. Así es como funciona la función “Personalizar texto” (utiliza el paquete “overrides”).
Problema resuelto. Simplemente tuve que asegurarme de que el número de versión se basara en el contenido del archivo js personalizado. Ahora lo tengo funcionando en desarrollo