我建立了一個擁有6種不同語言支持的網站。整個語言系統變得瘋狂。它可以用請求的語言打開,也可以打開一半,另一半打開另一個。Asp.net全球化瘋狂
這是我如何構建系統的描述。
在global.asax中,我已經完成了這個;
protected void Application_AcquireRequestState(object sender,EventArgs e)
{
//just to show my point
if(RouteData.Values["language"] =! null){
switch(RouteData.Values["language"].toString())
{
case "en-us":
// at this point i'm changing the value of static enum that i've already defined in another class ,
// just to reach it from other pages. You'll see what i mean in a second.
Statics.Language = LanguageEnum.EN;
break;
}
// Here is the culture changing codes. ConvertToCulture method is a custom method to get ISO code for language from LanguageEnum
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(ConvertToCulture(Statics.Language));
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(ConvertToCulture(Statics.Language));
}
這是global.asax文件。我對每個實體都有擴展方法(順便說一句,我使用實體框架)來獲取給定語言的字符串。
當然你可能想知道爲什麼我在實體上寫了擴展方法。在我的數據庫中,沒有任何字符串在同一個表中。我的意思是這樣;
for「Products」表我有[ID(int),Name(int)]列。
for「LanguageStrings」表我有[ID(INT),EN(字符串),FR(字符串)]列。
並且產品上的「名稱」列被引用到LanguageStrings表中的ID列。
這是一個擴展方法示例;
public static string GetName(this Product pr)
{
try
{
return pr.LanguageStrings.GetType().
GetProperty(Statics.Language.ToString()).
GetValue(pr.LanguageStrings, null).ToString();
}
catch (Exception ex)
{
return "null";
}
}
在我網站上的每一頁上,我都會看到這些擴展名的名稱,描述,技術信息。並且我也有方法從「.resx」文件中獲取字符串,即:
public static string ResGet(string key)
{
return Resources.Strings.ResourceManager.GetString(key);
}
至點;
例如,當要求默認頁面時,它有時全部用英文。有時候頁面的大廳是英文的,頁面的一半是法文的。有時它是全法文的。
整個頁面都可以用請求的語言打開,或者打開一半,另一半打開或者打開另一個。我的意思是它的2或1語言出現...
這真的是讓我瘋狂。它隨機發生。我無法弄清楚。
如果你們幫助我,那真的很棒!
謝謝你這麼多的評論。我已經能夠弄清楚了(我想)謝謝你... – paroxit