2011-10-26 75 views
0

我有一個MVC 3應用程序,包含SQL數據庫中的所有文本。文本具有每種語言的名稱和值。我想將文本存儲在緩存對象中,並以某種方式在基於某些會話變量的視圖和我的控制器中獲取它們。基於緩存的MVC全球化3

我的第一個解決方案是將對象TextHandler存儲在緩存中。 TextHandler擁有所有文本和方法來幫助通過名稱(作爲字符串)和其他一些值來提取文本。我也有一些控制器方法和幫助器可以根據會話變量從TextHandler中獲取文本。我不滿意這個解決方案。

我已經找到了一些這方面的指南,但我真正需要的是如何做到這一點,而不是實際的代碼。

回答

0

我想你可以將它們存儲在內存中的緩存(分佈式或本地取決於你有多少種語言和字典值)。

您可以使用languagecode | name鍵,值是該語言中的單詞。

因此,您可以將我們| header_name作爲關鍵字,並將「My Header」作爲示例。

正如我上面提到的,這些值可以存儲取決於您的要求。如果你認爲它們不屬於本地內存,你總是可以設置一個memcache結構或一個LRU緩存,該緩存包含最常用的N個最常用的值,如果有緩存未命中,它會轉到數據庫(包含所有語言的詞典)來查找給定的名稱和語言。

希望這有助於某種方式。

0

一種常見的方式是提供url上的代碼並用作控制器中的參數。除了您在數據庫中查詢的任何字符串之外,還會使用此語言代碼。

如果你會考慮資源文件,該解決方案已經爲您設置: http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

的另一件事是基於什麼瀏覽器請求設置的文化。使用這個名字來查詢數據庫。 (從How to pass CultureInfo to partialView for ajax call?

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

現在的文化名去緩存具體,簡單地實現存儲庫模式。當通過'language'和'string'查詢時,檢查是否存在於緩存中。如果是,返回它,否則去數據庫檢索它。這是使用Repository Pattern的一大優勢,緩存細節將從調用者中刪除。如果您決定轉到資源文件實施,那麼無論如何這都不是必需的,因爲這裏建立了文化支持。