Tengo una aplicación Java con servidor y cliente Swing. Ahora necesito localizar la interfaz de usuario y posiblemente también algunas de las necesidades de datos sean específicas de la configuración regional. Hay pocas cosas en particular sobre las que me gustaría escuchar sus opiniones.Prácticas recomendadas de localización de Java
- ¿Cómo debo distribuir las cadenas localizadas para la IU en los archivos de propiedades? En mi aplicación hay varias vistas y cada una tiene varios paneles. ¿Debo tener un archivo de localización por idioma para cada panel o vista o debo conservar todas las traducciones para un idioma en el mismo archivo? Actualmente me inclino por un archivo por vista y por idioma, pero no estoy seguro de cómo debo manejar algunos términos específicos del dominio que aparecen en muchos lugares. Tener la misma traducción en varios archivos no suena demasiado bien.
- El servidor arroja algunas excepciones que contienen un mensaje que debe mostrarse al usuario. Pude obtener la configuración regional seleccionada de la sesión y manejar la localización en el servidor, pero creo que sería más elegante mantener todos los archivos de localización en el cliente. He estado pensando en enviar solo una clave de localización del servidor con algún tipo de marcador de posición para información específica de error, que se enviaría con la excepción. Entonces el cliente podría construir el mensaje basado en la clave de localización y reemplazar los marcadores de posición con la información específica del error. ¿Eso suena como una buena manera de manejarlo, o hay otras opciones? Normalmente, mis mensajes de excepción contienen información adicional que cambia para cada caso. Podría ser, por ejemplo, "Un usuario con nombre de usuario Khilon ya existe", en cuyo caso la cadena en el archivo de propiedades sería algo así como "Un usuario con nombre de usuario {0} ya existe".
- La localización de los datos es el área que me resulta más incierta. Como no estoy seguro de si alguna vez será necesario, hasta ahora no lo he planeado mucho. La parte de la base de datos suena lo suficientemente directa, básicamente solo necesitas una tabla adicional para las cadenas y una columna para saber para qué locale está la cadena. Aunque no estoy seguro de si sería mejor tener una tabla de localización para cada tabla de datos (por ejemplo, Product y Product_names), o podría usar una tabla para cadenas de localización para todas las tablas de datos. La parte realmente difícil es cómo manejar la interfaz de usuario, ya que hasta cierto punto sería necesario que un usuario ingrese texto para un objeto en varios idiomas. En la práctica, esto podría significar, por ejemplo, que un trabajador en Finlandia le daría un nombre al objeto en finlandés e inglés, y luego un trabajador en otro país podría traducirlo a su propio idioma. Si alguno de ustedes ha hecho algo similar, me gustaría saber cómo lo hizo.
Estoy muy agradecido con todos los que pueden compartir sus experiencias conmigo.
P.S. Si conoce sitios web o libros excepcionalmente buenos sobre el tema, me complacerá escucharlos. Por supuesto, he hecho algunas búsquedas en Google y he leído algunos artículos sobre localización, pero aún no me ha pasado nada.
Gracias por su excelente respuesta. He trabajado en otro proyecto donde db solo contenía claves y las cadenas locales estaban en el archivo de propiedades del cliente. Sin embargo, esto fue muy problemático cuando necesitó realizar cambios en los datos, ya que requería una nueva versión del cliente. Y en mi aplicación, los usuarios pueden cambiar todo, así que esa no es una alternativa. En cuanto a los otros problemas, fechas que he cubierto y estoy trabajando en números. Pero sé que tendré algunos problemas con los juegos de caracteres ... – Carlos