2012-07-16 53 views
0

我对现有的网站一个新的项目,它是目前国产化方案是这样的:本地化网页文本(给定标准)的最佳做法?

en_welcome.aspx 
fr_welcome.aspx 
de_welcome.aspx 
es_welcome.aspx 

每一类又包含显著的业务逻辑。我被告知这样做的原因是,唯一持久的内存是SQLServer,并且它已经将snot击败了,所以更多的DB调用来获得本地化的语言字符串是不受欢迎的。然而,我们的网络服务器有内存,我们的网站只有十几页,我无法想象所有的语言字符串都超过300kb,所以我们可以让IIS从DB中暂时加载它们到内存中。

什么是最好的方式来做到这一点,我将如何在代码中访问它?这是一个可怕的想法?你将如何触发Web服务器从DB重新加载字符串?

回答

1

这通常是管理using a resource file

resx文件可以是您的代码库的一部分,也可以以您认为合适的任何其他方式提供(请参阅评论中对Sisulizer的建议),而不是存储在数据库中。您将拥有一个“welcome.aspx”页面,该页面使用字符串键(通常来自常量类)以用户语言查找每条消息。

+0

是的。我们使用Sisulizer创建所有本地化的字符串。它比需要的复杂得多,但效果很好。 – 2012-07-16 23:23:48

+0

将在运行时或编译(生成)时间将文本替换为相应的.aspx文件吗? .resx文件是否会被加载到内存中,因此它不会一直点击磁盘来执行此操作? – 2012-07-17 06:41:33

+0

@PiersMacDonald:我会想象当合适的语言文件在第一次使用时会被加载到内存中,并且只要ResourceManager被引用,但是我不确定。也许你可以作为一个单独的问题。 – StriplingWarrior 2012-07-17 16:33:34

0

您可以通过缓存数据提供程序路由所有文本查找。例如ICachedTextDataProvider.GetString(字符串键,CultureInfo culture)或类似的东西。

在你的数据提供程序简单高速缓存可以然后用字典来创建:

static Dictionary<CultureInfo, Dictionary<string,string>> m_labelsByCulture; 

你会再通过查找文化作为重点得到正确的标签字典。

只要保留最后一次更新的时间,并且每当请求发生时,您都会检查它已经存在多久,是否需要重新加载标签。您可以在全球范围内为所有标签选择这个时间,或者如果您想让每种语言的表现更好,甚至单独标签 - 取决于您想要制作它的复杂程度以及您的性能问题。

这是一个非常基本的策略。虽然有更复杂的缓存方法。