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.
| Key | English | German | Locales |
|---|---|---|---|
| AgentMessage.Actions | Message actions | Nachrichtenaktionen | 3 / 14 |
| AgentMessage.BranchXofY | {0} of {1} | {0} von {1} | 3 / 14 |
| AgentMessage.Copied | Copied | Kopiert | 3 / 14 |
| AgentMessage.Copy | Copy | Kopieren | 3 / 14 |
| AgentMessage.NextBranch | Next response | Nächste Antwort | 3 / 14 |
| AgentMessage.PreviousBranch | Previous response | Vorherige Antwort | 3 / 14 |
| AgentMessage.Regenerate | Regenerate | Neu generieren | 3 / 14 |
| AgentMessage.Retry | Retry | Erneut versuchen | 3 / 14 |
| AgentMessageList.EmptyDescription | Start a conversation to see messages here. | Beginne eine Unterhaltung, um hier Nachrichten zu sehen. | 3 / 14 |
| AgentMessageList.EmptyTitle | No messages yet | Noch keine Nachrichten | 3 / 14 |
| AgentMessageList.ScrollToLatest | Scroll to latest | Zu den neuesten springen | 3 / 14 |
| Alert.Dismiss | Dismiss | Ausblenden | 3 / 14 |
| AlertDialog.Continue | Continue | Fortfahren | 14 / 14 |
| AlertDialog.Delete | Delete | Löschen | 14 / 14 |
| AudioPlayer.Download | Download audio | Audio herunterladen | 14 / 14 |
| AudioPlayer.Label | Audio player | Audio-Player | 14 / 14 |
| AudioPlayer.Mute | Mute | Stummschalten | 14 / 14 |
| AudioPlayer.Pause | Pause | Pause | 14 / 14 |
| AudioPlayer.Play | Play | Abspielen | 14 / 14 |
| AudioPlayer.PlaybackRate | Playback speed {0}× | Wiedergabegeschwindigkeit {0}× | 3 / 14 |
| AudioPlayer.Seek | Seek | Wiedergabeposition | 14 / 14 |
| AudioPlayer.SkipBack | Skip back {0} seconds | {0} Sekunden zurück | 3 / 14 |
| AudioPlayer.SkipForward | Skip forward {0} seconds | {0} Sekunden vor | 3 / 14 |
| AudioPlayer.Unmute | Unmute | Stummschaltung aufheben | 14 / 14 |
| AudioPlayer.Volume | Volume | Lautstärke | 3 / 14 |
| Badge.Remove | Remove | Entfernen | 3 / 14 |
| BottomNav.Label | Bottom navigation | Untere Navigation | 3 / 14 |
| BottomNav.PrimaryAction | Primary action | Primäre Aktion | 3 / 14 |
| Calendar.Clear | Clear | Zurücksetzen | 14 / 14 |
| Calendar.NextMonth | Next month | Nächster Monat | 14 / 14 |
| Calendar.NextYear | Next year | Nächstes Jahr | 14 / 14 |
| Calendar.PrevMonth | Previous month | Vorheriger Monat | 14 / 14 |
| Calendar.PrevYear | Previous year | Vorheriges Jahr | 14 / 14 |
| Calendar.Today | Today | Heute | 14 / 14 |
| Carousel.GoToSlide | Go to slide {0} | Zu Folie {0} | 3 / 14 |
| Carousel.Indicators | Slide indicators | Folienanzeiger | 3 / 14 |
| Carousel.NextSlide | Next slide | Nächste Folie | 14 / 14 |
| Carousel.PreviousSlide | Previous slide | Vorherige Folie | 14 / 14 |
| Carousel.SlideXofY | Slide {0} of {1} | Folie {0} von {1} | 14 / 14 |
| Cascader.ClearSelection | Clear selection | Auswahl löschen | 3 / 14 |
| Cascader.Placeholder | Select… | Auswählen… | 14 / 14 |
| Chart.Loading | Loading… | Wird geladen… | 8 / 14 |
| Chip.Remove | Remove | Entfernen | 3 / 14 |
| ColorPicker.Blue | Blue | Blau | 14 / 14 |
| ColorPicker.Green | Green | Grün | 14 / 14 |
| ColorPicker.Hex | Hex | Hex | 14 / 14 |
| ColorPicker.HexValue | Hex value | Hex-Wert | 14 / 14 |
| ColorPicker.Hue | Hue | Farbton | 14 / 14 |
| ColorPicker.Lightness | Lightness | Helligkeit | 14 / 14 |
| ColorPicker.Opacity | Opacity | Deckkraft | 14 / 14 |
| ColorPicker.PickColor | Pick a color | Farbe wählen | 14 / 14 |
| ColorPicker.Presets | Presets | Vorlagen | 14 / 14 |
| ColorPicker.Red | Red | Rot | 14 / 14 |
| ColorPicker.Saturation | Saturation | Sättigung | 14 / 14 |
| ColorPicker.Value | Value | Helligkeit | 14 / 14 |
| Combobox.Clear | Clear | Zurücksetzen | 14 / 14 |
| Combobox.Create | Create \"{0}\" | \"{0}\" erstellen | 14 / 14 |
| Combobox.Loading | Loading… | Wird geladen… | 14 / 14 |
| Combobox.NoResults | No results found | Keine Ergebnisse | 14 / 14 |
| Combobox.Placeholder | Select… | Auswählen… | 14 / 14 |
| Combobox.SearchPlaceholder | Search… | Suchen… | 14 / 14 |
| Command.NoResults | No results found | Keine Ergebnisse | 14 / 14 |
| Command.Placeholder | Type a command or search… | Befehl eingeben oder suchen… | 14 / 14 |
| Common.Actions | Actions | Aktionen | 3 / 14 |
| Common.Apply | Apply | Anwenden | 14 / 14 |
| Common.Back | Back | Zurück | 14 / 14 |
| Common.BackToTop | Back to top | Nach oben | 3 / 14 |
| Common.Cancel | Cancel | Abbrechen | 14 / 14 |
| Common.Clear | Clear | Zurücksetzen | 14 / 14 |
| Common.ClearAll | Clear all | Alle zurücksetzen | 14 / 14 |
| Common.Close | Close | Schließen | 14 / 14 |
| Common.Collapse | Collapse | Einklappen | 3 / 14 |
| Common.Copied | Copied | Kopiert | 14 / 14 |
| Common.Copy | Copy | Kopieren | 14 / 14 |
| Common.DragHandle | Drag handle | Ziehgriff | 3 / 14 |
| Common.Expand | Expand | Ausklappen | 3 / 14 |
| Common.Loading | Loading… | Wird geladen… | 14 / 14 |
| Common.More | More | Mehr | 14 / 14 |
| Common.MoreOptions | More options | Weitere Optionen | 3 / 14 |
| Common.Next | Next | Weiter | 14 / 14 |
| Common.NoResults | No results | Keine Ergebnisse | 14 / 14 |
| Common.Reset | Reset | Zurücksetzen | 14 / 14 |
| Common.Save | Save | Speichern | 14 / 14 |
| Common.Search | Search | Suchen | 14 / 14 |
| Common.ShowLess | Show less | Weniger anzeigen | 14 / 14 |
| Common.ShowMore | Show more | Mehr anzeigen | 14 / 14 |
| ConfirmButton.Cancel | Cancel | Abbrechen | 14 / 14 |
| ConfirmButton.Confirm | Continue | Fortfahren | 14 / 14 |
| ConfirmButton.Title | Are you sure? | Sind Sie sicher? | 14 / 14 |
| DataGrid.AddGroupLevel | + Add group level | + Gruppe hinzufügen | 14 / 14 |
| DataGrid.AggregateAvg | Avg | Ø | 14 / 14 |
| DataGrid.AggregateCount | Count | Anzahl | 14 / 14 |
| DataGrid.AggregateMax | Max | Max | 14 / 14 |
| DataGrid.AggregateMin | Min | Min | 14 / 14 |
| DataGrid.AggregateRow | Aggregate summary | Aggregatzeile | 14 / 14 |
| DataGrid.AggregateSum | Sum | Summe | 14 / 14 |
| DataGrid.ApplyLayout | Apply layout | Layout anwenden | 14 / 14 |
| DataGrid.Cancel | Cancel | Abbrechen | 14 / 14 |
| DataGrid.CancelEdit | Cancel | Abbrechen | 14 / 14 |
| DataGrid.ClearAllGrouping | Clear all grouping | Alle Gruppierungen entfernen | 14 / 14 |
| DataGrid.ClearFilters | Clear filters | Filter zurücksetzen | 14 / 14 |
| DataGrid.ClearSearch | Clear search | Suche löschen | 14 / 14 |
| DataGrid.ClearSort | Clear sort | Sortierung entfernen | 14 / 14 |
| DataGrid.CollapseGroup | Collapse group {0} | Gruppe {0} einklappen | 14 / 14 |
| DataGrid.CollapseRow | Collapse row {0} | Zeile {0} einklappen | 14 / 14 |
| DataGrid.ColumnMenu | Column menu | Spaltenmenü | 14 / 14 |
| DataGrid.ColumnMovedAnnouncement | {0} moved to position {1} of {2} | {0} an Position {1} von {2} verschoben | 14 / 14 |
| DataGrid.Columns | Columns | Spalten | 14 / 14 |
| DataGrid.CommitEdit | Save | Speichern | 14 / 14 |
| DataGrid.CopySelected | Copy ({0}) | Kopieren ({0}) | 14 / 14 |
| DataGrid.Default | Default | Standard | 14 / 14 |
| DataGrid.Delete | Delete | Löschen | 14 / 14 |
| DataGrid.DragToGroup | Drag to group by this column | Zum Gruppieren nach dieser Spalte ziehen | 14 / 14 |
| DataGrid.DragToReorder | Drag to reorder column | Zum Umsortieren der Spalte ziehen | 14 / 14 |
| DataGrid.DragToReorderRow | Drag to reorder row | Zum Umsortieren der Zeile ziehen | 14 / 14 |
| DataGrid.Edit | Edit | Bearbeiten | 14 / 14 |
| DataGrid.ErrorLoadingData | Failed to load data: {0} | Fehler beim Laden: {0} | 14 / 14 |
| DataGrid.ExitFullscreen | Exit fullscreen | Vollbild schließen | 14 / 14 |
| DataGrid.ExpandFullscreen | Expand to fullscreen | Vollbild öffnen | 14 / 14 |
| DataGrid.ExpandGroup | Expand group {0} | Gruppe {0} ausklappen | 14 / 14 |
| DataGrid.ExpandRow | Expand row {0} | Zeile {0} ausklappen | 14 / 14 |
| DataGrid.Export | Export | Exportieren | 14 / 14 |
| DataGrid.ExportCsv | Export CSV | CSV exportieren | 14 / 14 |
| DataGrid.ExportExcel | Export Excel | Excel exportieren | 14 / 14 |
| DataGrid.ExportJson | Export JSON | JSON exportieren | 14 / 14 |
| DataGrid.Filter | Filter | Filter | 14 / 14 |
| DataGrid.FilterColumn | Filter {0} | {0} filtern | 14 / 14 |
| DataGrid.Filters | Filters | Filter | 14 / 14 |
| DataGrid.FitToContent | Fit to content | An Inhalt anpassen | 14 / 14 |
| DataGrid.Global | Global | Global | 14 / 14 |
| DataGrid.GroupPanelPlaceholder | Drag a Groupable column header here, or use the dropdown | Spaltenkopf hierher ziehen oder Dropdown verwenden | 14 / 14 |
| DataGrid.Hide | Hide | Ausblenden | 14 / 14 |
| DataGrid.Items | items | Einträge | 14 / 14 |
| DataGrid.ItemsCount | {0} items | {0} Einträge | 14 / 14 |
| DataGrid.ItemsCount.One | {0} item | {0} Eintrag | 14 / 14 |
| DataGrid.ItemsCount.Other | {0} items | {0} Einträge | 14 / 14 |
| DataGrid.LayoutName | Layout name | Layoutname | 14 / 14 |
| DataGrid.Layouts | Layouts | Layouts | 14 / 14 |
| DataGrid.Loading | Loading… | Wird geladen… | 14 / 14 |
| DataGrid.MoveDown | Move down | Nach unten | 14 / 14 |
| DataGrid.MoveLeft | Move left | Nach links verschieben | 14 / 14 |
| DataGrid.MoveRight | Move right | Nach rechts verschieben | 14 / 14 |
| DataGrid.MoveUp | Move up | Nach oben | 14 / 14 |
| DataGrid.NewLayout | New layout | Neues Layout | 14 / 14 |
| DataGrid.NoData | No data available | Keine Daten vorhanden | 14 / 14 |
| DataGrid.NoDataFiltered | No rows match the current filters | Keine Zeilen entsprechen den aktuellen Filtern | 14 / 14 |
| DataGrid.NoSavedLayouts | No saved layouts yet. | Noch keine gespeicherten Layouts. | 14 / 14 |
| DataGrid.Personal | Personal | Persönlich | 14 / 14 |
| DataGrid.PinColumn | Pin column | Spalte anheften | 14 / 14 |
| DataGrid.PinLeft | Pin to left | Links anheften | 14 / 14 |
| DataGrid.PinRight | Pin to right | Rechts anheften | 14 / 14 |
| DataGrid.RemoveGrouping | Remove grouping | Gruppierung entfernen | 14 / 14 |
| DataGrid.Rename | Rename | Umbenennen | 14 / 14 |
| DataGrid.ResetLayout | Reset layout | Layout zurücksetzen | 14 / 14 |
| DataGrid.ResizeColumn | Resize column (use arrow keys, double-click to auto-fit) | Spaltenbreite ändern (Pfeiltasten, Doppelklick für Auto-Anpassung) | 14 / 14 |
| DataGrid.Retry | Retry | Erneut versuchen | 14 / 14 |
| DataGrid.RowReorderUnavailable | Row reordering isn't available while grouped or virtualized | Zeilen können bei Gruppierung oder Virtualisierung nicht umsortiert werden | 14 / 14 |
| DataGrid.Save | Save | Speichern | 14 / 14 |
| DataGrid.SaveCurrentLayout | Save current layout… | Aktuelles Layout speichern… | 14 / 14 |
| DataGrid.SaveLayout | Save layout | Layout speichern | 14 / 14 |
| DataGrid.SearchPlaceholder | Search… | Suchen… | 14 / 14 |
| DataGrid.SelectAllRows | Select all rows | Alle Zeilen auswählen | 14 / 14 |
| DataGrid.SelectRow | Select row {0} | Zeile {0} auswählen | 14 / 14 |
| DataGrid.Show | Show | Einblenden | 14 / 14 |
| DataGrid.SortAscending | Sort ascending | Aufsteigend sortieren | 14 / 14 |
| DataGrid.SortDescending | Sort descending | Absteigend sortieren | 14 / 14 |
| DataGrid.SystemDefault | System default | Systemstandard | 14 / 14 |
| DataGrid.ToggleColumns | Toggle columns | Spalten ein-/ausblenden | 14 / 14 |
| DataGrid.Unpin | Unpin | Lösen | 14 / 14 |
| DatePicker.InvalidDate | Invalid date | Ungültiges Datum | 3 / 14 |
| DatePicker.MultipleSelected | {0} selected | {0} ausgewählt | 3 / 14 |
| DatePicker.OpenCalendar | Open calendar | Kalender öffnen | 3 / 14 |
| DatePicker.Placeholder | Pick a date | Datum wählen | 14 / 14 |
| DateRange.From | From | Von | 14 / 14 |
| DateRange.Placeholder | Pick a date range | Zeitraum wählen | 14 / 14 |
| DateRange.To | To | Bis | 14 / 14 |
| DateTimePicker.ClearDate | Clear date | Datum löschen | 14 / 14 |
| DateTimePicker.OpenCalendar | Open calendar | Kalender öffnen | 3 / 14 |
| DateTimePicker.Placeholder | Select date and time | Datum und Uhrzeit wählen | 14 / 14 |
| DateTimePicker.TimeLabel | Time | Uhrzeit | 14 / 14 |
| Dialog.Cancel | Cancel | Abbrechen | 14 / 14 |
| Dialog.Close | Close | Schließen | 14 / 14 |
| Dialog.Confirm | Confirm | Bestätigen | 14 / 14 |
| Dialog.No | No | Nein | 14 / 14 |
| Dialog.Ok | OK | OK | 14 / 14 |
| Dialog.Yes | Yes | Ja | 14 / 14 |
| Dock.ApplicationDock | Application Dock | Anwendungs-Dock | 3 / 14 |
| Editor.AiActions | AI actions | KI-Aktionen | 8 / 14 |
| Editor.AiFixGrammar | Fix grammar | Grammatik korrigieren | 8 / 14 |
| Editor.AiImproveWriting | Improve writing | Schreibstil verbessern | 8 / 14 |
| Editor.AiMakeLonger | Make longer | Verlängern | 8 / 14 |
| Editor.AiMakeShorter | Make shorter | Kürzen | 8 / 14 |
| Editor.AiSummarize | Summarize | Zusammenfassen | 8 / 14 |
| Editor.AiTranslate | Translate | Übersetzen | 8 / 14 |
| Editor.Apply | Apply | Anwenden | 8 / 14 |
| Editor.Bold | Bold | Fett | 8 / 14 |
| Editor.BulletList | Bullet list | Aufzählung | 8 / 14 |
| Editor.Cancel | Cancel | Abbrechen | 8 / 14 |
| Editor.ClearFormatting | Clear formatting | Formatierung entfernen | 8 / 14 |
| Editor.CodeBlock | Code block | Codeblock | 8 / 14 |
Showing the first 200 of 641 matches; narrow the filter to see the rest.
See also
- Culture & Localized Formatting — date/number/currency formatting and per-component
Cultureoverrides - RTL Support — right-to-left layout