En GWT uno normalmente cargas cadenas i18n usando una interfaz de la siguiente manera:Cargando GWT mensajes de una base de datos
public interface StatusMessage extends Messages {
String error(String username);
:
}
que luego carga las cadenas reales de un archivo deStatusMessage.property:
error=User: {0} does not have access to resource
Esta es una gran solución; sin embargo, mi cliente es inamovible en su demanda de colocar las cadenas i18n en una base de datos para que puedan modificarse en tiempo de ejecución (aunque no es un requisito que se modifiquen en tiempo real).
Una solución es crear un servicio asíncrono que tiene un identificador de mensaje y configuración regional del usuario y devuelve una cadena. Lo he implementado y lo encuentro terriblemente feo (introduce una gran cantidad de comunicación extra con el servidor, además de que hace que el reemplazo del marcador de propiedad sea bastante complicado).
Así que mi pregunta es esta, ¿puedo en algún buen camino implementar un proveedor de mensajes personalizado que carga los mensajes desde el servidor de una sola vez (para la sesión del usuario actual). Si también se puede enganchar en el mecanismo de mensaje de GWT predeterminado, entonces estaría completamente satisfecho (es decir, así puedo crear una interfaz como la de arriba y seguir usando el agradable formato de reemplazo de propiedad {0}, {1} ...) .
También son bienvenidas otras sugerencias para mensajes limpios basados en bases de datos en GWT.
+1 Esta es una muy buena idea. La idea es que imprimirías un mapa JSON como 'var dict = {'key': 'value'}' en el HTML de la página del host, luego en tu código GWT, llama a 'Dictionary dict = Dictionary.getDictionary (" dict "); 'para obtener el objeto similar a un mapa en su código GWT. –
La forma en que está configurada la aplicación en la que trabajo actualmente, esto sería similar en comportamiento al enfoque de "un solo golpe" que Lars mencionó ya que hay una página de host, por lo que todos los mensajes (miles, en el caso de Lars) ser almacenados y recuperados juntos en un solo archivo. –