Manual

Manual · The book

Languages & translations

Your application in your customer's language — typed as always, filled by the Mac, and what a human translated the machine never touches again.

You work as you always did

You type your captions, button titles and menu entries in your language — the base language, set in the application settings (“This application is written in”). A single-language application needs nothing else: no command, no files, nothing to maintain. Everything on this page is what happens when you want a second language.

Adding a language to the project
Adding a language fills the whole project at once — what is empty, never what a person has written.

One entry per table: Translations

Every table's navigator branch ends with a Translations row (and “Not about a table” has one for menus and loose forms). It opens a table of every text the module says — window titles, captions, placeholders, column titles, tab pages, menu entries, report texts — with one column per language, typeable in place. You never list these texts yourself: the IDE enumerates them from the structure, so the list is always complete and never stale.

Add Language opens a column — added once, it appears in every module. Fill Missing Translations lets the Mac translate what is empty: offline, on your machine, nothing leaves it.

Entries flagged for review after their source text changed
A changed base text turns its translation into a question rather than throwing it away.

Translation as data with a memory

Every entry remembers the base text it was made for, and who made it. That one idea decides everything:

The module for everything that is not about a table
Everything that belongs to no table — menu entries, the window titles of forms that show nothing — has a module of its own.

Sentences in scripts: language.text

In code, Neuridion cannot know which string is for the person's eyes and which is data — where("city", "=", "Hamburg") must never be translated. So a script marks its sentences, and the mark is the whole rule:

messages.alert(language.text("Saved!"));
language.text("Invoice {number} saved", { number: invoice.number })

The string in the code is the base language — no invented key. The IDE finds every marked sentence and lists it under “Not about a table”. Use placeholders instead of concatenation: word order differs per language, and a translation that loses a placeholder is reported as an error before it ships.

Filtering to what a machine filled, so it can be read through
What a machine filled carries a mark and can be listed on its own — so it can be read through rather than trusted.

Building and running

The build sheet has one checkbox per translated language; the footer says honestly what is missing (“12 of 480 entries — the base text shows there”). At run time the application follows the Mac in front of the user, within the languages you ticked, with the base language as the fallback. A missing translation shows the base text — never a blank, never a key. Neuridion's own windows — the backup window, the standard dialogs, every error message — speak nine languages out of the box and follow the same choice.

A built application running in another language
The same application, following its user's Mac. The editor stays English; the language belongs to the running process.
Choosing the languages a build carries
Which languages a build carries is a tick per language, in the project's settings.

What is never translated

The customer's data. Records belong to the person who typed them, in the language they typed them in — translation is for your application's own words, nothing else.