Merge pull request #6063 from sbwalker/dev

allow LanguageSwitcher to support culture and ui culture
This commit is contained in:
Shaun Walker
2026-02-20 15:12:10 -05:00
committed by GitHub
5 changed files with 9 additions and 7 deletions

View File

@@ -14,8 +14,9 @@ namespace Oqtane.Services
/// Set the localization cookie /// Set the localization cookie
/// </summary> /// </summary>
/// <param name="culture"></param> /// <param name="culture"></param>
/// <param name="uiCulture"></param>
/// <returns></returns> /// <returns></returns>
Task SetLocalizationCookieAsync(string culture); Task SetLocalizationCookieAsync(string culture, string uiCulture);
} }
[PrivateApi("Don't show in the documentation, as everything should use the Interface")] [PrivateApi("Don't show in the documentation, as everything should use the Interface")]
@@ -23,7 +24,7 @@ namespace Oqtane.Services
{ {
public LocalizationCookieService(HttpClient http, SiteState siteState) : base(http, siteState) { } public LocalizationCookieService(HttpClient http, SiteState siteState) : base(http, siteState) { }
public Task SetLocalizationCookieAsync(string culture) public Task SetLocalizationCookieAsync(string culture, string uiCulture)
{ {
return Task.CompletedTask; // only used in server side rendering return Task.CompletedTask; // only used in server side rendering
} }

View File

@@ -56,7 +56,7 @@
var culture = PageState.QueryString["culture"]; var culture = PageState.QueryString["culture"];
if (PageState.Site.Languages.Any(item => item.Code == culture)) if (PageState.Site.Languages.Any(item => item.Code == culture))
{ {
await LocalizationCookieService.SetLocalizationCookieAsync(culture); await LocalizationCookieService.SetLocalizationCookieAsync(PageState.Site.CultureCode, culture);
} }
NavigationManager.NavigateTo(NavigationManager.Uri.Replace($"?culture={culture}", "")); NavigationManager.NavigateTo(NavigationManager.Uri.Replace($"?culture={culture}", ""));
} }
@@ -66,7 +66,7 @@
{ {
if (culture != CultureInfo.CurrentUICulture.Name) if (culture != CultureInfo.CurrentUICulture.Name)
{ {
var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(PageState.Site.CultureCode, culture));
var interop = new Interop(JSRuntime); var interop = new Interop(JSRuntime);
await interop.SetCookie(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, 360, true, "Lax"); await interop.SetCookie(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, 360, true, "Lax");
NavigationManager.NavigateTo(NavigationManager.Uri, true); NavigationManager.NavigateTo(NavigationManager.Uri, true);

View File

@@ -4,7 +4,6 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Oqtane.Models;
using Oqtane.Shared; using Oqtane.Shared;
namespace Oqtane.Infrastructure namespace Oqtane.Infrastructure

View File

@@ -18,9 +18,11 @@ namespace Oqtane.Migrations.Tenant
{ {
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase); var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
siteEntityBuilder.AddStringColumn("CultureCode", 10, true); siteEntityBuilder.AddStringColumn("CultureCode", 10, true);
siteEntityBuilder.UpdateData("CultureCode", $"'{Shared.Constants.DefaultCulture}'");
var userEntityBuilder = new UserEntityBuilder(migrationBuilder, ActiveDatabase); var userEntityBuilder = new UserEntityBuilder(migrationBuilder, ActiveDatabase);
userEntityBuilder.AddStringColumn("CultureCode", 10, true); userEntityBuilder.AddStringColumn("CultureCode", 10, true);
userEntityBuilder.UpdateData("CultureCode", $"'{Shared.Constants.DefaultCulture}'");
} }
protected override void Down(MigrationBuilder migrationBuilder) protected override void Down(MigrationBuilder migrationBuilder)

View File

@@ -16,9 +16,9 @@ namespace Oqtane.Services
_accessor = accessor; _accessor = accessor;
} }
public Task SetLocalizationCookieAsync(string culture) public Task SetLocalizationCookieAsync(string culture, string uiCulture)
{ {
var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture, uiCulture));
_accessor.HttpContext.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, new CookieOptions _accessor.HttpContext.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, new CookieOptions
{ {