Lumeo

Localization

How Lumeo picks the locale for component strings, dates, and numbers — and the Blazor WASM gotcha you need to know about.

Setting the default locale

Blazor WASM does NOT auto-detect the browser locale. Lumeo's components use CultureInfo.CurrentCulture for date/number formatting and ILumeoLocalizer (which reads CultureInfo.CurrentUICulture) for component strings — both default to en-US until you set them.

That's why a DatePicker shows "Mon", "Tue" in English even when the browser is configured for de-DE: the runtime never propagated the OS / browser preference into CurrentCulture.

Pin a culture in Program.cs

The simplest fix is to set DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture on the CultureInfo static, before the host runs:

using System.Globalization;

var builder = WebAssemblyHostBuilder.CreateDefault(args);

// Hardcoded — replace with your preferred default
var culture = new CultureInfo("de-DE");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;

builder.Services.AddLumeo();
await builder.Build().RunAsync();

Setting the culture at startup needs one project property, or Blazor WebAssembly stops with "Blazor detected a change in the application's culture that is not supported with the current project configuration": add <BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData> to the WASM project. It ships the full ICU data (about 320 KB brotli); without it the runtime only carries the culture it was published with.

Detect the browser locale at startup

For a UX that adapts to the user's browser, read navigator.language via JS interop before RunAsync():

using System.Globalization;
using Microsoft.JSInterop;

var builder = WebAssemblyHostBuilder.CreateDefault(args);

builder.Services.AddLumeo();
var host = builder.Build();

// Read navigator.language, fall back to en-US.
var js = host.Services.GetRequiredService<IJSRuntime>();
var browserLocale = await js.InvokeAsync<string>("eval", "navigator.language");
var culture = new CultureInfo(string.IsNullOrEmpty(browserLocale) ? "en-US" : browserLocale);
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;

await host.RunAsync();

Component strings (ILumeoLocalizer)

Lumeo ships with English and German default translations for all built-in component strings (close buttons, "no results", pagination labels, etc). The lookup order is:

  • Exact culture match (e.g. de-DE)
  • Neutral / parent culture (de)
  • English fallback (en)
  • The key itself (so unresolved keys are visible, never silently empty)

Override or extend translations in your AddLumeo call:

builder.Services.AddLumeo(opts =>
{
    // Override a single key for an existing culture
    opts.Add("de", "DataGrid.NoData", "Keine Datensätze");

    // Add a whole new culture
    opts.AddMany("fr", new Dictionary<string, string>
    {
        ["DataGrid.NoData"] = "Aucune donnée",
        ["Pagination.Previous"] = "Précédent",
    });
});

Adding a locale Lumeo does not ship

Lumeo ships 14 locales. Dates, month and weekday names come from the Culture you pass and need nothing from you; the component strings below do. For a culture the package has no bucket for (Croatian, say) every key falls back to English, so supply the bucket in AddLumeo: the catalogue lists every key with its English default, and a partial bucket is fine, the rest keeps falling back.

builder.Services.AddLumeo(options =>
{
    options.Localization.AddMany("hr", new Dictionary<string, string>
    {
        ["Calendar.PreviousMonth"] = "Prethodni mjesec",
        ["Calendar.NextMonth"] = "Sljedeći mjesec",
        ["DataGrid.SelectAll"] = "Odaberi sve",
        ["DataGrid.SelectRow"] = "Odaberi redak",
        // ... every key from the catalogue below
    });
});

Every key

All 641 keys the components read through ILumeoLocalizer, generated from the library source (scripts/i18n/generate-key-catalog.py). Placeholders like {0} are string.Format arguments.

