【发布时间】:2016-03-31 11:19:44
【问题描述】:
我正在尝试本地化我的 ASP.NET MVC 应用程序。
我创建了一个名为 Internationalization 的操作过滤器:
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 的
<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" />
最后,我在 App_GlobalResources 文件夹中创建了必要的资源,并在我的页面中使用它们。
当我在本地构建应用程序时,这一切都很好 - 我使用调用 SetLanguage 操作的下拉菜单切换到新语言,并且应用程序的语言更改为所选语言。
但是一旦我部署到 Azure,同样的方法就不再适用了。即使设置了 cookie,应用程序仍会使用默认语言(英语)。
如果有人能对此事有所了解,我将不胜感激。也将不胜感激有关实现相同效果的更好方法的建议。
提前谢谢你!
【问题讨论】:
-
您是否尝试从 web.config 中删除“全球化”节点,并将其余代码放在(BaseController)上?
-
您使用多少种语言?是在语言之间切换以显示该作品,还是在切换时使用了错误的语言?什么不工作?可能有很多东西:)
-
我已经相应地更新了我的问题。感谢您的反馈。
标签: c# asp.net asp.net-mvc azure localization