我正在开展一个网站应该提供多语言支持的项目。 现在,这个网站每天应该为大约500,000多名访客提供服务,所以它必须超级高效。
我创建了一个参数表{[ID],[Name]}和一个链接表{[objectID],[parameterID],[languageID],[value]}。我认为这是部署多语言支持的最佳方式,同时有权为每种语言翻译不同的参数。
据我所知,服务器的内存比物理硬盘快得多。因此,我打算为我的翻译架构存储ASP.NET Application State对象。 (http://msdn.microsoft.com/en-us/library/ms178594.aspx)
到目前为止,我的计划如何发声?有什么建议吗?
答案 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本地化功能