0

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

基本架构包括: - 本地化类库 - MVC3 应用程序 - A 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 中工作

4

1 回答 1

0

如果你的架构在你的应用程序中是正确的,那么使用Thread.CurrentThread.CurrentCultureandThread.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.52或中的文化结果5,52

一个重要的步骤是更改线路:

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

至:

viewModel.Message = rm.GetString("SuccessfullySaveChanges");
于 2012-09-27T12:49:31.780 回答