Introduced a `LanguageControls` component for switching between languages (`de-DE`, `en-US`, `fr-FR`) and integrated a new `LocalizationService` to manage language preferences. Updated `LocalizationController` to handle language persistence via cookies and support multiple cultures. Enhanced the footer layout to include the language selector alongside theme controls. Added `flag-icons` library for displaying country flags and configured request localization in `Program.cs`. Styled the language selector dropdown and improved sender page visuals with updated CSS. Defaulted language handling to `de-DE` for fallback scenarios. Cleaned up redundant code in `LocalizationController`.
31 lines
1.1 KiB
C#
31 lines
1.1 KiB
C#
using System.Net;
|
|
|
|
namespace EnvelopeGenerator.Server.Client.Services;
|
|
|
|
public class LocalizationService(IHttpClientFactory httpClientFactory)
|
|
{
|
|
private HttpClient CreateDefaultClient() => httpClientFactory.CreateClient("EnvelopeGenerator.Server");
|
|
|
|
public async Task<string> GetLanguageAsync(CancellationToken cancel = default)
|
|
{
|
|
using var http = CreateDefaultClient();
|
|
var response = await http.GetAsync("/api/Localization/lang", cancel);
|
|
|
|
if (response.StatusCode == HttpStatusCode.NotFound)
|
|
return "de-DE";
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
return "de-DE";
|
|
|
|
var language = await response.Content.ReadAsStringAsync(cancel);
|
|
return string.IsNullOrWhiteSpace(language) ? "de-DE" : language.Trim('"');
|
|
}
|
|
|
|
public async Task SetLanguageAsync(string language, CancellationToken cancel = default)
|
|
{
|
|
using var http = CreateDefaultClient();
|
|
var response = await http.PostAsync($"/api/Localization/lang?language={Uri.EscapeDataString(language)}", null, cancel);
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
}
|