public class HomeController : Controller
{
public void setGlobalLanguage()
{
string language = Request.QueryString["lan"];
HttpContext.Session["language_id"] = language;
}
}
增加过滤器,用于检测和切换多语言的设置,代码如下:
public class LocalizationAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string browserLanguage = filterContext.HttpContext.Request.Headers["Accept-Language"].Split(',')[0];
if (browserLanguage.ToLower().Contains("en"))
{
browserLanguage = "en";
}
else if (browserLanguage.ToLower().Contains("cn"))
{
browserLanguage = "zh-CN";
}
else
{
browserLanguage = "zh-CN";
}
string sessionLanguage = filterContext.HttpContext.Session["language_id"] != null ? filterContext.HttpContext.Session["language_id"].ToString() : string.Empty;
//如果浏览器语言与session中语言不一致,以session语言为基准,设置语言环境
if (browserLanguage != sessionLanguage)
{
string language = string.Empty;
//第一次访问,session中无语言全局变量时,用览器语言设置语言环境
if (filterContext.HttpContext.Session["language_id"] == null)
{
language = browserLanguage;
filterContext.HttpContext.Session["language_id"] = browserLanguage;
}
//session中有语言全局变量时,用session中语言全局变量设置语言环境
else
{
language = filterContext.HttpContext.Session["language_id"].ToString();
}
//当前线程的语言采用哪种语言(比如zh,en等)
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
//决定各种数据类型是何组织,如数字与日期
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
}
}
}