在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);
}
答案 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
文件。