En nuestra empresa tenemos una tabla de traducción ms-sql existente que almacena cadenas como esta:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
Hay 3 idiomas en el sistema y espero que esto crezca a un máximo de aproximadamente 10 en el futuro
Esta tabla es leída por varios proyectos muy diferentes (alrededor de 60 proyectos, en su mayoría sitios web / aplicaciones web y algunos servicios web), cada uno de los cuales abre una conexión de base de datos a la base de datos de traducción, almacena en caché las traducciones
Los comentarios de los desarrolladores front-end son que nuestra interfaz de usuario para ingresar o modificar el mayor inconveniente de las traducciones es que no pueden saber qué proyecto utiliza qué cadenas.
A veces modifican cadenas sin saber que están rompiendo 7 proyectos con él.
Ahora solo tienen que escribir algo así this.Translate("Hello World")
y el sistema se encarga del resto.
Por supuesto, podría obligarlos a algo así, this.Translate("Hello World","AwesomeApplication1")
pero parece que va a requerir una gran refactorización en los muchos proyectos.
¿Cómo harías para proporcionar esta solución? ¿Cómo, como desarrollador, proporcionaría el "nombre del proyecto" a la traducción? ¿Cómo almacenarías esto en la base de datos?
Nota importante: la reutilización de la traducción es el punto central de la base de datos centralizada, por lo que el alcance de las traducciones a un proyecto va
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2
No es realmente una opción deseada.
Prefiero algo como:
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2
o una clave externa equivalente a solo poner los nombres en la tabla.
ACTUALIZAR
Basado en el consejo de normalizar la base de datos, se me ocurrió algo como esto hasta ahora:
//this allows me to distinquish if translations where added by developer or by translator
ACTUALIZACIÓN2: se agregó edmx en lugar de texto. Si la gente está interesada, podría escribir el proyecto WCF en el que estoy envolviendo este concepto para que otras personas puedan probarlo y usarlo.