Thank you for helping make someone’s app feel native!
.ini files - a .lang file IS a type of .ini file.MyScript-[en].lang would be saved asMyScript-[fr].lang👉 It’s easiest to use OneLocale_FindLangID to find tags by partial language name - for example, entering “spa” or “esp” below lists all Spanish dialects:

=’.%percent signs%[section heading]&’ sets the access key (underlined letter, e.g. ‘Save &As...’).
\n’ forces a new line\z’ is a comment and will never appear to the user
%’, write ‘\%’.&’) sets the underlined Accesss Key (see below)
To show ‘&’ without the underline, use ‘&&’ (e.g. ‘Cats && Dogs)&’) sets the Accesss Key (e.g. ‘&Cancel’)
\t) separates menu text and menu Accelerator (hotkey)
(e.g. ‘&Save \t Ctrl+S’)
See Microsoft’s docs for details of both Access Keys and Accelerators.
&) sets the Access Key
(e.g. ‘Save &As...’)
Watch out for translated strings becoming too long to display properly. Experiment. Run the app and see how it looks. Try to re-word your translation to make it fit in the space available.
As a rule of thumb, messages should be no more than ~120% longer than the base language, although this depends on how much room the developer gave you.
If your shortened translation sacrifices important meaning, you can explain further in the element’s Tooltip, if it has one.
Multi-line sections look different because they don’t have ‘=’ on every line like normal sections. Multi-line text should be labeled with a comment - something like: ; • Entire section should be translated - but many times they aren’t.
%variables%)\t’.\n’ if you need an empty line on output.\w at the start or end of lineQuestions? Open an issue on the GitHub repo – we’re friendly.
👉 Just give the entire .lang file to Grok / Claude / ChatGPT and say: Translate this AutoHotkey OneLocale language file to German. Never touch keys or %variables% and attach a copy of these Notes.
A good AI will give you a near-perfect file in seconds. You only need to skim for tone.
(Yes, this is how most translations will happen from now on.) 😀
– the OneLocale team (and Grok says hi)
Back to README