首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为多个(内部)项目构建字符串翻译数据库

为多个(内部)项目构建字符串翻译数据库
EN

Software Engineering用户
提问于 2013-02-28 16:26:52
回答 3查看 7.3K关注 0票数 10

在我们公司,我们有一个现有的翻译ms-sql表,存储字符串如下:

代码语言:javascript
复制
Id |     Key     | Language | Value 
 1 | hello-world |  nl-BE   | Hallo Wereld
 2 | hello-world |  en-GB   | Hello World

该系统中有3种语言,我预计在未来将增加到最多10种。

此表由多个非常不同的项目(大约60个项目,主要是网站/ web应用程序和一些web服务)读取,每个项目都打开到翻译数据库的数据库连接,缓存翻译。

前端开发者的反馈是我们的UIto输入或修改翻译的S最大的缺点是他们不知道什么项目使用什么字符串。

他们有时修改字符串,不知道他们正在用它破坏7个项目。

现在,他们只需键入类似this.Translate("Hello World")的内容,系统就会处理剩下的部分。

当然,我可以强迫他们做一些类似this.Translate("Hello World","AwesomeApplication1")的事情,但这似乎需要对许多项目进行大量的重构。

您将如何提供此解决方案?作为开发人员,您将如何为翻译提供“项目名称”?如何将其存储在数据库中?

重要注意事项:翻译重用是集中化数据库的全部要点,因此可以通过以下方式对一个项目进行范围转换

代码语言:javascript
复制
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2

并不是真正想要的选择。

我更喜欢这样的:

代码语言:javascript
复制
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2

或者一个外键就相当于把名字放进表里。

更新

基于规范数据库的建议,我到目前为止提出了这样的建议:

代码语言:javascript
复制
//this allows me to distinquish if translations where added by developer or by translator

UPDATE2:添加edmx而不是文本。如果人们感兴趣,我可以github的WCF项目,我正在包装这个概念,以便其他人可以测试和使用它。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2013-02-28 16:58:40

初步注1:您现在没有告诉我们翻译是如何维护的

初步说明2:您的数据库没有标准化。不管你要采取什么解决方案,首先,使数据库规范化。如果你现在不这么做的话,你以后会遇到严重的维护问题。

这就是我会做的。

  1. 重写您的转换调用,以便它将一个程序ID带回服务器
  2. 如果数据库表中还不存在字符串,后端转换器将将其放入数据库表中,并将其标记为程序id。
  3. 如果字符串已经存在,则只有当程序id与创建字符串的原始程序id匹配时,才会更新该字符串。如果没有,则返回冲突通知。

变体:

  • 您可以使用“developer ID/ translator ID”而不是程序ID。我认为这更好,因为有些人懂外语,有些人认为他们知道。只有第一组有修改权。
  • 您可能想要存储在DB中使用字符串的所有程序的in,以便知道哪些程序冲突。
  • 你可以把这种“所有权”的想法扩展到每一种语言:一个人会英语,另一个人会荷兰语。
  • 一旦数据库标准化,就会增加构建复杂性,比如“程序A在语言1,2,3;B在3和5中”

我还建议您编写一个单独的“翻译维护”程序,该程序将显示缺少翻译等。我曾经这样做过,获得了2级授权:每个翻译都必须由另一个人(通常是母语为母语的人)进行审核。

票数 5
EN

Software Engineering用户

发布于 2013-02-28 16:46:15

因为他们指的是“这个”..。您可以将项目名称一次分配给“this”(例如,通过构造函数),并且转换函数的接口不会因编码器而改变。在幕后,它只是将项目名称添加到数据库查询中。或者,您可以提供“此”方法来了解项目名称。这将取决于您如何构建类。

对于存储,您可以这样做:

代码语言:javascript
复制
1 ! hello-world ! nl-EN ! Hello World  ! *
2 ! hello-world ! nl-EN ! Howdy, World ! CowboyApp
3 ! hello-world ! nl-EN ! Arrgh        ! PirateApp

使用通配符对所有应用程序应用通用翻译,但当您想要覆盖特定应用程序的翻译时,则使用特定的应用程序名称。这将使重复减少到最低限度。

要查看程序使用的是哪个翻译,您现在知道了--如果您不想查看并手动获取这些信息,您可以记录翻译请求。

票数 5
EN

Software Engineering用户

发布于 2013-02-28 17:54:08

如果您的所有项目都是用C#编写的,并且所有翻译器调用都是这样的

代码语言:javascript
复制
this.Translate("hello-world")

如果"hello-world“是翻译表中的关键,那么使用正则表达式来查找所有的翻译器调用并分配相应的项目名称,编写一个小的源代码扫描器应该不会太困难。这样,您就不必更改任何现有的代码或翻译接口。

根据程序的实际结构,也可以更容易地从程序集的IL代码中提取该信息。不久前,我做了非常类似的事情,也是为了翻译目的,使用此示例代码解析程序集。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/188771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档