MVC 3 Controller Action返回JSON中的本地化字符串

时间:2012-09-27 12:19:27

标签: c# asp.net-mvc asp.net-mvc-3 localization

我目前正在开发我们的产品,这是一个基于MVC 3的项目。该产品最近计划在加拿大推出,其中有法律要求所有网站提供该版本的英文和法文版本。

基本架构包括: - 一个loclaization类库 - MVC3应用程序 - DAL - 所有控制器都从一个基本的可本地化控制器类继承,该控制器类将当前线程的CurrentCulture和CurrentUICulture设置为正确的语言。这很有效(借用Scott Hansel的代码)。 - 它还有一个基本的REST API,可以通过UI从jQuery调用。

我让所有的视图都按预期工作但我在让动作返回正确的消息语言方面遇到了问题。 API控制器操作不返回ActionResults,而是返回JSON字符串。我不相信这是我痛苦的罪魁祸首。

我目前正试图利用ResourceManager对象而没有运气。这是我尝试过的最新代码。

请注意,CultureName是BaseLocalizableController对象提供的属性。

var rm = new ResourceManager("ProductXYZ.Localization.App_GlobalResources.Messages", Assembly.Load("ProductXYZ.Localization"));
viewModel.Message = rm.GetString("SuccessfullySaveChanges", CultureInfo.CreateSpecificCulture(user.Language ?? CultureName));

GetString函数总是返回英语,它应该返回法语时的事件。我知道我在这里缺少一些基本的东西,但是却找不到它,我现在正面临一个艰难的最后期限。

非常感谢任何协助。

由于

其他信息 * ** * *

我在Visual Studio 2012中工作

1 个答案:

答案 0 :(得分:0)

如果您的应用程序中的架构正确,那么使用Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture应该设置为法语(如果您在法国网站上)。

如果不是这种情况,您应该在Global.asax中处理此问题,这可以通过以下方式完成:

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
    CultureInfo ci = CultureInfo.CreateSpecificCulture(HttpContext.Current.User.Language ?? CultureName);
    Thread t = System.Threading.Thread.CurrentThread;
    t.CurrentCulture = ci;
    t.CurrentUICulture = ci;
}

这样做之后,使用全球化的每个功能都将根据适当的文化运作。 (这也包括例如:(5.52M).ToString(),然后取决于5.525,52中的文化结果。

重要的一步是更改一行:

viewModel.Message = rm.GetString("SuccessfullySaveChanges", CultureInfo.CreateSpecificCulture(user.Language ?? CultureName));

要:

viewModel.Message = rm.GetString("SuccessfullySaveChanges");