Core concepts
Everything in Ownlate hangs off five objects. Once you know how they nest, the rest of the product — the API, the CLI, the editor — reads the same way.
workspace├── members, glossary, translation memory, QA rules, API keys, billing└── project ├── translation file │ └── segment ── translation (one per target language) ├── release ── OTA distribution ├── task, integration, SDK tokenWorkspace
Section titled “Workspace”The workspace is the tenant. It is created with a name and a billing currency, it owns a plan and a subscription, and nothing inside it is visible from any other workspace.
These live at workspace level and are shared by every project inside it:
- Members and their access levels
- Glossary — terminology, per source language
- Translation memory — every approved translation, reusable everywhere
- QA rules — custom regular expressions checked on submission
- API keys — programmatic access, scoped to your own permissions
- Audit log — an append-only record of significant actions
- Integrations — those with workspace scope, which apply to every project
A workspace is identified by a UUID. Almost every REST path starts with it, and almost every GraphQL operation takes it as workspaceId.
Project
Section titled “Project”A project is one product, or one part of one, and holds the strings for it.
| Field | Meaning |
|---|---|
sourceLanguage | The language your developers write in. One per project, fixed after creation. |
targetLanguages | What it is translated into. Add more at any time. |
visibility | private, or public — a public project’s progress and translations are readable without signing in. |
status | active or archived. Archiving hides a project without destroying it; deleting an archived project is permanent. |
ossApprovedAt | Set when the platform approves a public project as open — see below. |
Open projects
Section titled “Open projects”A public project can additionally be approved by the platform as open. An open project appears in the public catalogue, and anyone signed in — not only members — may leave translation suggestions on it. Suggestions change nothing until a reviewer accepts them. See The translation workflow.
Translation file
Section titled “Translation file”A file is the unit you upload and export. It has a name, a folder path and a format, and the two together identify it: locales/en.json is one file, mobile/en.json is another.
The format is detected from the extension when you upload, and decides how the content is parsed into segments. Renaming a folder rewrites the path of every file under it in one operation.
Segment
Section titled “Segment”A segment is one translatable string in one file — the level everything else works at.
| Field | Meaning |
|---|---|
key | The identifier your code uses, e.g. home.title. Nested JSON and YAML keys are flattened with dots. |
sourceText | The text in the project’s source language. |
isPlural | Whether the segment carries plural forms rather than a single string. |
translatable | Set to false for a key that must never be translated — a brand name, a format token. Untranslatable segments are skipped by pre-translation and exported with their source text. |
contextUrl, screenshotUrl | Where the string appears, for translators who cannot see it otherwise. |
Changing a segment’s source text marks every translation of it outdated — the string a translator approved no longer describes what the product says.
Translation
Section titled “Translation”Each segment carries one translation per target language, and each translation has a text (or a map of plural forms) and a status.
| Status | Meaning |
|---|---|
untranslated | Nothing has been written yet |
draft | Saved as work in progress, not submitted |
needs_review | Submitted, waiting for a reviewer |
reviewed | A reviewer has checked it, waiting for approval |
approved | Signed off — this is what gets exported and released |
in_progress | Was rejected and is being reworked |
outdated | The source text changed after this translation was written |
Plural forms are stored as a map of the CLDR categories the target language actually uses — zero, one, two, few, many, other.
Translation memory
Section titled “Translation memory”Every time a translation is approved, the pair (source text → target text) is written to the workspace translation memory. The memory is scored with a Levenshtein similarity from 0 to 100, where 100 is an exact match, and it is what powers editor suggestions and pre-translation. See Translation memory.
Release and distribution
Section titled “Release and distribution”A release is a frozen snapshot of the approved translations of a project, numbered with an incrementing version. A project also has one OTA distribution — a permanent access key that serves the latest release, or any earlier version, over HTTP without authentication. See Releases and OTA.
What a word is
Section titled “What a word is”Plans are metered in words, and a word is a whitespace-separated token of the translation text. The counter moves when a translation is written, and the workspace total can be recomputed from the approved translations at any time. See Plans and billing.