public ActionResult SetLanguage(string langtag, string returnUrl) { // If valid 'langtag' passed. i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(langtag); if (lt.IsValid()) { // Set persistent cookie in the client to remember the language choice. Response.Cookies.Add(new System.Web.HttpCookie("i18n.langtag") { Value = lt.ToString(), HttpOnly = true, Expires = DateTime.UtcNow.AddYears(1) }); } // Owise...delete any 'language' cookie in the client. else { var cookie = Response.Cookies["i18n.langtag"]; if (cookie != null) { cookie.Value = null; cookie.Expires = DateTime.UtcNow.AddMonths(-1); } } // Update PAL setting so that new language is reflected in any URL patched in the // response (Late URL Localization). HttpContext.SetPrincipalAppLanguageForRequest(lt); // Patch in the new langtag into any return URL. if (returnUrl.IsSet()) { returnUrl = LocalizedApplication.Current.UrlLocalizerForApp.SetLangTagInUrlPath(HttpContext, returnUrl, UriKind.RelativeOrAbsolute, lt == null ? null : lt.ToString()).ToString(); } //Redirect user agent as approp. return(this.Redirect(returnUrl)); }
protected void Application_BeginRequest(object source, EventArgs e) { i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance("en"); if (lt.IsValid()) { Response.Cookies.Add(new HttpCookie("i18n.langtag") { Value = lt.ToString(), HttpOnly = true, Expires = DateTime.UtcNow.AddYears(1) }); } else { var cookie = Response.Cookies["i18n.langtag"]; if (cookie != null) { cookie.Value = null; cookie.Expires = DateTime.UtcNow.AddMonths(-1); } } if (HttpContext.Current.Request.RawUrl.ToLower().Contains("content") || HttpContext.Current.Request.RawUrl.ToLower().Contains("style")) { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); } HttpContext.Current.SetPrincipalAppLanguageForRequest(lt); }
public ActionResult SetLanguage(string langtag, string returnUrl) { //if valid "langtag" passed i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(langtag); if (lt.IsValid()) { //Set persistent coockie in the client to remember the language choice. Response.Cookies.Add( new HttpCookie("i18n.langtag") { Value = lt.ToString(), HttpOnly = true, Expires = DateTime.UtcNow.AddYears(1) }); } //delete any language coockie in the client. else { var coockie = Response.Cookies["i18n.langtag"]; if (coockie != null) { coockie.Value = null; coockie.Expires = DateTime.UtcNow.AddMonths(-1); } } System.Web.HttpContext.Current.SetPrincipalAppLanguageForRequest(lt); //if(returnUrl.IsSet()) //{ // returnUrl = LocalizedApplication.Current.UrlLocalizerForApp.SetLangTagInUrlPath(HttpContext, returnUrl, UriKind.RelativeOrAbsolute, lt == null ? null : lt.ToString()).ToString(); //} return(Redirect(returnUrl)); }
private void Application_SetAppLangulage(object sender, EventArgs e) { var langCookie = HttpContext.Current.Request.Cookies["Mcd_AM.LangTag"]; if (langCookie != null) { var langtag = langCookie.Value; i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(langtag); if (lt.IsValid()) { // Set persistent cookie in the client to remember the language choice. HttpContext.Current.Response.Cookies.Add(new HttpCookie("Mcd_AM.LangTag") { Value = lt.ToString(), HttpOnly = true, Expires = DateTime.UtcNow.AddYears(1) }); } // Owise...delete any 'language' cookie in the client. else { var cookie = HttpContext.Current.Response.Cookies["Mcd_AM.LangTag"]; if (cookie != null) { cookie.Value = null; cookie.Expires = DateTime.UtcNow.AddMonths(-1); } } // Update PAL setting so that new language is reflected in any URL patched in the // response (Late URL Localization). HttpContext.Current.SetPrincipalAppLanguageForRequest(lt); } }
public ActionResult SetLanguage(string langtag, string returnUrl) { try { // If valid 'langtag' passed. i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(langtag); if (lt.IsValid()) { WebsiteLanguage = langtag; // Set persistent cookie in the client to remember the language choice. Response.Cookies.Add(new HttpCookie(CommonsConst.Const.i18nlangtag) { Value = lt.ToString(), HttpOnly = true, Expires = DateTime.UtcNow.AddYears(1) }); if (User.Identity.IsAuthenticated) { _userService.UpdateLanguageUser(langtag, User.Identity.Name); UserSession LoggedUser = UserSession; LoggedUser.LanguageTag = langtag; UserSession = LoggedUser; } } // Owise...delete any 'language' cookie in the client. else { var cookie = Response.Cookies[CommonsConst.Const.i18nlangtag]; if (cookie != null) { cookie.Value = null; cookie.Expires = DateTime.UtcNow.AddMonths(-1); } } // Update PAL setting so that new language is reflected in any URL patched in the // response (Late URL Localization). System.Web.HttpContext.Current.SetPrincipalAppLanguageForRequest(lt); // Patch in the new langtag into any return URL. if (!string.IsNullOrEmpty(returnUrl)) { returnUrl = LocalizedApplication.Current.UrlLocalizerForApp.SetLangTagInUrlPath(HttpContext, returnUrl, UriKind.RelativeOrAbsolute, lt == null ? null : lt.ToString()).ToString(); returnUrl = returnUrl.Replace(lt.ToString() + "?", lt.ToString() + "/Home?"); } // Redirect user agent as approp. } catch (Exception e) { Commons.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "Lanuguage = " + langtag + " and url = " + returnUrl); } if (returnUrl != "") { return(this.Redirect(returnUrl)); } else { return(null); } }
/// <summary> /// Implements the Early Url Localization logic. /// <see href="https://docs.google.com/drawings/d/1cH3_PRAFHDz7N41l8Uz7hOIRGpmgaIlJe0fYSIOSZ_Y/edit?usp=sharing"/> /// </summary> public void ProcessIncoming( System.Web.HttpContextBase context) { // Is URL explicitly excluded from localization? if (!m_urlLocalizer.FilterIncoming(context.Request.Url)) { return; } // YES. Continue handling request. bool allowRedirect = context.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase) || context.Request.HttpMethod.Equals("HEAD", StringComparison.OrdinalIgnoreCase); // NO. Is request URL localized? string urlNonlocalized; string langtag = m_urlLocalizer.ExtractLangTagFromUrl(context, context.Request.RawUrl, UriKind.Relative, true, out urlNonlocalized); if (langtag == null) { // NO. // langtag = best match between // 1. Inferred user languages (cookie and Accept-Language header) // 2. App Languages. LanguageTag lt = context.GetInferredLanguage(); // If redirection allowed...redirect user agent (browser) to localized URL. // The principle purpose of this redirection is to ensure the browser is showing the correct URL // in its address field. if (allowRedirect) { RedirectWithLanguage(context, context.Request.RawUrl, lt.ToString(), m_urlLocalizer); return; } // Otherwise, handle the request under the language infered above but without doing the redirect. // NB: this will mean that the user agent (browser) won't have the correct URL displayed; // however, this typically won't be an issue because we are talking about POST, PUT and DELETE methods // here which are typically not shown to the user. else { context.SetPrincipalAppLanguageForRequest(lt); return; // Continue handling request. } } // YES. Does langtag EXACTLY match an App Language? LanguageTag appLangTag = LanguageHelpers.GetMatchingAppLanguage(langtag); if (appLangTag.IsValid() && appLangTag.Equals(langtag)) { // YES. Establish langtag as the PAL for the request. context.SetPrincipalAppLanguageForRequest(appLangTag); // Rewrite URL for this request. context.RewritePath(urlNonlocalized); // Continue handling request. return; } // NO. Does langtag LOOSELY match an App Language? else if (appLangTag.IsValid() && !appLangTag.Equals(langtag)) { // YES. Localize URL with matching App Language. // Conditionally redirect user agent to localized URL. if (allowRedirect) { RedirectWithLanguage(context, urlNonlocalized, appLangTag.ToString(), m_urlLocalizer); return; } } // NO. Do nothing to URL; expect a 404 which corresponds to language not supported. // Continue handling request. }