KeyEnglishGermanLocales
AgentMessage.ActionsMessage actionsNachrichtenaktionen3 / 14
AgentMessage.BranchXofY{0} of {1}{0} von {1}3 / 14
AgentMessage.CopiedCopiedKopiert3 / 14
AgentMessage.CopyCopyKopieren3 / 14
AgentMessage.NextBranchNext responseNächste Antwort3 / 14
AgentMessage.PreviousBranchPrevious responseVorherige Antwort3 / 14
AgentMessage.RegenerateRegenerateNeu generieren3 / 14
AgentMessage.RetryRetryErneut versuchen3 / 14
AgentMessageList.EmptyDescriptionStart a conversation to see messages here.Beginne eine Unterhaltung, um hier Nachrichten zu sehen.3 / 14
AgentMessageList.EmptyTitleNo messages yetNoch keine Nachrichten3 / 14
AgentMessageList.ScrollToLatestScroll to latestZu den neuesten springen3 / 14
Alert.DismissDismissAusblenden3 / 14
AlertDialog.ContinueContinueFortfahren14 / 14
AlertDialog.DeleteDeleteLöschen14 / 14
AudioPlayer.DownloadDownload audioAudio herunterladen14 / 14
AudioPlayer.LabelAudio playerAudio-Player14 / 14
AudioPlayer.MuteMuteStummschalten14 / 14
AudioPlayer.PausePausePause14 / 14
AudioPlayer.PlayPlayAbspielen14 / 14
AudioPlayer.PlaybackRatePlayback speed {0}×Wiedergabegeschwindigkeit {0}×3 / 14
AudioPlayer.SeekSeekWiedergabeposition14 / 14
AudioPlayer.SkipBackSkip back {0} seconds{0} Sekunden zurück3 / 14
AudioPlayer.SkipForwardSkip forward {0} seconds{0} Sekunden vor3 / 14
AudioPlayer.UnmuteUnmuteStummschaltung aufheben14 / 14
AudioPlayer.VolumeVolumeLautstärke3 / 14
Badge.RemoveRemoveEntfernen3 / 14
BottomNav.LabelBottom navigationUntere Navigation3 / 14
BottomNav.PrimaryActionPrimary actionPrimäre Aktion3 / 14
Calendar.ClearClearZurücksetzen14 / 14
Calendar.NextMonthNext monthNächster Monat14 / 14
Calendar.NextYearNext yearNächstes Jahr14 / 14
Calendar.PrevMonthPrevious monthVorheriger Monat14 / 14
Calendar.PrevYearPrevious yearVorheriges Jahr14 / 14
Calendar.TodayTodayHeute14 / 14
Carousel.GoToSlideGo to slide {0}Zu Folie {0}3 / 14
Carousel.IndicatorsSlide indicatorsFolienanzeiger3 / 14
Carousel.NextSlideNext slideNächste Folie14 / 14
Carousel.PreviousSlidePrevious slideVorherige Folie14 / 14
Carousel.SlideXofYSlide {0} of {1}Folie {0} von {1}14 / 14
Cascader.ClearSelectionClear selectionAuswahl löschen3 / 14
Cascader.PlaceholderSelect…Auswählen…14 / 14
Chart.LoadingLoading…Wird geladen…8 / 14
Chip.RemoveRemoveEntfernen3 / 14
ColorPicker.BlueBlueBlau14 / 14
ColorPicker.GreenGreenGrün14 / 14
ColorPicker.HexHexHex14 / 14
ColorPicker.HexValueHex valueHex-Wert14 / 14
ColorPicker.HueHueFarbton14 / 14
ColorPicker.LightnessLightnessHelligkeit14 / 14
ColorPicker.OpacityOpacityDeckkraft14 / 14
ColorPicker.PickColorPick a colorFarbe wählen14 / 14
ColorPicker.PresetsPresetsVorlagen14 / 14
ColorPicker.RedRedRot14 / 14
ColorPicker.SaturationSaturationSättigung14 / 14
ColorPicker.ValueValueHelligkeit14 / 14
Combobox.ClearClearZurücksetzen14 / 14
Combobox.CreateCreate \"{0}\"\"{0}\" erstellen14 / 14
Combobox.LoadingLoading…Wird geladen…14 / 14
Combobox.NoResultsNo results foundKeine Ergebnisse14 / 14
Combobox.PlaceholderSelect…Auswählen…14 / 14
Combobox.SearchPlaceholderSearch…Suchen…14 / 14
Command.NoResultsNo results foundKeine Ergebnisse14 / 14
Command.PlaceholderType a command or search…Befehl eingeben oder suchen…14 / 14
Common.ActionsActionsAktionen3 / 14
Common.ApplyApplyAnwenden14 / 14
Common.BackBackZurück14 / 14
Common.BackToTopBack to topNach oben3 / 14
Common.CancelCancelAbbrechen14 / 14
Common.ClearClearZurücksetzen14 / 14
Common.ClearAllClear allAlle zurücksetzen14 / 14
Common.CloseCloseSchließen14 / 14
Common.CollapseCollapseEinklappen3 / 14
Common.CopiedCopiedKopiert14 / 14
Common.CopyCopyKopieren14 / 14
Common.DragHandleDrag handleZiehgriff3 / 14
Common.ExpandExpandAusklappen3 / 14
Common.LoadingLoading…Wird geladen…14 / 14
Common.MoreMoreMehr14 / 14
Common.MoreOptionsMore optionsWeitere Optionen3 / 14
Common.NextNextWeiter14 / 14
Common.NoResultsNo resultsKeine Ergebnisse14 / 14
Common.ResetResetZurücksetzen14 / 14
Common.SaveSaveSpeichern14 / 14
Common.SearchSearchSuchen14 / 14
Common.ShowLessShow lessWeniger anzeigen14 / 14
Common.ShowMoreShow moreMehr anzeigen14 / 14
ConfirmButton.CancelCancelAbbrechen14 / 14
ConfirmButton.ConfirmContinueFortfahren14 / 14
ConfirmButton.TitleAre you sure?Sind Sie sicher?14 / 14
DataGrid.AddGroupLevel+ Add group level+ Gruppe hinzufügen14 / 14
DataGrid.AggregateAvgAvgØ14 / 14
DataGrid.AggregateCountCountAnzahl14 / 14
DataGrid.AggregateMaxMaxMax14 / 14
DataGrid.AggregateMinMinMin14 / 14
DataGrid.AggregateRowAggregate summaryAggregatzeile14 / 14
DataGrid.AggregateSumSumSumme14 / 14
DataGrid.ApplyLayoutApply layoutLayout anwenden14 / 14
DataGrid.CancelCancelAbbrechen14 / 14
DataGrid.CancelEditCancelAbbrechen14 / 14
DataGrid.ClearAllGroupingClear all groupingAlle Gruppierungen entfernen14 / 14
DataGrid.ClearFiltersClear filtersFilter zurücksetzen14 / 14
DataGrid.ClearSearchClear searchSuche löschen14 / 14
DataGrid.ClearSortClear sortSortierung entfernen14 / 14
DataGrid.CollapseGroupCollapse group {0}Gruppe {0} einklappen14 / 14
DataGrid.CollapseRowCollapse row {0}Zeile {0} einklappen14 / 14
DataGrid.ColumnMenuColumn menuSpaltenmenü14 / 14
DataGrid.ColumnMovedAnnouncement{0} moved to position {1} of {2}{0} an Position {1} von {2} verschoben14 / 14
DataGrid.ColumnsColumnsSpalten14 / 14
DataGrid.CommitEditSaveSpeichern14 / 14
DataGrid.CopySelectedCopy ({0})Kopieren ({0})14 / 14
DataGrid.DefaultDefaultStandard14 / 14
DataGrid.DeleteDeleteLöschen14 / 14
DataGrid.DragToGroupDrag to group by this columnZum Gruppieren nach dieser Spalte ziehen14 / 14
DataGrid.DragToReorderDrag to reorder columnZum Umsortieren der Spalte ziehen14 / 14
DataGrid.DragToReorderRowDrag to reorder rowZum Umsortieren der Zeile ziehen14 / 14
DataGrid.EditEditBearbeiten14 / 14
DataGrid.ErrorLoadingDataFailed to load data: {0}Fehler beim Laden: {0}14 / 14
DataGrid.ExitFullscreenExit fullscreenVollbild schließen14 / 14
DataGrid.ExpandFullscreenExpand to fullscreenVollbild öffnen14 / 14
DataGrid.ExpandGroupExpand group {0}Gruppe {0} ausklappen14 / 14
DataGrid.ExpandRowExpand row {0}Zeile {0} ausklappen14 / 14
DataGrid.ExportExportExportieren14 / 14
DataGrid.ExportCsvExport CSVCSV exportieren14 / 14
DataGrid.ExportExcelExport ExcelExcel exportieren14 / 14
DataGrid.ExportJsonExport JSONJSON exportieren14 / 14
DataGrid.FilterFilterFilter14 / 14
DataGrid.FilterColumnFilter {0}{0} filtern14 / 14
DataGrid.FiltersFiltersFilter14 / 14
DataGrid.FitToContentFit to contentAn Inhalt anpassen14 / 14
DataGrid.GlobalGlobalGlobal14 / 14
DataGrid.GroupPanelPlaceholderDrag a Groupable column header here, or use the dropdownSpaltenkopf hierher ziehen oder Dropdown verwenden14 / 14
DataGrid.HideHideAusblenden14 / 14
DataGrid.ItemsitemsEinträge14 / 14
DataGrid.ItemsCount{0} items{0} Einträge14 / 14
DataGrid.ItemsCount.One{0} item{0} Eintrag14 / 14
DataGrid.ItemsCount.Other{0} items{0} Einträge14 / 14
DataGrid.LayoutNameLayout nameLayoutname14 / 14
DataGrid.LayoutsLayoutsLayouts14 / 14
DataGrid.LoadingLoading…Wird geladen…14 / 14
DataGrid.MoveDownMove downNach unten14 / 14
DataGrid.MoveLeftMove leftNach links verschieben14 / 14
DataGrid.MoveRightMove rightNach rechts verschieben14 / 14
DataGrid.MoveUpMove upNach oben14 / 14
DataGrid.NewLayoutNew layoutNeues Layout14 / 14
DataGrid.NoDataNo data availableKeine Daten vorhanden14 / 14
DataGrid.NoDataFilteredNo rows match the current filtersKeine Zeilen entsprechen den aktuellen Filtern14 / 14
DataGrid.NoSavedLayoutsNo saved layouts yet.Noch keine gespeicherten Layouts.14 / 14
DataGrid.PersonalPersonalPersönlich14 / 14
DataGrid.PinColumnPin columnSpalte anheften14 / 14
DataGrid.PinLeftPin to leftLinks anheften14 / 14
DataGrid.PinRightPin to rightRechts anheften14 / 14
DataGrid.RemoveGroupingRemove groupingGruppierung entfernen14 / 14
DataGrid.RenameRenameUmbenennen14 / 14
DataGrid.ResetLayoutReset layoutLayout zurücksetzen14 / 14
DataGrid.ResizeColumnResize column (use arrow keys, double-click to auto-fit)Spaltenbreite ändern (Pfeiltasten, Doppelklick für Auto-Anpassung)14 / 14
DataGrid.RetryRetryErneut versuchen14 / 14
DataGrid.RowReorderUnavailableRow reordering isn't available while grouped or virtualizedZeilen können bei Gruppierung oder Virtualisierung nicht umsortiert werden14 / 14
DataGrid.SaveSaveSpeichern14 / 14
DataGrid.SaveCurrentLayoutSave current layout…Aktuelles Layout speichern…14 / 14
DataGrid.SaveLayoutSave layoutLayout speichern14 / 14
DataGrid.SearchPlaceholderSearch…Suchen…14 / 14
DataGrid.SelectAllRowsSelect all rowsAlle Zeilen auswählen14 / 14
DataGrid.SelectRowSelect row {0}Zeile {0} auswählen14 / 14
DataGrid.ShowShowEinblenden14 / 14
DataGrid.SortAscendingSort ascendingAufsteigend sortieren14 / 14
DataGrid.SortDescendingSort descendingAbsteigend sortieren14 / 14
DataGrid.SystemDefaultSystem defaultSystemstandard14 / 14
DataGrid.ToggleColumnsToggle columnsSpalten ein-/ausblenden14 / 14
DataGrid.UnpinUnpinLösen14 / 14
DatePicker.InvalidDateInvalid dateUngültiges Datum3 / 14
DatePicker.MultipleSelected{0} selected{0} ausgewählt3 / 14
DatePicker.OpenCalendarOpen calendarKalender öffnen3 / 14
DatePicker.PlaceholderPick a dateDatum wählen14 / 14
DateRange.FromFromVon14 / 14
DateRange.PlaceholderPick a date rangeZeitraum wählen14 / 14
DateRange.ToToBis14 / 14
DateTimePicker.ClearDateClear dateDatum löschen14 / 14
DateTimePicker.OpenCalendarOpen calendarKalender öffnen3 / 14
DateTimePicker.PlaceholderSelect date and timeDatum und Uhrzeit wählen14 / 14
DateTimePicker.TimeLabelTimeUhrzeit14 / 14
Dialog.CancelCancelAbbrechen14 / 14
Dialog.CloseCloseSchließen14 / 14
Dialog.ConfirmConfirmBestätigen14 / 14
Dialog.NoNoNein14 / 14
Dialog.OkOKOK14 / 14
Dialog.YesYesJa14 / 14
Dock.ApplicationDockApplication DockAnwendungs-Dock3 / 14
Editor.AiActionsAI actionsKI-Aktionen8 / 14
Editor.AiFixGrammarFix grammarGrammatik korrigieren8 / 14
Editor.AiImproveWritingImprove writingSchreibstil verbessern8 / 14
Editor.AiMakeLongerMake longerVerlängern8 / 14
Editor.AiMakeShorterMake shorterKürzen8 / 14
Editor.AiSummarizeSummarizeZusammenfassen8 / 14
Editor.AiTranslateTranslateÜbersetzen8 / 14
Editor.ApplyApplyAnwenden8 / 14
Editor.BoldBoldFett8 / 14
Editor.BulletListBullet listAufzählung8 / 14
Editor.CancelCancelAbbrechen8 / 14
Editor.ClearFormattingClear formattingFormatierung entfernen8 / 14
Editor.CodeBlockCode blockCodeblock8 / 14

Showing the first 200 of 641 matches; narrow the filter to see the rest.

See also