【问题标题】:Cache based globalization in MVC 3MVC 3 中基于缓存的全球化
【发布时间】:2011-10-26 09:12:21
【问题描述】:

我有一个 MVC 3 应用程序,其中包含 SQL 数据库中的所有文本。文本具有每种语言的名称和值。我想将文本存储在缓存对象中,并根据一些会话变量以某种方式在我的视图和控制器中获取它们。

我的第一个解决方案是在缓存中存储一​​个对象 TextHandler。 TextHandler 具有所有文本和方法,可帮助按名称(作为字符串)和其他一些值提取文本。我还有一些控制器方法和助手可以根据会话变量从 TextHandler 获取文本。我对这个解决方案不满意。

我为此找到了一些指南,但我真正需要的是一些关于如何做到这一点的指针,而不是实际的代码。

【问题讨论】:

    标签: asp.net-mvc-3 caching globalization


    【解决方案1】:

    我想您可以将它们存储在内存缓存中(分布式或本地,具体取决于您拥有的语言和字典值的数量)。

    您可以使用语言代码|名称键,值是该语言中的单词。

    例如,您可以将 us|header_name 作为键,将“My Header”作为值。

    正如我上面提到的,这些值可以存储在哪里取决于您的要求。如果您认为它们不属于本地内存,您总是可以设置一个 memcache 结构或一个 LRU 缓存,其中包含经常使用的前 N ​​个最流行的值,如果有缓存未命中,它会进入数据库(包含所有语言的字典)找到给定的值,然后是名称和语言。

    希望这能有所帮助。

    【讨论】:

      【解决方案2】:

      一种常见的方法是在 url 上提供代码并用作控制器中的参数。然后,除了您在数据库中查询的任何字符串之外,还会使用此语言代码。

      如果您考虑使用资源文件,则已经为您设置了解决方案: http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

      另一件事是基于浏览器请求设置的文化。使用此名称查询数据库。文化名称(来自How to pass CultureInfo to partialView for ajax call?

      公共静态字符串 GetCurrentCulture() { 返回 Thread.CurrentThread.CurrentCulture.Name; }

      现在要具体到缓存,只需实现存储库模式。当您通过“语言”和“字符串”查询时,请检查缓存中是否存在。如果是,则返回它,否则去数据库检索它。这是使用存储库模式的一大优势,缓存详细信息从调用者中删除。如果您决定使用资源文件实现,那么无论如何都不需要这些,因为有内置的文化支持。

      【讨论】:

        【解决方案3】:

        我最终得到了一个像 http://weblogs.asp.net/thangchung/archive/2010/06/25/extending-resource-provider-for-soring-resources-in-the-database.aspx 这样的自定义资源提供程序,稍作修改。

        【讨论】:

          猜你喜欢
          • 2011-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-20
          • 1970-01-01
          相关资源
          最近更新 更多