Capability
Live translation
A learner who speaks Vietnamese, Arabic or Turkish should read menus, explanations and meanings in that language, not in English. Kielo translates what a learner reads, in the background, with checks on what comes back.

Two languages, kept apart
Kielo separates the learning language, which is what someone studies (Finnish or Swedish), from the support language, which is what the app speaks to them: menus, explanations and meanings.
Three kinds of text reach a learner, and each has its own path:
Fixed app text
Buttons, headings, errors. Written once, translated per language, and downloaded by the app as a bundle for the learner's language. If a key is missing the app falls back to its built-in default.
Dynamic content
Article titles, scene text, lesson text, notifications. Written in English, translated when it is read, and stored so the next learner gets it instantly.
Learning-engine content
Exercise prompts, options, hints, explanations. Generated in English, then translated into the learner's language when a session is served.
One system, with a review trail
Every stored translation is tied to the exact English source it came from. If the English changes, the old translation stops matching and is made again. Each translation also carries a status: machine, pending review, approved or override. Editors can correct text in the admin app, and the sync that fills in missing translations never overwrites one that was edited there.
A translation that fails, or a provider outage, is never cached as if it were a translation. Unavailable results are not stored, so a bad moment does not stay in front of learners.
Guards against wrong-language output
Language models sometimes answer in the wrong language, echo the source, or mix languages. Kielo checks translations before it keeps them:
- Output that reads as Finnish or Swedish, or as a third language, is rejected. Related language groups that share vocabulary (for example Ukrainian and Russian) are exempt from the wrong-language test.
- Words that are meant to stay in the target language, such as a quoted Finnish word inside an explanation, are left out of the check, so correct translations are not thrown away.
- An echo of the source, or a result that lacks the letters of the target script (Chinese, Korean, Cyrillic and so on), counts as a failed translation.
- Cached translations are checked again when they are read, not only when they are written.
- Grammar terms use the support language's own term where it has one, and otherwise the Finnish name of the case.
Learners should not wait
Long lists, such as a roadmap, a deck or the captions of a video, used to be translated in full before the first screen appeared. Kielo now translates the first window inline and prepares the rest in the background; the app asks again shortly after and the rest fills in. A background planner decides what to prepare first, with a fast lane for text a learner is waiting on, a lane for text predicted to be needed, and a sweep for backfill.
Waiting on a live translation is measured per route in production, and shrinking it further is active engineering work, not a finished claim.