Using Lantern
Lantern is a localization manager: a project holds translation keys, and each key has a value in every language. You edit values in a grid, collaborate, and your apps pull the result through the read API.
Live instance: https://lantern.abyss-inn.ch
1. Account & projects
- Sign up with name, email, and a password (≥ 8 chars), then sign in.
- Create a project from the Projects page (name + optional description). You become its owner.
- Switch between projects with the dropdown in the top bar; click 🏮 Lantern to go back to the list.
Each project has four tabs: Editor, Import / Export, API, Members.
2. Roles
| Action | Owner | Admin | Translator |
|---|---|---|---|
| Edit translations, add keys, comment, mark reviewed | ✅ | ✅ | ✅ |
| Add / delete languages, delete keys | ✅ | ✅ | — |
| Create / revoke API tokens | ✅ | ✅ | — |
| Manage members (invite, change role, remove) | ✅ | — | — |
3. Languages
On the Editor tab, owners/admins add a language by locale code (e.g. en,
fr, de-CH) and a display name. The first language becomes the default. Locale
codes are what the API returns and what your files are named after, so pick the codes
your app expects. Remove a language with the ✕ on its chip (this deletes its values).
4. Keys
Add a key with an optional namespace, a name, and an optional description.
The key's full path is namespace.name (or just name with no namespace) — e.g.
namespace home + name title → home.title.
A key is rejected if its full path already exists, even via a different split (
home+titlecollides with a plainhome.title). Pick one convention.
Use the search box to filter keys; delete a key with the ✕ next to it (owners/admins).
5. The editor grid
Rows are keys, columns are languages. Type a value into a cell — it saves automatically when you leave the field (only if changed).
- Status dot next to each cell: gray = untranslated (empty), green = translated, blue = reviewed. Click a green dot to mark it reviewed; click again to unmark. Editing a reviewed value resets it to translated.
- Completion bars at the top show each language's progress (filled values / total keys), updating live as you type.
- Needs review checkbox filters to keys that have translated-but-not-yet-reviewed values — handy for a reviewer pass.
6. Comments
Each key row has a 💬 button with a count. Open it to read the thread and add a comment — useful for context ("keep under 20 chars", "this is a button label", etc.).
7. Members
On the Members tab the owner can add a member by email (they must already have a Lantern account), set their role to Admin or Translator, change roles later, or remove them.
8. Import / Export
On the Import / Export tab:
- Import
- JSON — merges into one chosen language (handles flat
{"home.title": "..."}and nested{"home": {"title": "..."}}). - CSV / XLSX — a
keycolumn plus one column per locale; merges across languages and auto-creates any missing ones. Blank cells are skipped (won't wipe values).
- JSON — merges into one chosen language (handles flat
- Export
- JSON for one language (flat or nested), or CSV / XLSX covering all.
Import is the bulk way to get keys in; the API (INTEGRATION.md) is the automated way to get translations out into your apps.
9. API tokens
On the API tab, owners/admins create a token (read-only, scoped to that project). The token string is shown once — copy it then. List shows each token's name, prefix, and last-used time; revoke any token to cut off access immediately.
Use the token to pull translations — see INTEGRATION.md.