Nella nostra azienda abbiamo una tabella ms-sql di traduzione esistente che memorizza stringhe come questa:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
Ci sono 3 lingue nel sistema e mi aspetto che questo cresca fino a un massimo di circa 10 in futuro
Questa tabella viene letta da più progetti molto diversi (circa 60 progetti, per lo più siti web / applicazioni web e alcuni servizi web), che aprono ciascuna una connessione al database di traduzione, nascondono le traduzioni
Il feedback degli sviluppatori front-end è che la nostra interfaccia utente per modificare o modificare il lato negativo delle traduzioni è che non possono sapere quale progetto utilizza quali stringhe.
Talvolta modificano le stringhe senza sapere che stanno rompendo 7 progetti con esso.
Ora devono solo digitare qualcosa come this.Translate("Hello World")
e il sistema si occupa del resto.
Potrei naturalmente costringerli a qualcosa di simile a this.Translate("Hello World","AwesomeApplication1")
ma sembra che richieda un sacco di refactoring in tutti i molti progetti.
Come andresti a fornire questa soluzione? Come vorresti, come dev, fornire il "nome del progetto" alla traduzione? Come memorizzeresti questo nel database?
Nota importante: il riutilizzo della traduzione è l'intero punto del database centralizzato, quindi scoprite le traduzioni in un progetto andando
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2
non è davvero un'opzione ricercata.
Preferirei qualcosa del tipo:
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2
o un equivalente di chiave esterna semplicemente mettendo i nomi nella tabella.
Aggiorna
Sulla base del consiglio di normalizzare il database, ho trovato una cosa del genere finora:
//this allows me to distinquish if translations where added by developer or by translator
UPDATE2: aggiunto edmx anziché il testo. Se le persone sono interessate potrei github il progetto WCF sto avvolgendo questo concetto in modo che altre persone possano testarlo e usarlo.