0

我在一个现有网站的新项目中,它当前的本地化方案是这样的:

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

每一个都包含重要的业务逻辑。有人告诉我这样做的原因是,唯一的持久内存是 SQLServer,它已经被它打败了,所以不欢迎更多的数据库调用来获取本地化的语言字符串。然而,我们的 Web 服务器有大量 RAM,而我们的网站只有十几页左右,我无法想象所有语言字符串都超过 300kb,所以我们可以让 IIS 偶尔从数据库中将它们加载到内存中。

执行此操作的最佳方法是什么,我将如何在代码中访问它?这是一个可怕的想法吗?您将如何触发 Web 服务器从 DB 重新加载字符串?

4

2 回答 2

1

这通常使用资源文件进行管理。

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

于 2012-07-16T23:21:41.903 回答
0

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

然后可以使用字典创建数据提供者中的简单缓存:

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

然后,您可以通过查找文化作为键来获得正确的标签字典。

就到期而言,您可以简单地保留最后更新的时间,并且无论何时提出请求,您都可以检查它已经持续了多长时间以及是否需要重新加载标签。您可以在全局范围内为所有标签设置此时间,或者如果您想让每种语言的性能更好,甚至单独标签 - 取决于您想要制作它的复杂程度以及您的性能问题。

这是一个非常基本的策略。不过,还有更复杂的缓存方法。

于 2012-07-17T00:35:59.520 回答