Merge pull request #6062 from sbwalker/dev

fix culture cookie so that it supports culture and ui culture
This commit is contained in:
Shaun Walker
2026-02-20 14:53:57 -05:00
committed by GitHub

View File

@@ -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);
}
}
} }