The problem this template solves
If a Clarion application (ABC templates) needs multi-language UI support, there’s essentially no standard way to do it. Either you hand-roll your own translation system and wire it into every window, or you rely on ExtractText from ABUTIL, which gives you no editor, no on-the-fly language switching, and no per-window/per-control overrides.
Rav Translate is a standalone ABC template that adds full runtime translation to an application with almost no work from the developer: no need to manually wrap every control or rewrite existing windows.
What it does
- Automatically translates every window in the application — labels, buttons, list/browse column headers, including the main MDI Frame window (menu) — without a single line of code in the windows themselves.
- Switches the interface language on the fly, no restart needed — already-open windows redraw immediately.
- Provides a built-in translation editor: text search, a “this window only” filter, language selection (languages can be added/removed right from the editor), a “Translations…” button available on any window.
- Supports per-window/per-control overrides — a translation for a specific window and control can override the shared one (example: a label translates as “Name” everywhere, but in one particular column it’s overridden to “Nm.”).
- Translates arbitrary strings and
MESSAGE()calls via an explicit call (Translator.TranslateString) — both the title and the body of the message. - Exports/imports the list of untranslated strings as TSV (2 columns:
RecID+ text, matched strictly byRecID) — hand it to a translator or run it through machine translation and bring it back. - Ships with three ready-to-use Python scripts for batch machine translation (Google Cloud Translate, DeepL), all sharing one CLI interface: export from the application → run the script → import back.
- A hotkey to open the translation editor, configured once, globally, for the whole application.
How it works internally
- The template overrides the standard
TranslatorClassfrom ABUTIL (%TranslatorDataSection/%TranslatorCodeSection) — meaning it works through the stock ABC translation mechanism, not around it. - All the logic (harvesting window text, translation lookup, the editor, export/import) lives in one self-contained MEMBER module (
Rav_Translate.CLW), independent of the rest of the application’s code. It’s wired in through a single application-level Global Extension. - Storage is two TOPSPEED files: the translations themselves (language + window + control + original + translation, including per-window overrides) and a language lookup table. The selected language persists between runs via an INI file.
- Window text is harvested via
PROP:NextField(the standard way to walk a window’s fields) — works the same way for ordinary windows and for the Frame/APPLICATION window with its menu.
Default language
On the very first run of the application (before RAVLANG.INI exists), the interface language comes from a template setting, not a hardcoded value. It’s set in the properties of the Rav Translate global extension (Application Tree → Global Extensions → Rav Translate → global part):
- The “Default language on first run (before RAVLANG.INI exists)” field — enter the language code (
EN,RU, or any other) that should be used the very first time the application runs for an end user. - The default value (if left unchanged) is
EN. - After the first run, the chosen language is written to
RAVLANG.INI, and the application always starts with it from then on — this template setting is no longer used unlessRAVLANG.INIis deleted manually.
Author: Rybnikov A., 2026
Clarion10_EN.zip (14,3 КБ)
School_Rav.zip (3,4 МБ)
Three drop-in Python scripts (Google Cloud Translate, DeepL) that batch machine-translate the strings exported by the Rav Translate Clarion template and hand them straight back for re-import — so you can auto-translate your whole ABC application into a new language in one pass instead of typing every string by hand.
scripts_EN.zip (6,2 КБ)














