Localization
- 4 minutes to read
DevExpress .NET MAUI Controls ship with localizable resources for UI elements, such as button captions, menu items, error messages, and dialog boxes. The localizable lines that we use in our controls are stored in the localization strings. These localization strings are grouped into resource files by language.
Localize Controls: Use Predefined Resource Files
DevExpress .NET MAUI Controls include predefined resource files that contain localization strings for the following languages:
- English (default language) (Download this resource file)
- German (Download this resource file)
- French (Download this resource file)
The out-of-the-box resource files are also included in the DevExpress .NET MAUI Project Templates.
These predefined localization files are applied to your application when you change the interface language on your device and restart the application. Refer to the following example to see it in action:
If you need to translate your application’s UI to other languages, or you need to change certain translations, see the rest of this article. The section below describes how you can create your own localization resource file or change translations in code.
Localization Basics
Localization strings are identified by enumeration values. To localize a certain message, you need to associate one of those values with your translation.
The following table lists supported controls and their localization enumerations:
Control | Localization Enumeration |
---|---|
DXCollectionView | CollectionViewStringId |
DataGridView | GridStringId |
Editors | EditorStringId |
Scheduler | SchedulerStringId |
PdfViewer | PdfViewerStringId |
You can use Project Resources or implement a custom String Loader to localize DevExpress .NET MAUI Controls.
Localize Controls: Add Localization Resource Files
Create a project resource file and add localization strings you want to change. You can also create multiple resource files for each language your application should support. In this case, the names of these localization resources should contain culture names. For example, the application uses the myResourceFile.es.resx
file when your device’s interface language is set to Spanish.
The example project below contains a custom language’s resource file (DevExpressMaui.pt.resx).
Change a Default Language’s Resource
Follow the steps below to override a default language’s localization strings.
- Create a folder that stores your localization files or use the project’s
Resources
default folder (used in this topic). Right-click the folder and select the Add->New Item… command to add the file to the project.
Select the Resources File (.resx), name it, and click Add.
Add your translated resources to this file.
Each resource has a name, value, and comment field.
The resource’s Name should identify a localization string as
EnumName.EnumValue
. The enumerators that identify localization strings are listed in the previous section.The resource’s Value is a translated string you want to display in the UI.
In your application’s static constructor, create a ResourceStringLoader instance and pass the resource file name as a parameter. Then, assign this instance to the Localizer.StringLoader property.
public partial class App : Application { public App() { Localizer.StringLoader = new ResourceStringLoader(SchedulerExample.Resources.myResourceFile.ResourceManager); this.InitializeComponent(); } }
Alternatively, in step 2 you can name your project resource file
DevExpressMaui.resx
and set the UseDevExpress(MauiAppBuilder, Boolean) constructor’suseLocalization
parameter totrue
:using DevExpress.Maui; namespace SchedulerExample; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseDevExpress(useLocalization: true) .UseMauiApp<App>() // ... return builder.Build(); } }
Localize Controls: Use a Custom String Loader
You can implement a Localizer.IStringLoader interface to use a custom localization mechanism in your application.
The following code snippet creates a custom localization rule. In this case, the application uses the specified SchedulerStringId.AppointmentEdit_NewAppointmentTitle resource value regardless of the system language.
public class MyStringLoader : Localizer.IStringLoader {
public bool TryGetString(string key, out string value) {
if (key == "SchedulerStringId.AppointmentEdit_NewAppointmentTitle") {
value = "Novo Compromisso";
return true;
}
value = null;
return false;
}
}
public partial class App : Application {
public App() {
Localizer.StringLoader = new MyStringLoader();
this.InitializeComponent();
}
}