Radzen Blazor Components support resource-based localization out of the box. All user-facing text (labels, tooltips, ARIA labels, filter operators, paging text, etc.) can be translated using .NET's standard localization infrastructure.
Pick a language to translate the components below. Radzen Blazor ships with built-in translations for German, French, Spanish, Italian and Japanese. Open the filter menu, the column picker, the group panel and the paging summary on the grid, and the date picker, to see the localized strings update instantly.
Name | Category | Quantity | In stock |
|---|---|---|---|
| Espresso machine | Appliances | 12 | True |
| Office chair | Furniture | 0 | False |
| Wireless mouse | Electronics | 134 | True |
| Notebook | Stationery | 540 | True |
| Standing desk | Furniture | 7 | True |
| 26 | 27 | 28 | 29 | 30 | 31 | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 1 | 2 | 3 | 4 | 5 | 6 |
Every localizable string property in Radzen components falls back to a resource key in RadzenStrings.resx when not explicitly set. The lookup goes through the Localizer class which checks for a custom ILocalizer implementation first, then falls back to the embedded resource file. This means:
ILocalizer or satellite assemblies.
Implement the ILocalizer interface and register it in the DI container to provide translations for all components.
1. Create a class that implements ILocalizer:
using System.Globalization;
using Radzen;
using Radzen.Blazor;
public class CustomLocalizer : ILocalizer
{
// Use a dictionary, database, JSON file, or any other source for translations
private static readonly Dictionary<string, Dictionary<string, string>> Translations = new()
{
["de"] = new()
{
[nameof(RadzenStrings.Pager_FirstPageTitle)] = "Erste Seite",
[nameof(RadzenStrings.Pager_PrevPageTitle)] = "Vorherige Seite",
[nameof(RadzenStrings.Pager_NextPageTitle)] = "Nächste Seite",
[nameof(RadzenStrings.Pager_LastPageTitle)] = "Letzte Seite",
[nameof(RadzenStrings.Pager_PageSizeText)] = "Einträge pro Seite",
[nameof(RadzenStrings.Pager_PagingSummaryFormat)] = "Seite {0} von {1} ({2} Einträge)",
[nameof(RadzenStrings.DataGrid_FilterText)] = "Filtern",
[nameof(RadzenStrings.DataGrid_AndOperatorText)] = "Und",
[nameof(RadzenStrings.DataGrid_OrOperatorText)] = "Oder",
[nameof(RadzenStrings.DataGrid_ApplyFilterText)] = "Übernehmen",
[nameof(RadzenStrings.DataGrid_ClearFilterText)] = "Löschen",
[nameof(RadzenStrings.DataGrid_EqualsText)] = "Gleich",
[nameof(RadzenStrings.DataGrid_ContainsText)] = "Enthält",
[nameof(RadzenStrings.DataGrid_StartsWithText)] = "Beginnt mit",
[nameof(RadzenStrings.DataGrid_EndsWithText)] = "Endet mit",
// ... add more translations as needed
}
};
public string? Get(string key, CultureInfo culture)
{
var lang = culture.TwoLetterISOLanguageName;
if (Translations.TryGetValue(lang, out var strings)
&& strings.TryGetValue(key, out var value))
{
return value;
}
return null; // Fall back to the built-in default
}
}
2. Register it in Program.cs before AddRadzenComponents():
builder.Services.AddScoped<ILocalizer, CustomLocalizer>();
builder.Services.AddRadzenComponents();
You can provide culture-specific .resx files that .NET compiles into satellite assemblies. This is the standard .NET localization mechanism.
1. Create a resource file named RadzenStrings.[culture].resx (e.g. RadzenStrings.de.resx) in your project.
2. Add the translated values using the same resource keys (e.g. Pager_FirstPageTitle, DataGrid_FilterText). You only need to include the keys you want to translate.
3. Configure the resource file in your .csproj to use the Radzen.Blazor.RadzenStrings resource name:
<ItemGroup>
<EmbeddedResource Include="RadzenStrings.de.resx"
LogicalName="Radzen.Blazor.RadzenStrings.de.resources" />
</ItemGroup>
The ResourceManager will automatically load the correct culture at runtime based on CultureInfo.CurrentUICulture.
You can still set localized text directly on individual component instances. This takes the highest priority and overrides both resource files and ILocalizer.
This example shows a German login form using direct parameter values:
Resource keys follow the convention ComponentName_PropertyName. Use nameof(RadzenStrings.Key) for compile-time safety. Below are some common examples:
| Key | Default |
|---|---|
DataGrid_FilterText | Filter |
DataGrid_EqualsText | Equals |
DataGrid_ContainsText | Contains |
DataGrid_StartsWithText | Starts with |
DataGrid_EndsWithText | Ends with |
DataGrid_AndOperatorText | And |
DataGrid_OrOperatorText | Or |
DataGrid_ApplyFilterText | Apply |
DataGrid_ClearFilterText | Clear |
DataGrid_GroupPanelText | Drag a column header here and drop it to group by that column |
DataGrid_ColumnsText | Columns |
DataGrid_ExpandAllTitle | Expand all |
DataGrid_CollapseAllTitle | Collapse all |
| Key | Default |
|---|---|
Pager_FirstPageTitle | First page |
Pager_PrevPageTitle | Previous page |
Pager_NextPageTitle | Next page |
Pager_LastPageTitle | Last page |
Pager_PageSizeText | items per page |
Pager_PagingSummaryFormat | Page {0} of {1} ({2} items) |
All localizable resource keys are defined in RadzenStrings. Use your IDE's autocomplete with nameof(RadzenStrings.) to discover all available keys. The naming convention is ComponentName_PropertyName, for example:
Login_LoginText, Login_UserText, Login_PasswordTextUpload_ChooseText, Upload_DeleteTextDatePicker_ToggleAriaLabel, DatePicker_PrevMonthAriaLabelScheduler_TodayText, Scheduler_NextText, Scheduler_PrevTextColorPicker_HexText, ColorPicker_ButtonTextHtmlEditorBold_Title, HtmlEditorImage_TitleGantt_TodayText, Gantt_FilterTextEach Radzen component resolves the UI culture in this order:
UICulture parameter (if explicitly set).DefaultUICulture cascading value from a parent component.CultureInfo.CurrentUICulture (the thread default).
To set the culture for all components in your app, configure CultureInfo.DefaultThreadCurrentUICulture in Program.cs:
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("de");
When a component renders a localizable string, the value is resolved in this order (highest priority first):
Radzen Blazor Components, © 2018-2026 Radzen.
Source Code licensed under
MIT