2012-03-09 65 views
0

我有一個情況,我必須獲取由admin定義的語言。我知道怎麼做的語言支持的網站,如http://www.codeproject.com/Articles/163215/Dynamic-definition-of-the-list-of-available-langua動態定義語言asp.net

Thread.CurrentThread.CurrentCulture = 
        CultureInfo.CreateSpecificCulture(language); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 
     } 

,但消費者想要定義語言,所以他不需要我去更改源代碼每次他想添加一個新的語言。我一直在尋找,但一無所獲。任何人都可以給我任何想法如何做到這一點?

回答

1

您可以構建自己的ResourceExpressionBuilder,它將關鍵字/值/語言信息存儲在數據庫表中。然後,您可以在管理中提供界面以添加語言並根據此數據庫表更新值。表達式構建器將允許您使用與內置資源文件相同的本地化語法。但這不是一個快速而簡單的解決方案。這需要時間來實現。

或者,您可以教客戶創建資源文件並將其部署到服務器上。這不應該需要編譯。

以下是有關如何覆蓋資源管理器的示例。您也可以創建自己的表達http://msdn.microsoft.com/en-us/library/aa905797.aspx http://msdn.microsoft.com/en-us/library/system.web.compilation.resourceexpressionbuilder.aspx

+0

它肯定需要時間。我正在考慮實施支持的解決方案數據庫。但接下來的問題是app_LocalResources文件。我需要讓他們動態。當然我會提到resx文件。他們是基於xml的。也許我可以創建一個新的xml文件並將其存儲到app_LocalResources文件中。您認爲這樣可行嗎? – Ktt 2012-03-09 09:36:24

+0

如果您使用數據庫,則不會使用資源文件。理論上你可以,但爲什麼你會有,如果你有一個數據庫?我不確定如果您動態創建資源文件會發生什麼,但我不會推薦它。儘管這可能是可能的。 – Stilgar 2012-03-09 09:55:38

+0

如何才能將語言應用於標籤,按鈕等?我不應該這樣做,如果(lang =「en-US」)label1.text =「English」else等。你能否提供任何線索? – Ktt 2012-03-09 10:00:32

1

你可以存儲在數據庫表中的語言和呼叫它從那裏,並將這個值應用到你的變量language

cmd SqlCommand = new SqlCommand("SELECT TOP 1 Language FROM [WebsiteLanguage]",conn); 
objLanguage Object = cmd.ExecuteScalar(); 
if (!(objLanguage==null)){ 
    language = objLanguage; 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 
} 

然後管理員可以UPDATE語言通過您的管理區域中的窗體。

+0

聽起來不錯,但我將如何能夠應用到頁面組件的app_LocalResources文件?例如:「meta.resourcekey」,因爲不會添加app_LocalResources文件「resx」。 – Ktt 2012-03-09 09:32:46