Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 mvc3中基于缓存的全球化_Asp.net Mvc 3_Caching_Globalization - Fatal编程技术网

Asp.net mvc 3 mvc3中基于缓存的全球化

Asp.net mvc 3 mvc3中基于缓存的全球化,asp.net-mvc-3,caching,globalization,Asp.net Mvc 3,Caching,Globalization,我有一个MVC3应用程序,所有文本都在SQL数据库中。文本中有每种语言的名称和值。我希望将文本存储在缓存对象中,并基于一些会话变量以某种方式将它们存储在视图和控制器中 我的第一个解决方案是在缓存中存储一个对象TextHandler。TextHandler拥有所有文本和方法,可以通过名称(作为字符串)和其他值来帮助提取文本。我还有一些控制器方法和助手,可以根据会话变量从TextHandler获取文本。我对这个解决方案不满意 我找到了一些这方面的指南,但我真正需要的是一些关于如何操作的指针,而不是实

我有一个MVC3应用程序,所有文本都在SQL数据库中。文本中有每种语言的名称和值。我希望将文本存储在缓存对象中,并基于一些会话变量以某种方式将它们存储在视图和控制器中

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


我找到了一些这方面的指南,但我真正需要的是一些关于如何操作的指针,而不是实际的代码。

我想您可以将它们存储在内存缓存中,可以是分布式的,也可以是本地的,这取决于您有多少种语言和字典值

您可以使用languagecode | name键,该值是该语言中的单词

例如,您可以将us | header_name作为键,将My header作为值

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


希望这能有所帮助。

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

如果您考虑资源文件,解决方案已经为您设置:

另一件事是基于浏览器请求设置区域性。使用此名称查询数据库。来自的区域性名称


现在,只需实现存储库模式,即可实现特定于缓存的功能。当您通过“语言”和“字符串”进行查询时,请检查缓存中是否存在该语言。如果是,则返回它,否则转到数据库检索它。这是使用存储库模式的一大优势,缓存细节将从调用方删除。如果您决定转到资源文件实现,那么这一切都不是必需的,因为有内置的区域性支持。

我最终得到了一个自定义资源提供程序,只做了一些小的修改

public static string GetCurrentCulture() { return Thread.CurrentThread.CurrentCulture.Name; }