在我们公司,我们有一个现有的转换ms-sql表,该表存储这样的字符串:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
系统中有3种语言,我希望将来会增长到大约10种
该表由多个非常不同的项目(大约60个项目,主要是网站/ Web应用程序和某些Web服务)读取,每个项目均打开与翻译数据库的数据库连接,并缓存翻译内容
前端开发人员的反馈是,我们的UIto输入或修改翻译的最大弊端是他们不知道哪个项目使用什么字符串。
他们有时会修改字符串,却不知道它们会破坏7个项目。
现在,他们只需要键入类似内容this.Translate("Hello World")
,系统就会处理其余的工作。
我当然可以强迫他们采用类似的方法,this.Translate("Hello World","AwesomeApplication1")
但是似乎在许多项目中都需要进行大量的重构。
您将如何提供此解决方案?作为开发人员,您将如何为翻译提供“项目名称”?您如何将其存储在数据库中?
重要说明:翻译的重用是集中式数据库的全部内容,因此,将翻译范围限定为一个项目
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2
并不是真正的通缉选项。
我更喜欢这样的东西:
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2
或等同于仅将名称放在表中的外键。
更新
到目前为止,基于规范化数据库的建议,我提出了类似以下内容:
//this allows me to distinquish if translations where added by developer or by translator
UPDATE2:添加了edmx而不是文本。如果人们有兴趣,我可以在WCF项目上github,我将这个概念包装起来,以便其他人可以测试和使用它。