Finding strings with the editor filters
A real project quickly grows to dozens of forms and frames, a handful of data modules, string catalogs, and the Snippets roots, with thousands of translatable properties under them. Scrolling the tree and the grid stops working at that size. The Translations tab of the editor therefore has two independent text filters, one for each pane, plus a status filter and two visibility switches on the grid. Use the form filter to find where a string lives, such as a form, a frame, or a snippet group. Use the list filter to find which strings you need inside that selection: by property name, by source text, or by an existing translation. Combined with the status filter, they answer the questions translators actually ask. Examples: "which strings on the order forms still need German?" and "where did we translate Save as Speichern?"
How the Translations tab is organized
The tab is a master/detail view. The tree on the left holds the gathered roots (Forms, DataModules, Snippets, NumberSnippets) and, under them, each form, data module, and snippet group. The grid on the right lists the translatable strings of the node selected in the tree, including everything below it. Select a single form to see only its strings. Select a root to see every string under that root.
Each grid row has five columns:
| Column | Holds |
|---|---|
| Property | The path to the string, such as btnSave.Text. A string catalog row adds the entry's Name key, so catalog items are easy to tell apart. |
| Action | Include or Ignore. |
| Status | The translation status for the target language: New, Proposed, Approved, Rejected or Outdated. |
| Source | The text in the source (default) language. |
| Target | The translation in the language selected in the Language box. |
Both filters act on what is shown. They never change, include, or ignore anything, so you can type and clear them freely.
The form filter (tree)
The Form filter box above the tree narrows the tree to nodes whose name contains the text you type. Matching is case-insensitive, and the text may appear anywhere in the name. The tree updates as you type. Use it to jump to one module in a large project, or to bring up a snippet group:
Order → FormOrders, FormOrderDetails, FrameOrderLines, ...
Sales. → the Sales.* snippet group
Clear the box to show the full tree again.
Searching the grid: name, source, and translation
The List filter box above the grid narrows the rows of the current selection. A row is kept when the text matches any of three columns:
- the Property path (the component and property name),
- the Source text,
- the Target translation in the selected language.
Because the translation is part of the match, you can search in either language. Type an English word to find every place it is used, or type a translated word to find where a translation was used, for example to make a terminology change consistently. Matching is case-insensitive.
Plain text and wildcards
Plain text matches anywhere in a column. Include * (any run of characters) or ? (exactly one character) to anchor the pattern yourself. As soon as a wildcard is present, the pattern must match the whole cell:
cancel → any cell containing "cancel": btnCancel.Text, "Cancel order", ...
btn* → cells that start with "btn"
*.Hint → properties that end in ".Hint"
?ave → "Save", "Wave", ... (exactly four characters)
Expressions for one column
For a precise query, type an expression that addresses grid columns by index: Cells[0] to Cells[4], in the order of the table above. Combine conditions with AND and OR, and use LIKE with % as the wildcard. The expression is used exactly as typed:
Cells[0] LIKE '%.Hint' → only Hint properties
Cells[3] LIKE '%order%' AND Cells[4] = '' → source mentions "order", no translation yet
Cells[4] LIKE '%Speichern%' → where "Speichern" is used as a translation
An expression is recognized by the Cells[ it contains. Anything else is treated as plain or wildcard text.
Narrowing by status and hidden rows
Next to the list filter, the Status box limits the grid to one translation status for the selected language: New, Proposed, Approved, Rejected or Outdated. Choose All to turn it off. Two check boxes control rows that are normally hidden:
| Switch | Shows |
|---|---|
| Show empty | Properties whose source text is empty. |
| Show ignored | Properties marked Ignore, plus obsolete entries that no longer exist in the application. |
All of these filters apply together. The text filter, the status filter, and the switches narrow the same grid, so each one refines the others.
Putting it together: a review pass
The filters are most useful in combination. A typical review of one module looks like this:
- Type the module name in the Form filter, for example
Order, and select the form. - Pick the target language in the Language box.
- Set Status to Proposed to see what the AI translation produced and what still needs a human decision.
- Narrow further with the List filter, for example
*.Hintto review hints separately from captions. - Multi-select the rows, then right-click and choose Approve selected (or Reject selected).
To check terminology instead, select the Forms root, leave Status on All, and type the translated term in the List filter. Every form that uses it is listed in one grid.
Common pitfalls
- The grid shows only the tree selection. If the list filter finds nothing, check that the right node, or a root, is selected in the tree. The list filter never searches outside it.
- A wildcard turns a "contains" search into a whole-cell match.
savefinds "Save order", butsav?does not, because the pattern has to cover the entire cell. Add*around it (*sav?*). - The Target match uses the selected language. Searching for a French word while the Language box shows German finds nothing. Switch the language first.
- Hidden rows stay hidden. Ignored and empty properties are excluded before the text filter runs. Enable Show ignored or Show empty if you are looking for one of those.