Zum Inhalt

Lokalisierung

Coworkee.Localization hält Sprachen und Übersetzungen in der Datenbank und liefert die Texte jedes Moduls als eingebettetes JSON mit.

[DependsOn(typeof(CoworkeeLocalizationModule))]
public sealed class MyAppDatabaseModule : CoworkeeModule
{
    public override void ConfigureServices(ModuleServiceContext context) =>
        context.Services.AddSingleton<ILocalizationResourceContributor, MyAppTexts>();
}

internal sealed class MyAppTexts : ILocalizationResourceContributor
{
    public void Define(LocalizationResourceContext context) => context.AddEmbeddedJson(typeof(MyAppTexts).Assembly);
}

Schlüssel sind die englischen Texte. Ein Modul bettet Localization/{culture}.json ein:

Localization/de.json
{
  "Brands": "Marken",
  "Delete {0}? This cannot be undone.": "{0} löschen? Das lässt sich nicht rückgängig machen."
}
<EmbeddedResource Include="Localization\*.json" />

Anfangssprachen

Ohne Konfiguration bietet eine Installation Englisch und jede Kultur an, für die ein Modul Texte mitbringt (derzeit en und de), Englisch als Standard. LocalizationOptions (Abschnitt Coworkee:Localization) schränken das ein; das Setup speichert genau diese Sprachen, danach ändern Administratoren sie auf der Seite Sprachen.

appsettings.json
{
  "Coworkee": {
    "Localization": { "Languages": [ "en", "de" ], "DefaultLanguage": "de" }
  }
}

Mit einer unbekannten Kultur oder einer Standardsprache, die nicht unter den Sprachen ist, startet der Host nicht. coworkee new --languages en,de --default-language de schreibt dieselben Werte in eine neue App.

Im Client

CoworkeeLocalizer übersetzt in Seiten und Komponenten; fehlende Schlüssel fallen auf den Schlüssel zurück und werden an den Server gemeldet, wo sie unter Übersetzungen auftauchen.

@inject CoworkeeLocalizer L
<MudButton>@L["Save"]</MudButton>
<MudText>@L["Delete {0}? This cannot be undone.", brand.Name]</MudText>

Die Sprache wählt der Benutzer in der App-Leiste. Auch die Texte von MudBlazor (Pager, Filter, Dialoge) werden übersetzt. Die Kultur wird vor dem ersten Rendern gesetzt:

Program.cs
var host = builder.Build();
await host.Services.InitializeCoworkeeClientAsync();
await host.RunAsync();

Verwaltung

  • Sprachen (/admin/languages): alle Kulturen, nach Sprache gruppiert, mit einem Schalter. Beim Einschalten werden fehlende Texte mit dem Azure AI Translator übersetzt, wenn Localization.TranslatorKey (und Localization.TranslatorRegion) in den Einstellungen gesetzt sind; ein Knopf übersetzt später noch Fehlendes. Der Stern markiert die Standardsprache, die sich nicht abschalten lässt.

Sprachen - Übersetzungen (/admin/translations): jeder Schlüssel mit Modultext und bearbeitetem Text je Sprache. Bearbeitungen gewinnen gegen die Modultexte.

Beides braucht Localization.Manage.

Jede Änderung erreicht alle Clients sofort (Realtime-Topic global:localization): sie laden ihre Texte neu, und Benutzer, deren Sprache abgeschaltet wurde, wechseln mit kurzem Hinweis zur Standardsprache.