Lokalisierung in Blazor

Anwendungen zu lokalisieren und globalisieren ist immer und überall ein großes Thema. Im Web viel mehr und fast noch mehr mit SPA Frameworks wie es Blazor am Ende ist.

Da auch Blazor auf .NET basiert finden sich auch hier die RESX Dateiformate wieder. Pro Page und unterstützter Sprache/Schema wird eine Ressource Datei erstellt. 

Page1.de.resx
Page1.en-US.resx
_--

Am besten bündelt man das in ein Ressource Verzeichnis.

Als nächstes wird ganz dotnet core typisch in der Startup.cs der Lokalisierungs Service dem DI Container bekannt gemacht. Dabei hat man die Option den Speicherort der RESX Dateien anzugeben.

   1:  services.AddLocalization(
   2:  options => options.ResourcesPath = "resourcen");

WIe immer muss man per Use dann auch den Service einbinden und ggf dabei konfigurieren.

Im einfachsten Fall ein

   1:   app.UseRequestLocalization();

oder volles Programm mit unterstützten Sprachen

   1:  var supportedCultures = new[] { "en","en-US", "fr","de" };
   2:  var localizationOptions = 
new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
   3:       .AddSupportedCultures(supportedCultures)
   4:      .AddSupportedUICultures(supportedCultures);
   5:  app.UseRequestLocalization(localizationOptions);

 

Um per Code Blazor zu einer bestimmten Sprache zu nötigen kann man quick&dirty in die programm.cs folgende C# Code Zeilen einfügen

   1:  public static void Main(string[] args)
   2:   {
   3:      CultureInfo.DefaultThreadCurrentCulture = 
new CultureInfo("en");
   4:      CultureInfo.DefaultThreadCurrentUICulture = 
new CultureInfo("en");

Das ist sicher nicht das, was man in der Praxis nutzen wird. Allerdings ist die Benutzergesteuerte Culture Auswahl ein etwas komplexeres Thema und bleibt für die ersten Versuche außen vor.

Nun kann die Page lokalisierte Strings anzeigen. Dafür wird ein StringLocalizer injiziert. Dieser muss den Namen der Resx als Parameter Typ aufweisen.

   1:  @page "/seite"
   2:  @inject Microsoft.Extensions.Localization.
IStringLocalizer<Seite> loc
   3:  <h1>@loc["Key1"]</h1>
   4:  <div>Culture: @System.Globalization.
CultureInfo.CurrentCulture.DisplayName</div>
Kommentare sind geschlossen