Example #1
0
        public async Task Invoke(HttpContext httpContext)
        {
            //if ajax we dont care about potential language redirect
            if (httpContext.Request.IsAjax())
            {
                await _next(httpContext);
            }

            //get the culture from the cookie
            //get the culture from the provider (Using logic)
            //if they are the same or not just continue
            //if there is no culture in the url, redirect

            SiteLanguageCookie currentCookieCulture = GetCurrentCultureFromCookie(httpContext);
            string             determinedCulture    = GetDeterminedCulture(httpContext);
            string             urlCutlture          = GetCurrentCultureFromUrl(httpContext);

            if ((currentCookieCulture == null || currentCookieCulture.Culture == determinedCulture) && urlCutlture == string.Empty)
            {
                httpContext.Response.Redirect($"/{determinedCulture}{httpContext.Request.Path}");
            }
            else
            {
                if (urlCutlture != string.Empty && determinedCulture != urlCutlture)
                {
                    httpContext.Response.Redirect(httpContext.Request.Path.ToString().Replace($"/{urlCutlture}", $"/{determinedCulture}"));
                }
            }


            await _next(httpContext);
        }
Example #2
0
        private SiteLanguageCookie GetCurrentCultureFromCookie(HttpContext httpContext)
        {
            SiteLanguageCookie cookie = CookieHelper.GetCultureFromCookieFromRequest(httpContext);

            if (cookie != null)
            {
                return(cookie);
            }

            return(null);
        }
        public override Task <ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
        {
            string cultureCode = GetCultureFromUrl(httpContext);

            if (cultureCode != string.Empty)
            {
                if (IsCultureCodeSupported(cultureCode))
                {
                    return(Task.FromResult(new ProviderCultureResult(cultureCode)));
                }
            }
            else
            {
                SiteLanguageCookie cookie = GetCultureFromCookie(httpContext);
                if (cookie != null)
                {
                    switch (cookie.State)
                    {
                    case LanguageState.Profile:
                        cultureCode = cookie.Culture;
                        return(Task.FromResult(new ProviderCultureResult(cultureCode)));

                    case LanguageState.Browser:
                    case LanguageState.NotSet:
                        if (IsAuthenticatedRequest(httpContext))
                        {
                            cultureCode = "";    //get profile code here
                            if (IsCultureCodeSupported(cultureCode))
                            {
                                SetSiteLanguageCookie(httpContext, cultureCode, LanguageState.Profile);
                                return(Task.FromResult(new ProviderCultureResult(cultureCode)));
                            }

                            return(Task.FromResult(new ProviderCultureResult(GetDefaultCultureCode())));
                        }

                        return(Task.FromResult(new ProviderCultureResult(cultureCode)));
                    }
                }

                cultureCode = GetCultureFromBrowserLanguage(httpContext);
                if (IsCultureCodeSupported(cultureCode))
                {
                    SetSiteLanguageCookie(httpContext, cultureCode, LanguageState.Browser);
                    return(Task.FromResult(new ProviderCultureResult(cultureCode)));
                }
            }

            SetSiteLanguageCookie(httpContext, cultureCode, LanguageState.NotSet);
            return(Task.FromResult(new ProviderCultureResult(GetDefaultCultureCode())));
        }