Appearance
Translating portal pages
How to serve the same captive portal, WiFi Enterprise or buy panel page in more than one language without keeping a copy of the page per language.
What it does
You design a page once, in the language you write in. When you publish it, Kiwire sends every piece of visible text on the page to your AI model, one line at a time, and stores a translated copy of the whole page for each language you have chosen. A guest whose device asks for one of those languages gets the translated copy; everyone else gets the page exactly as you published it.
Only text is translated: headings, paragraphs, button labels, links, list items, table cells. Images, colours, layout and anything inside the page's own scripts are left alone. Placeholders such as {{mac_address}} or {{topup_credit}} are kept exactly as written, and so are URLs, email addresses, SSIDs and brand names — the model is instructed to leave them alone and Kiwire checks that it did. Text that sits inside an attribute rather than on the page (an input's placeholder hint, an image's alt text) is not translated in this release.
The feature is off for every tenant until you turn it on, and it uses your AI model — the same one the reporting assistant and KAIA use — so it needs a working AI setup first (see below).
Before you start
Open System › Settings › A.I Model and confirm the tenant is on a working credential. Translation runs on the tenant's own key if one is saved there, otherwise on the platform key, and it counts against the same monthly allowance as every other AI feature. The Translations page tells you plainly when it cannot run: AI is switched off for this tenant, No AI key is configured, or The monthly AI token allowance is used up; translations resume next month or with a tenant key. Until that banner is gone, publishing a page translates nothing.
Two permissions control the page. view-portal-translations shows it (Admin, Manager and Viewer roles have it); manage-portal-translations allows changing the settings, ordering translations and editing lines (Admin and Manager).
Turning it on
Portals › Translations. The first card holds the tenant's language settings:
- Automatic translation — the on/off switch. Off, nothing is queued when you publish and guests always get the original page; translations you already have are kept, not deleted, and come back when you switch it on again.
- You write in — the language your pages are written in. Kiwire will not translate into this language, and a guest asking for it gets the original.
- Translate into — tick each language guests should get. The list is English, Bahasa Melayu, Bahasa Indonesia, Español, 中文 (简体), ไทย, Tiếng Việt, العربية, Deutsch and Français.
Save. Nothing is translated yet — translation happens when a page is published (or when you order it from this page, below).
What happens when you publish
Publishing a page in any of the three designers queues one translation per new line per language. A page with 40 lines and two target languages is 80 short jobs, which the platform works through in the background; a page usually fills in within a minute. When the last line lands, Kiwire assembles the translated copy of the page and starts serving it.
Only what changed is sent. A line that already has a translation from the same source text is reused, and a sentence that has been translated once anywhere on your tenant is remembered for 30 days, so republishing a page after a small edit costs a handful of lines, not the whole page. Re-publishing an unchanged page costs nothing.
Until the copy for a language is complete and matches the page you just published, guests asking for that language get the original. That is deliberate: a half-translated page is worse than an untranslated one. You can see the state of each page on the Translations page.
Reading the Translations page
Below the settings, every page from the three designers is listed under its group — Captive portal, WiFi Enterprise, Buy panel — with its publish status, how many translatable lines it has and, for each target language, a coverage chip:
- Green dot, 40/40 — every line is translated and the copy guests receive matches the current published page.
- Amber dot, 31/40 — some lines are translated but the served copy is either incomplete or was built for an earlier version of the page. Guests still get the original for now.
- Grey dot, 0/40 — nothing translated yet.
A red failed badge on a page counts lines the model could not translate acceptably (see When a line fails). Two buttons sit on each row: Translate missing queues only the lines that have no current translation; Re-translate all sends every line again, except lines you have edited by hand, which are never overwritten.
Fixing a line
Click a page name to open its editor: one row per line of text, the original in the first column and one column per target language. Each cell shows the translation and a status — auto (the model's translation, current), edited (yours), stale (translated from an older version of this line), failed or missing.
Type over any cell and press Save to replace the model's wording with your own. That line is marked edited, the page copy for that language is rebuilt straight away, and from then on the line is yours: republishing, Translate missing and Re-translate all all leave it alone. If you later prefer the model's version, back to automatic drops your text and asks for a fresh translation.
The list includes every template, but the lines come from the last published version — a template that has never been published shows no lines, because the designer's unsaved draft is not read.
When a line fails
Occasionally the model returns something Kiwire refuses to use — a translation that added HTML, dropped a placeholder, came back empty, or is wildly longer or shorter than the original. Kiwire also refuses anything that is not valid text. The line is marked failed (hover the status for the reason), and the rest of the page carries on; a page with one failed line still gets its translated copy for the other 39.
Failed lines are retried automatically, first within minutes and then every hour or two, up to eight attempts. Retry failed at the top of the page pushes every failed line back into the queue now. If a line keeps failing, translate it by hand in the editor — an edited line is never retried.
Which language a guest gets
For the captive portal, the language is the one the portal itself is running in: the journey's Language override if set, otherwise the Default language on Captive Portal › Configuration. The guest's browser setting is not consulted. In practice that means one journey (and so one zone) per language, each with its override set, is how you serve Malay in one area and Chinese in another.
For WiFi Enterprise and buy panel pages, which have no language setting of their own, Kiwire reads the language the browser asks for and serves the matching copy if you have chosen that language; ?lang=ms on the page's address forces a language, which is useful for checking a translation.
Guests never see a language picker added by Kiwire; if you want one on the page, build it in the designer and point it at the journeys or ?lang= addresses.
Message templates
Message templates (Portals › Message Template) already carry per-language subject and body fields. With automatic translation on, saving a template fills in any language whose fields you left blank, using the same model and rules; anything you typed into a language field yourself is left as it is.
What it costs
Every line sent to the model is metered in tokens against the tenant's monthly AI allowance, alongside the reporting assistant and KAIA; the A.I Model card on System › Settings shows the cap that applies to you. A typical portal page of 30–60 short lines costs a few thousand tokens per language the first time and almost nothing afterwards, because unchanged lines are not resent and translated sentences are remembered for 30 days. A tenant on its own key pays its provider directly and is not capped by Kiwire.
If the platform key is rate-limited or over quota during a run, the affected lines are retried later rather than lost.
Things to know
- Translation is per published page, not per visit: guests are served a stored copy, so there is no delay and no AI call when a guest opens the portal.
- Synchroweb can switch the feature off for the whole platform. Your settings and translations are kept, and guests get original pages until it is back.
- The model is told to translate what it is given and never to follow instructions found inside the text, and Kiwire checks the output before storing it. Even so, review pages that carry legal wording (terms, consent) in the editor before relying on them.
- Very long lines (over 2,000 characters) and lines with no letters (prices, times, icons) are left untranslated on purpose.