在Azure中本地化ASP.NET MVC应用程序无法正常工作

时间:2016-03-31 11:19:45

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

我正在尝试本地化我的ASP.NET MVC应用程序。

我创建了一个名为国际化的操作过滤器:

public class InternationalizationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var cookie = filterContext.HttpContext.Request.Cookies.Get("lang");
        string language = cookie == null ? "en" : cookie.Value;

        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format(language));
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format(language));
    }
}

我有一个使用此过滤器的 BaseController 类:

[Internationalization]
public abstract class BaseController : Controller
{
    ...
}

我在 HomeController 中的 ActionResult 中设置 lang Cookie:

public ActionResult SetLanguage(string lang)
{
    HttpCookie cookie = new HttpCookie("lang", lang);
    cookie.Expires = DateTime.Now.AddDays(30);
    this.HttpContext.Response.Cookies.Add(cookie);
    return this.Redirect(this.Request.UrlReferrer.LocalPath);
}

我还将以下内容添加到 Web.config < system.web> 中:

<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" />

最后,我在 App_GlobalResources 文件夹中创建了必要的资源,并在我的网页中使用它们。

当我在本地构建应用程序时,这一切都很有效 - 我使用调用 SetLanguage 操作的下拉菜单切换到新语言,并且应用程序的语言更改为所选语言。

但是一旦我部署到Azure,相同的方法就不再适用了。即使已设置cookie,应用程序仍保留默认语言(英语)。

如果有人能对这件事情有所了解,我将非常感激。关于更好地实现相同效果的建议也将受到赞赏。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

问题很可能是您没有设置正确构建和部署的全局资源。看看http://odetocode.com/blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspx

请注意,最好在自己的程序集中使用资源,以确保它们与MVC项目一起部署(并可由其访问)。