网站翻译架构和实施

时间:2011-03-18 08:28:04

标签: asp.net sql architecture translation

我正在开展一个网站应该提供多语言支持的项目。 现在,这个网站每天应该为大约500,000多名访客提供服务,所以它必须超级高效。

我创建了一个参数表{[ID],[Name]}和一个链接表{[objectID],[parameterID],[languageID],[value]}。我认为这是部署多语言支持的最佳方式,同时有权为每种语言翻译不同的参数。

据我所知,服务器的内存比物理硬盘快得多。因此,我打算为我的翻译架构存储ASP.NET Application State对象。 (http://msdn.microsoft.com/en-us/library/ms178594.aspx)

到目前为止,我的计划如何发声?有什么建议吗?

3 个答案:

答案 0 :(得分:1)

如果您打算制作支持多种语言的应用,那么您的即时反应应该让.net为您完成工作。我在你的问题中读到的是你正在设置一些东西来支持它。您应该知道,当您想要开发多语言环境时,本地化是您的选择。

看看这个msdn article,它应该为您提供有关该主题的一般概念。

答案 1 :(得分:1)

因此,本地化应用程序可以分为两部分:

  • 本地化业务逻辑实体。
  • 本地化其他所有内容。

在问题中,我看到与商业实体本地化相关的词语。为此,我同意将实体与其本地化分开的概念。

第1部分 - 本地化实体

我个人在数据库中这样做:

table Entity {EntityID, Name} -this is the entity-related table.
table EntityByLang {EntityID, LanguageID, Name} -this is the localized version of the table for each supported language.

这种方式允许我为每个可本地化的属性(如Name)及其本地化(如果在本地化表中可用)具有默认值。您需要实现的是 - 您需要实现数据访问层,该层对当前用户语言进行本地化Name或默认值(如果语言或翻译不适用于给定语言) )。

第2部分 - 本地化其他所有内容

在这里,除了性能方面没有其他选择之外,我建议使用某种静态资源。就个人而言,我使用的是可用于标准asp.net应用程序的静态资源。

从架构的角度来看,不要直接从你的UI代码中引用本地化代码,就像这样(我不喜欢):

var translation = HttpContext.Current.GetGlobalResourceObject("hello");
//excuse me, if I don't exactly remember the GetGlobalResourceObject() method name...

相反,我建议使用这种方法:

var translation = AppContext.GetLocalizationService().Translate("hello");

其中:AppContext - 某种立面/工厂(实际上是抽象立面/工厂的实施)。 GetLocalizationService - 最初返回某种ILocalizationService,在实现时返回StaticResLocalizationService(实现ILocalizationService)。这种方式允许从一种本地化切换到另一种本地化。特别是StaticResLocalizationService适用于asp.net静态资源

很抱歉杂乱的示例代码,但我希望您了解我的方法。

我希望这有帮助!

答案 2 :(得分:0)

我建议创建自定义资源提供程序,您可以在这里阅读更多内容:

http://msdn.microsoft.com/en-us/library/aa905797.aspx

使用此模型,您可以利用现有的asp .net本地化功能