From a982f48ef98fa06c17a3973bc8876474fec29781 Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 13 Feb 2026 09:46:01 +0100 Subject: [PATCH] Improve culture cookie handling and localization responses Refactored GetCulture to return null if cookie is missing or invalid, and added GetCultureOrDefault for fallback. Updated TestLocalizerController and CultureMiddleware to use new methods for more accurate culture detection. Localizer now returns only the localized string value. --- .../Test/TestLocalizerController.cs | 4 ++-- .../Extensions/WebExtensions.cs | 18 +++++++----------- .../Middleware/CultureMiddleware.cs | 3 +-- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs b/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs index f5e3abb3..99d06047 100644 --- a/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs +++ b/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs @@ -24,7 +24,7 @@ namespace EnvelopeGenerator.Web.Controllers.Test } [HttpGet("{key}")] - public IActionResult Localize([FromRoute] string key) => Ok(_localizer[key]); + public IActionResult Localize([FromRoute] string key) => Ok(_localizer[key].Value); [HttpGet("fi-class")] public IActionResult GetFIClass(string? lang = null) => lang is null ? Ok(_cultures.FIClasses) : Ok(_cultures[lang]?.FIClass); @@ -39,6 +39,6 @@ namespace EnvelopeGenerator.Web.Controllers.Test : NotFound(); [HttpGet("culture/user")] - public IActionResult GetUserCulture() => Request.Cookies.GetCulture() is string cult ? Ok(cult) : NotFound(); + public IActionResult GetUserCulture() => Request.Cookies.GetCultureOrDefault() is string cult ? Ok(cult) : NotFound(); } } diff --git a/EnvelopeGenerator.Web/Extensions/WebExtensions.cs b/EnvelopeGenerator.Web/Extensions/WebExtensions.cs index 07a57ada..ee86648c 100644 --- a/EnvelopeGenerator.Web/Extensions/WebExtensions.cs +++ b/EnvelopeGenerator.Web/Extensions/WebExtensions.cs @@ -60,20 +60,16 @@ public static class WebExtensions #endregion #region Cookie - public static string GetCulture(this IRequestCookieCollection cookies) + public static string? GetCulture(this IRequestCookieCollection cookies) { - var cookieValue = cookies[CookieRequestCultureProvider.DefaultCookieName]; - - if (!string.IsNullOrEmpty(cookieValue)) - { - var culture = CookieRequestCultureProvider.ParseCookieValue(cookieValue)?.Cultures.FirstOrDefault().Value; - if (!string.IsNullOrEmpty(culture)) - return culture; - } - - return CultureInfo.CurrentUICulture.Name; + if (cookies[CookieRequestCultureProvider.DefaultCookieName] is string cookieValue) + return CookieRequestCultureProvider.ParseCookieValue(cookieValue)?.Cultures.FirstOrDefault().Value; + else + return null; } + public static string GetCultureOrDefault(this IRequestCookieCollection cookies) => GetCulture(cookies) ?? CultureInfo.CurrentCulture.Name; + public static void SetCulture(this IResponseCookies cookies, string culture) { var cookieOptions = new CookieOptions diff --git a/EnvelopeGenerator.Web/Middleware/CultureMiddleware.cs b/EnvelopeGenerator.Web/Middleware/CultureMiddleware.cs index 61756a12..825f8cf5 100644 --- a/EnvelopeGenerator.Web/Middleware/CultureMiddleware.cs +++ b/EnvelopeGenerator.Web/Middleware/CultureMiddleware.cs @@ -19,8 +19,7 @@ public class CultureMiddleware public async Task InvokeAsync(HttpContext context) { - var cookieName = CookieRequestCultureProvider.DefaultCookieName; - var cookieValue = context.Request.Cookies[cookieName]; + var cookieValue = context.Request.Cookies.GetCulture(); if (!_cultures.Languages.Contains(cookieValue)) {