2012-07-16 56 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; 

你會再通過查找文化作爲重點得到正確的標籤字典。

只要保留最後一次更新的時間,並且每當請求發生時,您都會檢查它已經存在多久,是否需要重新加載標籤。您可以在全球範圍內爲所有標籤選擇這個時間,或者如果您想讓每種語言的表現更好,甚至單獨標籤 - 取決於您想要製作它的複雜程度以及您的性能問題。

這是一個非常基本的策略。雖然有更復雜的緩存方法。