Skip to content

Getting started

Ownlate keeps the strings of your product in one place: developers push the source file, translators work on it in a web editor, reviewers approve, and the approved result goes back to the code — as a file, over the API, or over the air.

This page walks the whole path once. Every step links to the page that covers it in depth.

  1. Open platform.ownlate.com and sign in.

  2. Create a workspace. It needs a name and a billing currency — the currency decides which payment providers you will be offered later and cannot be changed afterwards.

  3. Everything else — projects, members, glossary, translation memory, integrations, billing — belongs to that workspace and is invisible from any other one.

A new workspace starts on the free plan. See Plans and billing for what each plan allows.

Go to Workspace → Members and invite people by email address. An invite is a one-time link that expires; the person who accepts it joins at the level you picked.

LevelWhat it can do
ownerEverything, including billing and deleting the workspace
adminEverything except deleting the workspace
translatorRead the workspace, write translations, add segments
viewerRead only

Levels are shorthand for a set of permission codes, and the set is editable. See Members and access.

A project is one product, or one part of one. It holds files, segments, releases, tasks and integrations.

Creating it asks for:

  • Name and an optional description.
  • Source language — the language your developers write strings in.
  • Target languages — you can add more at any time.
  • Visibilityprivate, or public so that anyone can read its progress and translations without signing in.

Open the project’s Files tab and upload the source file. Ownlate detects the format from the extension and creates one segment per translatable string.

FormatExtensions
JSON.json
Flutter ARB.arb
YAML.yaml, .yml
gettext.po
Android resources.xml
Apple strings.strings, .stringsdict
XLIFF.xliff, .xlf
CSV.csv
Markdown.md, .mdx

Nested JSON and YAML keys are flattened with dots, so {"home": {"title": "Hi"}} becomes the key home.title. Files live in folders inside the project, and the folder path is part of the file’s identity.

The same upload, done from your machine or your pipeline instead of the browser:

Terminal window
npm install -g @ownlate/cli
ownlate login
ownlate init
ownlate push

Open a target language to enter the editor. For every segment it shows the source text, any context the developer attached, matches from the translation memory, highlighted glossary terms and live QA checks.

A translation moves through statuses:

untranslated → draft → needs_review → reviewed → approved
↑ ↓
in_progress ←── rejected

Saving keeps a draft; submitting sends it for review; a reviewer marks it reviewed and an approver approves it. Every approved translation is written to the workspace translation memory, so the next similar string comes pre-filled. See The translation workflow.

Rather than starting from an empty file, run Pre-translate on a language. It walks the untranslated segments and fills them from the sources you pick, in the order you pick them:

  • Translation memory — an exact match is applied and approved outright; a fuzzy match above your threshold is left as a draft.
  • Machine translation — OpenAI, Anthropic, DeepL, Google, Azure or Mistral through your own key, or the built-in engine if your plan includes it. The result lands in needs_review.

See Translation memory and AI translation.

WayGood for
Export from the Files tabOne file, or every language as a ZIP
ownlate pullWriting translated files back into the repository
Pull requestLetting Ownlate open the PR against your repo itself
Release + OTAApps that fetch translations at runtime instead of shipping them

Exports contain approved translations only, unless you ask for a fallback to the source language.

  • Core concepts — the objects Ownlate is built from, and how they relate.
  • The translation workflow — statuses, review, tasks and suggestions.
  • CLI — the commands your pipeline will run.
  • REST API — everything the browser can do, your code can do too.