2017-09-16 50 views
-1

在MVC我設置了第一次象下面這樣:如何從recource文件中獲取當前的文化字符串值?

public ActionResult Create() 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us"); 
    rm = new ResourceManager("Resources.Strings", System.Reflection.Assembly.Load("App_GlobalResources")); 
    ci = Thread.CurrentThread.CurrentCulture; 
    LoadString(ci); 
    return View(); 
} 

點擊「法國」按鈕,我想從英語更改語言爲法語,所以我的jQuery像下面去:

$("#btnFrench").click(function() { 
    alert(); 
    $.ajax({ 
     type: "POST", 
     url: "@Url.Action("ToFrench", "Home")", 
     traditional: true,//data: {}, 
     success: successFunc, 
     error: errorFunc 
    }); 
    function successFunc(status) {//data, 
     var name = '@TempData["Name"]'; 
     alert(name); 
    } 
    function errorFunc() { 
     alert("Operation Failed!"); 
    } 
}); 

[HttpPost] 
public ActionResult ToFrench() 
{ 
    rm = new ResourceManager("Resources.Strings", System.Reflection.Assembly.Load("App_GlobalResources")); 
    ci = Thread.CurrentThread.CurrentCulture; 
    LoadString(ci); 

    Thread.CurrentThread.CurrentCulture = new CultureInfo("fr"); 

    LoadString(Thread.CurrentThread.CurrentCulture); 
    return RedirectToAction("Create"); 
} 

因此,在下面的代碼,我不能獲取來自法國的資源文件上的法國價值觀。

private void LoadString(CultureInfo ci) 
{ 

    string naam = rm.GetString("Name", ci); 
    TempData["Name"] = naam; 
    ViewBag.Gender = rm.GetString("Gender", ci); 
    ViewBag.DateOfBirth = rm.GetString("DateOfBirth", ci); 
    ViewBag.About = rm.GetString("About", ci); 
} 
+0

究竟是什麼問題?您似乎正在加載資源確定。請準確描述發生了什麼事情,以及與你想要的有什麼不同。 – Richard

+0

在上一步代碼我描述了我的問題,我想將'Name'轉換爲法語'prénom',我在'fr.resx'資源文件中設置它。 –

+0

請注意我要求你描述*當前的行爲及其不同之處*:你是否得到一個錯誤,沒有什麼,一些意想不到的價值? – Richard

回答

0

您製作的是ajax請求,並試圖訪問@TempData["Name"]回調。
在客戶端(瀏覽器)調用Ajax請求,而@TempData["Name"]razor並在服務器中呈現。

我會重新考慮這種方法,如果您不介意重新發布而不是重新呈現客戶端中的整個頁面(這將刷新頁面),您可以在請求中傳遞URL參數並將其抓在global.asax裏面的Application_BeginRequest()方法,它會捕獲每個請求到服務器,在這個方法中你可以根據URL設置文化。
例如: 如果url的查詢字符串爲?lang=fra那麼您將分別設置文化。
global.asax示例代碼:

protected void Application_BeginRequest() 
{ 
    var cs = CultureInfo.GetCultures(CultureTypes.NeutralCultures); 
    // set culture based on query-string lang parameter 
    var calture = CultureInfo.GetCultures(CultureTypes.NeutralCultures).SingleOrDefault(c => c.ThreeLetterISOLanguageName.Equals(Request["Lang"], StringComparison.OrdinalIgnoreCase)); 
    if (calture != null) 
    { 
     Thread.CurrentThread.CurrentCulture = calture; 
     Thread.CurrentThread.CurrentUICulture = calture; 
    } 
} 

裏面你的觀點,你剛纔提到的資源文件。
假設您獲得了Titles.resxTitles.fr.resx文件,並且您得到了一個名稱爲Submit的密鑰,那麼您將像這樣使用它:Titles.Submit
根據文化,mvc引擎將挑選resx文件。

相關問題