Merge pull request #51 from LD-Reborn/47-feature-add-localization-provider-and-set-up-the-localization-files

Added localizer, added de & en localization to /Home/Index and /Home/…
This commit is contained in:
LD50
2025-10-03 18:44:06 +02:00
committed by GitHub
9 changed files with 152 additions and 10 deletions

View File

@@ -10,7 +10,11 @@ var builder = WebApplication.CreateBuilder(args);
// Bind options // Bind options
builder.Services.Configure<LdapConfig>(builder.Configuration.GetSection("Ldap")); builder.Services.Configure<LdapConfig>(builder.Configuration.GetSection("Ldap"));
builder.Services.AddControllersWithViews(); builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
builder.Services.AddControllersWithViews()
.AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
@@ -53,6 +57,13 @@ app.UseStaticFiles();
app.UseRouting(); app.UseRouting();
app.UseAuthorization(); app.UseAuthorization();
string[] supportedCultures = ["de", "en"];
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures.First())
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
app.MapControllerRoute( app.MapControllerRoute(
name: "default", name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); pattern: "{controller=Home}/{action=Index}/{id?}");

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
</resheader>
<data name="Home Page" xml:space="preserve">
<value>Startseite</value>
</data>
</root>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
</resheader>
<data name="Log out" xml:space="preserve">
<value>Abmelden</value>
</data>
<data name="Login" xml:space="preserve">
<value>Anmelden</value>
</data>
<data name="Username" xml:space="preserve">
<value>Benutzername</value>
</data>
<data name="Password" xml:space="preserve">
<value>Passwort</value>
</data>
</root>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
</resheader>
<data name="Log out" xml:space="preserve">
<value>Log out</value>
</data>
<data name="Login" xml:space="preserve">
<value>Login</value>
</data>
<data name="Username" xml:space="preserve">
<value>Username</value>
</data>
<data name="Password" xml:space="preserve">
<value>Password</value>
</data>
</root>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
</resheader>
<data name="Log out" xml:space="preserve">
<value>Abmelden</value>
</data>
<data name="Login" xml:space="preserve">
<value>Anmelden</value>
</data>
</root>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
</resheader>
<data name="Log out" xml:space="preserve">
<value>Log out</value>
</data>
<data name="Login" xml:space="preserve">
<value>Login</value>
</data>
<data name="Username" xml:space="preserve">
<value>Username</value>
</data>
<data name="Password" xml:space="preserve">
<value>Password</value>
</data>
</root>

View File

@@ -1,5 +1,7 @@
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer T
@{ @{
ViewData["Title"] = "Home Page"; ViewData["Title"] = T["Home Page"];
} }
<div class="text-center"> <div class="text-center">

View File

@@ -1,9 +1,11 @@
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer T
@{ @{
ViewData["Title"] = "Login"; ViewData["Title"] = T["Login"];
} }
<div class="text-center"> <div class="text-center">
<h1 class="display-4">Login</h1> <h1 class="display-4">@T["Login"]</h1>
@{ @{
if (Model.ErrorText is not null) if (Model.ErrorText is not null)
{ {
@@ -14,15 +16,15 @@
} }
<form method="post" action="/Home/Login" class="mt-4" style="max-width: 400px; margin: auto;"> <form method="post" action="/Home/Login" class="mt-4" style="max-width: 400px; margin: auto;">
<div class="form-group mb-3"> <div class="form-group mb-3">
<label for="username" class="form-label">Username</label> <label for="username" class="form-label">@T["Username"]</label>
<input type="text" class="form-control" id="username" name="username" required> <input type="text" class="form-control" id="username" name="username" required>
</div> </div>
<div class="form-group mb-3"> <div class="form-group mb-3">
<label for="password" class="form-label">Password</label> <label for="password" class="form-label">@T["Password"]</label>
<input type="password" class="form-control" id="password" name="password" required> <input type="password" class="form-control" id="password" name="password" required>
</div> </div>
<button type="submit" class="btn btn-primary w-100">Login</button> <button type="submit" class="btn btn-primary w-100">@T["Login"]</button>
</form> </form>
</div> </div>

View File

@@ -1,4 +1,6 @@
<!DOCTYPE html> @using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer T
<!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
@@ -26,11 +28,11 @@
<li class="nav-item"> <li class="nav-item">
@if (User.Identity.IsAuthenticated) @if (User.Identity.IsAuthenticated)
{ {
<a class="nav-link text" asp-area="" asp-controller="Home" asp-action="Logout">Log out</a> <a class="nav-link text" asp-area="" asp-controller="Home" asp-action="Logout">@T["Log out"]</a>
} }
else else
{ {
<a class="nav-link text" asp-area="" asp-controller="Home" asp-action="Login">Login</a> <a class="nav-link text" asp-area="" asp-controller="Home" asp-action="Login">@T["Login"]</a>
} }
</li> </li>
</ul> </ul>