Add multilingual support with language selector

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`.
This commit is contained in:
2026-09-28 09:19:46 +02:00
parent 5aaa37b8ec
commit 0d2e43b2d6
10 changed files with 218 additions and 10 deletions

View File

@@ -337,6 +337,7 @@ try
builder.Services.AddScoped<EnvelopeGenerator.Server.Client.Services.UserPreferencesService>();
builder.Services.AddScoped<EnvelopeGenerator.Server.Client.Services.ThemeService>();
builder.Services.AddScoped<EnvelopeGenerator.Server.Client.Services.CustomImagesService>();
builder.Services.AddScoped<EnvelopeGenerator.Server.Client.Services.LocalizationService>();
// Business Services (Server specific)
builder.Services.AddScoped<DocumentService>();
@@ -410,9 +411,14 @@ try
// Set CORS policy
app.UseCors("AllowSpecificOriginsPolicy");
// Localization (fixed to German for now; persisted via cookie)
// Localization (default German; can be switched via cookie)
var defaultCulture = new CultureInfo("de-DE");
IList<CultureInfo> list = [defaultCulture];
IList<CultureInfo> list =
[
defaultCulture,
new CultureInfo("en-US"),
new CultureInfo("fr-FR")
];
var requestLocalizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(defaultCulture),
@@ -420,6 +426,7 @@ try
SupportedUICultures = list,
RequestCultureProviders = [new CookieRequestCultureProvider()]
};
requestLocalizationOptions.ApplyCurrentCultureToResponseHeaders = true;
app.UseRequestLocalization(requestLocalizationOptions);
app.UseHttpsRedirection();