简体   繁体   English

在哪里进行一般语言调整?

[英]Where to put general language adjustment?

Well, the title says it all. 好吧,标题说明了一切。

I do the following now in my LanguageFilterAttribute class: 我现在在LanguageFilterAttribute类中执行以下操作:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request         = filterContext.HttpContext.Request;
        string currentUrl   = request.RawUrl;
        var urlHelper       = new UrlHelper(request.RequestContext);

        string baseurl                      = urlHelper.Content("~");
        string currentLanguageFromUrl       = currentUrl.Split('/')[1];
        string currentLanguageFromCulture   = CultureHelper.CheckCulture();
        var currentLanguageFromCookie       = request.Cookies["_culture"];

        var possibleCultures                = UnitOfWork.CulturesRepository.GetListOfCultureNames();

        if (possibleCultures.All(culture => currentLanguageFromUrl != culture))
        {
            string cultureName;
            string newUrl;

            if (currentLanguageFromCookie != null)
            {
                cultureName = currentLanguageFromCookie.Value;
                CultureHelper.SetCulture(cultureName);
                newUrl = baseurl + cultureName;
                filterContext.Result = new RedirectResult(newUrl);
                return;
            }

            if (currentLanguageFromCulture != null)
            {
                cultureName = currentLanguageFromCulture;
                CultureHelper.SetCulture(cultureName);
                newUrl = baseurl + cultureName;
                filterContext.Result = new RedirectResult(newUrl);
                return;
            }

            cultureName = possibleCultures[0];
            CultureHelper.SetCulture(cultureName);
            newUrl = baseurl + cultureName;
            filterContext.Result = new RedirectResult(newUrl);
            return;
        }

        CultureHelper.SetCulture(currentLanguageFromUrl);

        base.OnActionExecuting(filterContext);
    };

Which sets the language when you select a new one from the dopdown on the shared Layout page (this works btw, selecting a different language triggers respectively, the above and below class correctly). 当您从共享的“布局”页面的dopdown中选择一种新语言时,它将设置语言(顺便说一句,分别选择上面和下面的类分别触发不同的语言)。

    public static void SetCulture(string culture)
    {
        var cultureCookie = HttpContext.Current.Request.Cookies["_culture"] ?? new HttpCookie("_culture");
        cultureCookie.Value = culture;
        var request = HttpContext.Current.Request;

        cultureCookie.Domain = request.Url.Host;

        cultureCookie.Expires = DateTime.Now.AddYears(1);
        cultureCookie.Path = "/";
        HttpContext.Current.Response.Cookies.Add(cultureCookie);

        CultureInfo info = CultureInfo.CreateSpecificCulture(culture.ToString());

        Thread.CurrentThread.CurrentCulture = info;
        Thread.CurrentThread.CurrentUICulture = info;

    }

The problem with this is, as you can guess, I will have to apply the [LanguageFilter] attribute on all my controllers. 正如您所猜测的那样,问题是我必须在所有控制器上应用[LanguageFilter]属性。 Isn't there a file where I can place this that will change my language every time I go to another page? 是否没有文件可以放置此文件,每次我转到另一页时都会更改语言?

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

When a new application thread is started, its current culture and current UI culture are defined by the current system culture, and not by the current thread culture. 启动新的应用程序线程时,其当前区域性和当前UI文化由当前系统区域性定义,而不是由当前线程区域性定义。

Isn't this your case? 这不是你的情况吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM