Localization
Translate every UI string the grid surfaces — filter dropdowns, filter row prompts, sort buttons, clear buttons — without patching resource strings or rebuilding the package.
Overview
Grid.Options.Localization exposes a property for every user-visible string the grid produces. The defaults are English. Override individual properties to translate them. Each property has a stored function that only writes it to the form file when it differs from the English default, so the DFM stays small.
Quick example
// French
Grid.Options.Localization.FilterAllText := '(Tous)';
Grid.Options.Localization.FilterEmptyText := '(Vide)';
Grid.Options.Localization.FilterNotEmptyText := '(Non vide)';
Grid.Options.Localization.FilterEditPrompt := 'Filtrer';
Grid.Options.Localization.FilterClearButtonHint := 'Effacer le filtre';
Grid.Options.Localization.FilterTypeButtonHint := 'Type de filtre';
Grid.Options.Localization.FilterTypeContainsText := 'Contient';
Grid.Options.Localization.FilterTypeEndsWithText := 'Se termine par';
Grid.Options.Localization.FilterTypeEqualText := 'Égal à';
Grid.Options.Localization.FilterTypeNotEqualText := 'Différent de';
Grid.Options.Localization.FilterTypeStartsWithText := 'Commence par';
Grid.Options.Localization.FilterTypeLargerThanText := 'Supérieur à';
Grid.Options.Localization.FilterTypeLargerOrEqualThanText := 'Supérieur ou égal à';
Grid.Options.Localization.FilterTypeSmallerThanText := 'Inférieur à';
Grid.Options.Localization.FilterTypeSmallerOrEqualThanText:= 'Inférieur ou égal à';
Grid.Options.Localization.FilterSortButtonAscendingText := 'Trier croissant';
Grid.Options.Localization.FilterSortButtonDescendingText := 'Trier décroissant';
Localizable strings
Filter dropdown / popup
| Property | Default |
|---|---|
FilterAllText |
(All) |
FilterEmptyText |
(Empty) |
FilterNotEmptyText |
(Not empty) |
Grid.Options.Localization.FilterAllText := '(All)';
Grid.Options.Localization.FilterEmptyText := '(Empty)';
Grid.Options.Localization.FilterNotEmptyText := '(Not empty)';
Filter row
| Property | Default |
|---|---|
FilterEditPrompt |
Filter |
FilterClearButtonHint |
Clear filter |
FilterTypeButtonHint |
Filter type |
Grid.Options.Localization.FilterEditPrompt := 'Filter';
Grid.Options.Localization.FilterClearButtonHint := 'Clear filter';
Grid.Options.Localization.FilterTypeButtonHint := 'Filter type';
Filter operator labels
| Property | Default |
|---|---|
FilterTypeContainsText |
Contains |
FilterTypeEndsWithText |
Ends with |
FilterTypeStartsWithText |
Starts with |
FilterTypeEqualText |
Equal |
FilterTypeNotEqualText |
Not equal |
FilterTypeLargerThanText |
Larger than |
FilterTypeLargerOrEqualThanText |
Larger or equal than |
FilterTypeSmallerThanText |
Smaller than |
FilterTypeSmallerOrEqualThanText |
Smaller or equal than |
Grid.Options.Localization.FilterTypeContainsText := 'Contains';
Grid.Options.Localization.FilterTypeEndsWithText := 'Ends with';
Grid.Options.Localization.FilterTypeStartsWithText := 'Starts with';
Grid.Options.Localization.FilterTypeEqualText := 'Equal';
Grid.Options.Localization.FilterTypeNotEqualText := 'Not equal';
Grid.Options.Localization.FilterTypeLargerThanText := 'Larger than';
Grid.Options.Localization.FilterTypeLargerOrEqualThanText := 'Larger or equal than';
Grid.Options.Localization.FilterTypeSmallerThanText := 'Smaller than';
Grid.Options.Localization.FilterTypeSmallerOrEqualThanText := 'Smaller or equal than';
Filter sort buttons
| Property | Default |
|---|---|
FilterSortButtonAscendingText |
Sort ascending |
FilterSortButtonDescendingText |
Sort descending |
Grid.Options.Localization.FilterSortButtonAscendingText := 'Sort ascending';
Grid.Options.Localization.FilterSortButtonDescendingText := 'Sort descending';
Wiring it to your i18n system
The whole Localization object is a regular TPersistent. You can copy it from a translated template at runtime:
procedure ApplyTranslation(Grid: TTMSFNCDataGrid; const LangCode: string);
begin
case LangCode of
'fr': Grid.Options.Localization.Assign(FrenchLocalization);
'de': Grid.Options.Localization.Assign(GermanLocalization);
'nl': Grid.Options.Localization.Assign(DutchLocalization);
end;
end;
Where FrenchLocalization is a pre-populated TTMSFNCDataGridLocalizationOptions instance you build once at startup.
Find / replace dialogs
The find and replace dialogs are TMS FNC components (TTMSFNCFindDialog, TTMSFNCReplaceDialog) with their own localization. To translate their labels, update the dialog instance directly — typically inside OnBeforeShowFindDialog:
procedure TForm1.GridBeforeShowFindDialog(Sender: TObject;
AFindDialog: TTMSFNCFindDialog; var ACanShow: Boolean);
begin
AFindDialog.UILanguage.Caption := 'Rechercher';
AFindDialog.UILanguage.Find := 'Suivant';
AFindDialog.UILanguage.Close := 'Fermer';
AFindDialog.UILanguage.FindWhat := 'Rechercher :';
end;
Columns editor dialog
The columns editor dialog (TTMSFNCDataGridColumnsEditor) has its own Options.UILanguage for translating Visible/Apply/OK/Cancel etc.
Combining localization with i18n infrastructure
Apply all string groups at once from a pre-built object, then reload when the user switches language:
procedure TForm1.ApplyLocale(const LangCode: string);
var
L: TTMSFNCDataGridLocalizationOptions;
begin
L := TTMSFNCDataGridLocalizationOptions.Create;
try
case LangCode of
'fr':
begin
// Filter dropdown
L.FilterAllText := '(Tous)';
L.FilterEmptyText := '(Vide)';
L.FilterNotEmptyText := '(Non vide)';
// Filter row
L.FilterEditPrompt := 'Filtrer';
L.FilterClearButtonHint := 'Effacer';
// Operators
L.FilterTypeContainsText := 'Contient';
L.FilterTypeEqualText := 'Égal à';
L.FilterTypeNotEqualText := 'Différent de';
// Sort buttons
L.FilterSortButtonAscendingText := 'Trier croissant';
L.FilterSortButtonDescendingText := 'Trier décroissant';
end;
end;
Grid.Options.Localization.Assign(L);
finally
L.Free;
end;
end;
Call ApplyLocale on form create and whenever the user picks a new language. Because Localization is a TPersistent, Assign copies all 20+ properties in one call.
Related API
Grid.Options.Localization.*— every filter UI stringTTMSFNCDataGridColumnsEditor.Options.UILanguage— columns editorTTMSFNCFindDialog.UILanguage— find dialog (set insideOnBeforeShowFindDialog)TTMSFNCReplaceDialog.UILanguage— replace dialog
See also
- Filtering — most localizable strings live here.
- Filter row — the filter row uses the
FilterEditPrompt, sort buttons, etc. - Find & replace — separate localization on the dialog instance.