我正在尝试本地化我的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,应用程序仍保留默认语言(英语)。
如果有人能对这件事情有所了解,我将非常感激。关于更好地实现相同效果的建议也将受到赞赏。
提前谢谢!
答案 0 :(得分:0)
问题很可能是您没有设置正确构建和部署的全局资源。看看http://odetocode.com/blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspx。
请注意,最好在自己的程序集中使用资源,以确保它们与MVC项目一起部署(并可由其访问)。