Merge pull request #6062 from sbwalker/dev
fix culture cookie so that it supports culture and ui culture
This commit is contained in:
@@ -188,45 +188,20 @@
|
|||||||
await GetJwtToken(alias);
|
await GetJwtToken(alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
// includes resources
|
// include resources
|
||||||
var resources = await GetPageResources(alias, site, page, modules, int.Parse(route.ModuleId, CultureInfo.InvariantCulture), route.Action);
|
var resources = await GetPageResources(alias, site, page, modules, int.Parse(route.ModuleId, CultureInfo.InvariantCulture), route.Action);
|
||||||
ManageStyleSheets(resources);
|
ManageStyleSheets(resources);
|
||||||
ManageScripts(resources, alias);
|
ManageScripts(resources, alias);
|
||||||
AddBodyContent(site.BodyContent);
|
AddBodyContent(site.BodyContent);
|
||||||
AddBodyContent(page.BodyContent);
|
AddBodyContent(page.BodyContent);
|
||||||
|
ManageLocalization(site);
|
||||||
|
|
||||||
// generate scripts
|
// PWA script
|
||||||
if (site.PwaIsEnabled && site.PwaAppIconFileId != null && site.PwaSplashIconFileId != null)
|
if (site.PwaIsEnabled && site.PwaAppIconFileId != null && site.PwaSplashIconFileId != null)
|
||||||
{
|
{
|
||||||
_scripts += CreatePWAScript(alias, site, route);
|
_scripts += CreatePWAScript(alias, site, route);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set culture if not specified
|
|
||||||
string cultureCookie = Context.Request.Cookies[Shared.CookieRequestCultureProvider.DefaultCookieName];
|
|
||||||
if (cultureCookie == null)
|
|
||||||
{
|
|
||||||
// get default language for site
|
|
||||||
if (site.Languages.Any())
|
|
||||||
{
|
|
||||||
// use default language if specified otherwise use first language in collection
|
|
||||||
cultureCookie = (site.Languages.Where(l => l.IsDefault).SingleOrDefault() ?? site.Languages.First()).Code;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// fallback language
|
|
||||||
cultureCookie = LocalizationManager.GetDefaultCulture();
|
|
||||||
}
|
|
||||||
// convert language code to culture cookie format (ie. "c=en|uic=en")
|
|
||||||
cultureCookie = Shared.CookieRequestCultureProvider.MakeCookieValue(new Models.RequestCulture(cultureCookie));
|
|
||||||
SetLocalizationCookie(cultureCookie);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set language for page
|
|
||||||
if (!string.IsNullOrEmpty(cultureCookie))
|
|
||||||
{
|
|
||||||
_language = Shared.CookieRequestCultureProvider.ParseCookieValue(cultureCookie).Culture.Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create initial PageState
|
// create initial PageState
|
||||||
_pageState = new PageState
|
_pageState = new PageState
|
||||||
{
|
{
|
||||||
@@ -829,4 +804,52 @@
|
|||||||
_bodyContent += "\n";
|
_bodyContent += "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ManageLocalization(Site site)
|
||||||
|
{
|
||||||
|
// get user culture (ui localization)
|
||||||
|
var uiCulture = site?.User?.CultureCode;
|
||||||
|
if (string.IsNullOrEmpty(uiCulture))
|
||||||
|
{
|
||||||
|
// get default language for site
|
||||||
|
if (site.Languages.Any())
|
||||||
|
{
|
||||||
|
// use default language if specified otherwise use first language in collection
|
||||||
|
uiCulture = (site.Languages.Where(l => l.IsDefault).SingleOrDefault() ?? site.Languages.First()).Code;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// fallback language
|
||||||
|
uiCulture = LocalizationManager.GetDefaultCulture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// get site culture (content localization)
|
||||||
|
var culture = site?.CultureCode;
|
||||||
|
if (string.IsNullOrEmpty(culture))
|
||||||
|
{
|
||||||
|
culture = uiCulture;
|
||||||
|
}
|
||||||
|
_language = culture; // html element language attribute
|
||||||
|
|
||||||
|
// get culture cookie
|
||||||
|
string cultureCookie = Context.Request.Cookies[Shared.CookieRequestCultureProvider.DefaultCookieName];
|
||||||
|
if (cultureCookie != null)
|
||||||
|
{
|
||||||
|
// verify culture cookie (which could be inaccurate when using subfolders ie. domain.com/fr as cookies are based on domain)
|
||||||
|
var requestCulture = Shared.CookieRequestCultureProvider.ParseCookieValue(cultureCookie);
|
||||||
|
if (culture != requestCulture.Culture.Name || uiCulture != requestCulture.UICulture.Name)
|
||||||
|
{
|
||||||
|
// convert to culture cookie format (ie. "c=en|uic=en") and save cookie
|
||||||
|
cultureCookie = Shared.CookieRequestCultureProvider.MakeCookieValue(new Models.RequestCulture(culture, uiCulture));
|
||||||
|
SetLocalizationCookie(cultureCookie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// convert to culture cookie format (ie. "c=en|uic=en") and save cookie
|
||||||
|
cultureCookie = Shared.CookieRequestCultureProvider.MakeCookieValue(new Models.RequestCulture(culture, uiCulture));
|
||||||
|
SetLocalizationCookie(cultureCookie);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user