A newer version of this page is available. Switch to the current version.

Localizing WinForms Controls via Localizer Objects

  • 5 minutes to read

Each DevExpress component or library has a specific Localizer class that provides localized strings (see the table below). The Data Grid control, for example, has the GridLocalizer class.

NOTE

Important: Not all strings can be translated via Localizer classes. Some components contain form resources (e.g., the XtraReports Search dialog), which must be translated via satellite assemblies, so localization via resources is recommended.

Localization Process

Use custom localizers to provide translated strings for localization as follows.

  • Create a descendant of a corresponding Localizer class and override either the GetLocalizedString method (which returns strings for specific string resource identifiers) or PopulateStringTable method (which adds strings for specified resource identifiers).
  • To use this localizer, assign an instance of this class to the static Active property of the localizer class you inherited from.

The following table lists Localizer classes and Resource String enumerations for DevExpress WinForms products.

Product Localizer Class Resource String Enumeration Namespace
Chart Control ChartLocalizer ChartStringId DevExpress.XtraCharts.Localization
Data Access Library DataAccessUILocalizer DataAccessUIStringId DevExpress.DataAccess.UI.Localization
Data Grid GridLocalizer GridStringId DevExpress.XtraGrid.Localization
Diagrams DiagramControlLocalizer DevExpress.Diagram.Core.Localization.DiagramControlStringId DevExpress.Diagram.Core.Localization
Editors and Controls Localizer StringId DevExpress.XtraEditors.Controls
Gauges GaugesCoreLocalizer GaugesCoreStringId DevExpress.XtraGauges.Core.Localization
Layout and Data Layout Controls LayoutLocalizer LayoutStringId DevExpress.XtraLayout.Localization
Navigation Bar NavBarLocalizer NavBarStringId DevExpress.XtraNavBar
PDF Viewer PdfCoreLocalizer / XtraPdfViewerLocalizer PdfCoreStringId / XtraPdfViewerStringId DevExpress.Pdf.Localization / DevExpress.XtraPdfViewer.Localization
Pivot Grid PivotGridLocalizer PivotGridStringId DevExpress.XtraPivotGrid.Localization
Printing-Exporting PreviewLocalizer PreviewStringId DevExpress.XtraPrinting.Localization
Reporting ReportLocalizer ReportStringId DevExpress.XtraReports.Localization
Ribbon, Bars and Menu BarLocalizer BarString DevExpress.XtraBars.Localization
Rich Text Editor XtraRichEditLocalizer, RichEditExtensionsLocalizer / OfficeLocalizer XtraRichEditStringId, RichEditExtensionsStringId / OfficeStringId DevExpress.XtraRichEdit.Localization / DevExpress.Office.Localization
Scheduler SchedulerLocalizer SchedulerStringId DevExpress.XtraScheduler.Localization
Snap SnapLocalizer / SnapExtensionsLocalizer/ OfficeLocalizer SnapStringId / SnapExtensionsStringId / OfficeStringId DevExpress.Snap.Localization / DevExpress.Snap.Extensions.Localization / DevExpress.Office.Localization
Spell Checker SpellCheckerLocalizer SpellCheckerStringId DevExpress.XtraSpellChecker.Localization
Spreadsheet XtraSpreadsheetLocalizer, XtraSpreadsheetFunctionNameLocalizer, XtraSpreadsheetCellErrorNameLocalizer / OfficeLocalizer XtraSpreadsheetStringId / XtraSpreadsheetFunctionNameStringId / XtraSpreadsheetCellErrorNameStringId / OfficeStringId DevExpress.XtraSpreadsheet.Localization / DevExpress.Office.Localization
Tree List TreeListLocalizer TreeListStringId DevExpress.XtraTreeList.Localization
Vertical Grid VGridLocalizer VGridStringId DevExpress.XtraVerticalGrid.Localization
Data Filtering FilterUIElementResXLocalizer FilterUIElementLocalizerStringId DevExpress.Ultils.Filtering.Internal
XtraDialog DialogsLocalizer DialogsStringId DevExpress.Dialogs.Core.Localization

Example

The following example demonstrates how to localize certain built-in strings in the DevExpress Data Grid UI and Editors UI into German by creating custom localizers.

The localized grid interface (at runtime) is shown below.

cdLocalization_2

First, create descendants of the GridLocalizer and Localizer classes to provide custom translations for a subset of localizable strings.


using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Localization;

public class GermanGridLocalizer : GridLocalizer {
    public override string Language { get { return "Deutsch"; } }
    public override string GetLocalizedString(GridStringId id) {
        string ret = "";
        switch (id) {
            // ... 
            case GridStringId.GridGroupPanelText: return "Ziehen Sie eine Spaltenüberschrift in diesen Bereich, um nach dieser zu gruppieren";
            case GridStringId.MenuColumnClearSorting: return "Sortierung entfernen";
            case GridStringId.MenuGroupPanelHide: return "Gruppierungsfeld ausblenden";
            case GridStringId.MenuColumnRemoveColumn: return "Spalte entfernen";
            case GridStringId.MenuColumnFilterEditor: return "Filter &bearbeiten";
            case GridStringId.MenuColumnFindFilterShow: return "Suche einblenden";
            case GridStringId.MenuColumnAutoFilterRowShow: return "Zeige Auto Filterzeile";
            case GridStringId.MenuColumnSortAscending: return "Aufsteigend sortieren";
            case GridStringId.MenuColumnSortDescending: return "Absteigend sortieren";
            case GridStringId.MenuColumnGroup: return "Gruppieren fur dieses Feld";
            case GridStringId.MenuColumnUnGroup: return "Gruppierung aufheben";
            case GridStringId.MenuColumnColumnCustomization: return "Laufzeit benutzerdefinierte Spalte";
            case GridStringId.MenuColumnBestFit: return "Optimale Breite";
            case GridStringId.MenuColumnFilter: return "Kann gruppieren";
            case GridStringId.MenuColumnClearFilter: return "Filter aufheben";
            case GridStringId.MenuColumnBestFitAllColumns: return "Optimale Breite (alle Spalten)";
            // ... 
            default:
                ret = base.GetLocalizedString(id);
                break;
        }
        return ret;
    }
}

public class GermanEditorsLocalizer : Localizer {
   public override string Language { get { return "Deutsch"; }}
   public override string GetLocalizedString(StringId id) {
      switch(id) {
         // ...
         case StringId.NavigatorTextStringFormat: return "Zeile {0} von {1}";
         case StringId.PictureEditMenuCut: return "Ausschneiden";
         case StringId.PictureEditMenuCopy: return "Kopieren";
         case StringId.PictureEditMenuPaste: return "Einfugen";
         case StringId.PictureEditMenuDelete: return "Loschen";
         case StringId.PictureEditMenuLoad: return "Laden";
         case StringId.PictureEditMenuSave: return "Speichern";
         // ...
      }
      return "";
   }
}

To use these Localizers, assign instances of GermanGridLocalizer and GermanEditorsLocalizer classes to their ancestor's Active property.

public Form1() {
    GridLocalizer.Active = new GermanGridLocalizer();
    Localizer.Active = new GermanEditorsLocalizer();
    InitializeComponent();
}