Em nossa empresa, temos uma tabela ms-sql de tradução existente que armazena seqüências de caracteres como esta:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
Existem três idiomas no sistema e espero que ele cresça para um máximo de cerca de 10 no futuro
Esta tabela é lida por vários projetos muito diferentes (cerca de 60 projetos, principalmente sites / aplicativos da web e alguns serviços da web), que abrem uma conexão com o banco de dados de tradução, armazenam em cache as traduções
O feedback dos desenvolvedores front-end é que nossa interface do usuário para inserir ou modificar a maior desvantagem das traduções é que elas não podem saber qual projeto usa quais strings.
Às vezes, eles modificam as strings sem saber que estão quebrando 7 projetos.
Agora eles só precisam digitar algo assim this.Translate("Hello World")
e o sistema cuida do resto.
É claro que eu poderia forçá-los a algo como, this.Translate("Hello World","AwesomeApplication1")
mas parece que isso exigirá bastante refatoração em muitos projetos.
Como você forneceria essa solução? Como você, como desenvolvedor, forneceria o "nome do projeto" para a tradução? Como você armazenaria isso no banco de dados?
Nota importante: a reutilização da tradução é o ponto principal do banco de dados centralizado, portanto, o escopo das traduções para um projeto é
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2
não é realmente uma opção desejada.
Eu preferiria algo como:
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2
ou uma chave estrangeira equivalente a apenas colocar os nomes na tabela.
ATUALIZAR
Com base no conselho para normalizar o banco de dados, criei algo assim até agora:
//this allows me to distinquish if translations where added by developer or by translator
UPDATE2: adicionado edmx em vez de texto. Se as pessoas estiverem interessadas, eu poderia fazer o github do projeto WCF, estou envolvendo esse conceito para que outras pessoas possam testá-lo e usá-lo.