如何从recource文件中获取当前文化字符串值?

时间:2017-09-16 07:22:46

标签: c# jquery asp.net-mvc

在MVC中我首次设置如下:

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);
}

1 个答案:

答案 0 :(得分:0)

您正在发出ajax请求并尝试在回调中访问@TempData["Name"] Ajax请求在客户端(浏览器)中调用,而@TempData["Name"]razor并在服务器中呈现。

我会重新考虑这种方法,如果您不介意再次发布而不是在客户端重新渲染整个页面(这将刷新页面),您可以在请求中传递URL参数并在{{{ 1}} global.asax方法,它将捕获每个请求到服务器,在这种方法中,您可以根据URL设置文化。
例如: 如果网址的查询字符串为Application_BeginRequest(),则您将分别设置文化 示例代码?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.resx个文件,并且您获得了一个名为Titles.fr.resx的密钥,那么您将使用它:Submit
mvc引擎将根据文化获取Titles.Submit文件。