RiaLingo
Overview

What RiaLingo covers

RiaLingo is the in-house localization platform replacing Lokalise across Euronet. It is live, multi-tenant, and in use — 11 capability areas and 135 REST endpoints today, with Ria as the first tenant.

This page is the answer to “what does it actually do”. For request and response detail, see the API reference.

How content reaches an app

Bundle — for a cold start

Publishing a release builds an immutable bundle into object storage. Point a CDN at the bucket and the app reads it without ever calling RiaLingo.

Delta — to stay current

Ask what changed since your last sync and apply it locally. Copy updates ship without an app release, and there is still no service call per lookup.

Most clients want both. Webhooks tell you something moved; the delta endpoint tells you what.

Delta sync guide

What is built

11 areas, all in use today

Content and editing

Shipped

Where strings live and how they change

A project holds keys; each key carries one translation per enabled language, with a live value and a separate unpublished draft. Keys live on a branch, so a feature can change copy without touching what is live. Plural forms, per-platform filenames, character limits, tags and custom fields are all first-class, and a Cmd+K palette searches projects and keys from anywhere.

Translation, AI and reuse

Shipped

Getting a first draft without typing it

AI pre-translate runs through Anthropic or Google Translate, chosen per tenant or per project, with cost tracked per project. Translation memory reuses what has already been approved, and the glossary pins wording that must not drift, including per-corridor overrides for regulated markets. Find-and-replace works across a whole project with a preview before it commits.

Working together in real time

Shipped

Two people in the same project, live

A WebSocket sidecar broadcasts presence and edits, so you can see who else is in a project and what they are touching rather than discovering a collision afterwards. Threaded comments sit on individual keys and translations, screenshots give translators the surrounding UI, and a Figma integration matches a frame to the keys it renders. Stale edit sessions are swept hourly so a crashed browser does not leave a ghost.

Assigning and tracking work

Shipped

Who is doing what, and what is late

Work is assigned as tasks against a set of keys and a target language, with due dates and an automatic overdue sweep. Contributors get an in-app notification inbox, and a drafts view collects everything staged but not yet published so a reviewer can clear it in one pass.

Review, compliance and audit

Shipped

Nothing ships unreviewed, everything is recorded

Drafts stay out of exports until published. QA gates check placeholder preservation, ICU plural shape and length before a value can ship. Regulated keys route through a compliance approval step. Every state change lands in an append-only audit trail that can be filtered and exported to CSV for regulatory submission, with a tenant-configurable retention policy under which compliance events are never pruned.

Getting content into an app

Shipped

Bundles for a cold start, deltas to stay current

A release groups keys and publishes them; an export builds an immutable bundle into object storage that a CDN can front, so nothing hits the app at read time. Exports can run on a schedule and releases can auto-publish at a target time. For updates without a full app release, the delta endpoint answers what changed since a client last synced, values and removals both, behind one opaque token.

Getting content in, and migrating off Lokalise

Shipped

Import without churning history

Smart import reconciles an uploaded bundle or file set against existing keys instead of blindly overwriting, so a re-import does not churn history or reset review state. An external-source import can run against a live upstream, including a dry-run mode that reports the exact diff before writing anything, which is how a Lokalise cutover gets rehearsed safely. Imports can run on a schedule, and snapshots roll a project back to a known point.

Analytics and progress

Shipped

What it costs and how far along you are

Tenant analytics chart monthly volume, base and processed word counts, and task throughput, with a breakdown by project and language. Per-project statistics show completion by language, so you can see what is actually blocking a release rather than guessing. AI spend is tracked per project.

Integrations and automation

Shipped

Wiring RiaLingo into everything else

Webhooks post an HMAC-signed body when content changes, with rotatable signing secrets and retry with backoff, so a listener knows to pull. A Go CLI covers the same REST surface for scripts and CI. API tokens inherit the issuing user permissions intersected with their declared scopes, so an integration is never more privileged than the person who created it.

Tenancy, identity and access

Shipped

Each entity isolated, each person scoped

Each Euronet entity gets an isolated space with its own OIDC SSO, its own users and its own audit log, enforced in Postgres by row-level security rather than by application code alone. Permissions are resource:action strings bound to roles, and a role can be scoped to a single project. Team groups model an org unit once and attach it to projects, instead of re-assigning people one at a time.

Platform operations

Shipped

Standing up a new entity end to end

Platform admins provision a tenant through a two-half onboarding wizard: the platform side sets up the entity, then a signed continuation link hands the rest to the tenant for SSO, first admin, SMTP, branding, first project and AI provider. Platform roles are graded, so an onboarding viewer cannot change anything. Health and worker queue depth are exposed for monitoring, and platform actions are audited separately from tenant ones.

What is not built yet

Stated plainly, on purpose

If something you need is here rather than above, say so — it is a scoping conversation, not a no.

Second and third tenants

Planned

Rollout, not new capability

Onboarding epay and Dandelion as tenants alongside Ria. The multi-tenant machinery is built and in daily use; this is the rollout work, not new engineering.

Optimisation and scale

Planned

Not started

Routing each language pair to the engine that handles it best, predictive delivery estimates, and localising the RiaLingo interface itself. None of this has been started.

Questions people ask

Short answers
Does it replace Lokalise completely?
It covers what we use Lokalise for: projects, keys and multi-language editing, import and bundle export with release management, translation memory, glossary, AI pre-translate, QA review, compliance approval, drafts, tasks, comments, screenshots, branching, webhooks, a REST API and a CLI. Lokalise features we never adopted are not reimplemented. If you need one, ask rather than assume the answer is no.
How do we actually migrate off Lokalise?
Import can run against an external source with a dry-run mode that reports the exact diff, added, changed and removed, before anything is written. You rehearse the cutover, read the diff, then run it for real. Smart import reconciles against existing keys, so a repeat run does not churn history or reset review state.
Why build rather than keep paying?
Lokalise costs $19.8k a year and we are already at the seat cap, so every new PM, designer or ops person pushes the price up. Its machine translation is Google-only, which is why Tagalog comes back empty every cycle and gets filled in by hand.
Can two people work in the same project at once?
Yes. A WebSocket layer broadcasts presence and edits, so you see who else is in a project and what they are editing rather than finding out after a collision. Sessions left behind by a crashed browser are swept automatically.
Is it actually running?
Yes. It is live at rialingo.cloud, tracked under OM-19228, multi-tenant, with Ria as the first tenant and the functional review running with Acquisition.
How does my app get the strings?
Either fetch a published bundle from object storage through a CDN, or sync incrementally against the delta endpoint and keep a local copy. Most clients want both: the bundle for a cold start, the delta to stay current without shipping an app release.
What does it give compliance?
An append-only audit trail of every state change, filterable and exportable to CSV for regulatory submission. Regulated keys route through an explicit approval step, per-corridor glossary wording can be pinned, and retention is configurable per tenant, with compliance events never pruned.
How do I get access?
Each entity signs in through its own OIDC SSO once configured. While SSO is still being wired up for a tenant, accounts are created manually. Ask in the RiaLingo channel and you will be set up.
What is not built yet?
Onboarding epay and Dandelion as further tenants is planned but not done. Engine routing per language pair, predictive delivery estimates and localising the RiaLingo interface are not started. Everything else listed above is shipped and in use.