Przeglądaj centrum pomocy

Translate software strings and email templates

Opiekun: Vitalii VlasiukCo-founder

App strings and email templates aren’t documents — they’re tables of keyed strings. Transept imports them that way: every row keeps its key, its context, and its character limit, and the export puts translations back into the file you uploaded.

Na tej stronie

Which strings files can I import?

Drop the file in the dropzone or the upload dialog, the same as any document. Each string becomes its own block, keyed by its id — that key is what the export uses to put every translation back where it came from.

  • CSV columns are recognized by their headers: key, id, or Klaviyo’s block_id; source or default (or the first language column); language codes or names for targets; context, location, and character limit for the extras.
  • Region-qualified language columns are understood as written — es-MX, en-GB, fr-CA, pt_BR all land on the right language. A column that looks like a language code but isn’t one Transept knows is reported at import rather than skipped, so a typo can’t quietly cost you a language.
  • Context and character-limit columns aren’t decoration — the context reaches the AI as translator guidance, and the limit is enforced with an automatic shorten-and-retry.
Strings file formats Transept imports, and what each maps to.
FormatTypically fromWhat Transept reads
CSV (.csv)Email platforms (Braze, Klaviyo), spreadsheets, TMS exportsA key column, a source column, one column per language, plus optional context and character-limit columns
gettext PO (.po)Software localization (web frameworks, desktop apps)msgid/msgctxt as the key, translator comments as context, plural forms, the file’s language header
XLIFF 1.2 (.xlf, .xliff)CAT tools and TMS platformsEach trans-unit’s key (resname) and note, the file’s language pair
Transept Strings (.tstrings.json)Transept’s own keyed format, for pipelines and the APIEverything above, plus groups and ICU plurals

What happens to translations already in the file?

They arrive as finished work, not as raw material. A filled language cell in a CSV, a non-empty msgstr in a PO file, or a filled target in an XLIFF lands as that string’s active translation — no re-translation, no words billed — and every imported pair is added to your Translation Memory, so it starts informing new translations immediately.

One deliberate exception: PO entries flagged fuzzy are drafts by gettext’s own rules, so Transept imports them as untranslated rather than promoting a machine guess to reviewed work. When you translate one and export, the fuzzy flag is cleared along with the filled msgstr.

How do placeholders like {{promo_code}} survive translation?

Template tokens — Liquid tags like {{first_name}} or {% if %}, printf conversions like %s or %(count)d — are masked before the AI ever sees the text: the model gets an opaque marker it can’t translate, reorder into oblivion, or drop silently. After every reply, Transept counts the markers against the source and repairs or rejects any answer that lost one. The token text itself is restored verbatim.

The same protection applies to uploaded HTML, text, or markdown files that contain Liquid-style tokens or Mailchimp merge tags like *|FNAME|* — an email template pasted out of your platform translates with every placeholder intact, automatically. Fallback text inside a tag is the exception, and deliberately so: the friend in {{ first_name | default:"friend" }} is what every recipient without a first name reads, so it is translated while the tag around it is not.

Templates whose whole localization lives in tags or conditionals — Braze translation tags, Mailchimp language blocks — have their own import path. See email templates from Braze and Mailchimp.

How do I review a strings document?

A strings document adds a Strings button in the editor header. It opens a grid — one row per string, with its key, source, and translation side by side — that you can filter by key or text, edit inline (click a cell, type, press Enter), and leave through the per-row arrow, which jumps to that exact block in the full editor when a string needs the heavier tools: AI rewrites, comments, version history.

Character limits from the file show as a live counter under each translation cell, so an over-long string is visible while you type, not after the export bounces.

How do I get the translated file back out?

Two entries appear in the export menu for strings documents, alongside the usual formats:

  • Original file, translated — your uploaded CSV, PO, or XLIFF with translations filled into its own cells and entries. Everything else — column order, comments, formatting, even quoting quirks — is byte-for-byte what you uploaded, so the file loads straight back into the system it came from.
  • Strings file (keyed) — Transept’s .tstrings.json with every language’s translations keyed by string id, in one file. This is the shape for pipelines and scripts that re-import by key.
  • The TMX, XLIFF, and CSV entries under Translation data also key their rows by string id for strings documents, so a CAT tool round-trip keeps identities intact.

Can one file produce many languages at once?

Yes. A CSV with several language columns imports as one document per language, grouped — the columns become language versions, pre-filled cells and all. Translate the gaps with one workflow run across the whole group, then export once: the original-file export fills every language column of your CSV in a single download.

Doing this headlessly — upload, fan out, translate, re-export from a script — is what the API is for.

Częste pytania

Can I import a Braze or other ESP translations CSV directly?

Yes. An ESP translations export — a key column plus one column per language — is exactly the CSV shape Transept reads. Columns map by their headers, existing translations arrive as finished work, and the export fills the same file for upload back into the platform.

What happens to fuzzy entries in my PO file?

They import as untranslated. gettext marks an entry fuzzy to say “this translation is a guess, don’t ship it”, and Transept honors that instead of promoting the guess. Translate the entry in Transept and the export writes the new msgstr and removes the fuzzy flag.

My XLIFF has formatting tags inside the source text — will it import?

Not yet. Trans-units whose source contains inline markup tags are rejected by name at import, with an itemized list, rather than imported with the tags garbled. Plain-text trans-units — the common case for UI strings — import fine.

Can I export my whole Translation Memory?

Yes. The Memory panel in the editor sidebar has an Export button next to Import — it downloads everything your account can see as a TMX file that any CAT tool reads. What you brought in or built up, you can take out.

Does importing a strings file cost words?

No. Importing is free, and translations already in the file are seeded free too. Words are spent only when Transept translates a string for you.

Nadal potrzebna pomoc? Warto zapytać Literess w aplikacji lub napisać na adres [email protected].