Translation Memory

Translation Memory (TM) is a core feature of Translato that stores every translation pair (source text → target text) and intelligently reuses them across your project. It helps translators work faster, maintain consistency, and avoid re-translating the same content.


Table of Contents


What Is Translation Memory?

Think of Translation Memory as a database of all the translations your team has ever done. Every time someone saves a translation, the system remembers it. The next time a similar phrase appears, it automatically suggests the previous translation — saving time and keeping your content consistent.

Example:

  • A translator translates "Submit Order" → "Bestellung absenden" (German)
  • Later, another key has the source text "Submit Order" or something similar like "Submit Your Order"
  • TM instantly suggests the previous translation with a match score

How It Works

1. Auto-Capture

Every translation saved in the editor is automatically stored in the TM database. This happens silently in the background — translators don't need to do anything special.

2. Smart Matching

When a translator opens a key to edit, the system searches the TM using two methods:

  • Exact Match — If the source text is identical (ignoring minor whitespace and capitalization differences), TM finds it instantly using a hash-based lookup
  • Fuzzy Match — If the source text is similar but not identical, TM uses PostgreSQL's trigram similarity to find close matches and shows them with a percentage score (e.g., 85% match)

Matches below 50% similarity are not shown to avoid noise.

3. One-Click Apply

When TM suggestions appear in the translation editor, the translator can click "Apply" to instantly use a suggestion. The system tracks how often each TM entry is reused, helping identify the most reliable translations.


Using the TM Management Page

Navigate to any project and click Translation Memory in the project menu. The page has two tabs:

Overview Tab

  • Stats cards — Total entries, languages covered, times reused, entries added this week
  • Language breakdown — Visual chart showing how many TM entries exist per language
  • Populate button — One-click backfill that imports all existing project translations into TM (useful when first setting up TM or after a large import)

Entries Tab

  • Search — Find entries by source or target text
  • Filter by language — Show only entries for a specific language
  • Sort — By date, usage count, or alphabetically
  • Edit — Click the edit icon on any entry to modify the target text inline
  • Delete — Remove individual entries or select multiple for bulk deletion
  • Import — Upload a CSV or TMX file to add entries
  • Export — Download all entries as CSV or TMX for backup or use in other tools

TM Suggestions in the Editor

When you click on a translation key in the language editor, TM suggestions appear automatically if matches are found. They are shown above the AI translation option and include:

  • Match score — How closely the source text matches (100% = exact, 50-99% = fuzzy)
  • Source and target preview — The matched text pair
  • Apply button — Click to insert the suggestion into your editor

TM suggestions are prioritised over AI suggestions because they come from your own team's verified translations.


Import and Export

CSV Format

The CSV format uses these columns:

source_text,target_text,language_code,usage_count,created_at
"Hello","Hallo","de",5,"2026-01-15T10:30:00.000Z"
"Goodbye","Tschüss","de",12,"2026-01-10T08:00:00.000Z"

When importing, the minimum required columns are source_text, target_text, and language_code. Other columns are optional.

TMX Format

TMX (Translation Memory eXchange) is the industry-standard format for sharing translation memories between tools. Translato supports TMX 1.4.


Populating TM from Existing Translations

If your project already has translations before TM was set up, use the Populate from Existing button on the Overview tab. This scans all current translations in your project and imports them into the TM database.

The populate process:

  1. Identifies the project's source language
  2. Finds all target-language translations
  3. Pairs each target translation with its source-language counterpart
  4. Creates TM entries

This operation can only run once at a time per project.


How TM Entries Are Created

TM entries are created automatically from three sources:

SourceWhen
Editor saveA translator saves or updates a translation in the language editor
Manual populateThe "Populate from Existing" button is clicked
CSV/TMX importFiles are uploaded via the Entries tab

Deduplication

TM uses a SHA-256 hash of the normalised source text combined with the language and project to prevent duplicates. Normalization means:

  • Leading/trailing whitespace is trimmed
  • Multiple spaces are collapsed to one
  • Text is lowercased
  • Unicode is normalised to NFC form

API Reference

All TM endpoints are under /api/projects/:projectId/tm/ and require authentication.

MethodPathDescription
GET/suggestGet TM suggestions for a source string
GET/statsGet TM statistics for the project
GET/entriesBrowse and search TM entries (paginated)
POST/applyMark a suggestion as applied (increments usage count)
POST/populateBackfill TM from existing project translations
POST/bulk-deleteSoft-delete multiple TM entries
PATCH/:entryIdEdit a TM entry's target text
DELETE/:entryIdSoft-delete a single TM entry
GET/export/csvExport TM entries as CSV
GET/export/tmxExport TM entries as TMX
POST/import/csvImport TM entries from CSV
POST/import/tmxImport TM entries from TMX

Technical Details

  • Database: PostgreSQL with a dedicated TranslationMemory table
  • Exact matching: SHA-256 hash index for instant O(1) lookups
  • Fuzzy matching: PostgreSQL pg_trgm extension with GIN index for trigram similarity searches
  • Soft deletes: Entries are marked as inactive (isActive = false) rather than permanently removed
  • Non-blocking: All TM operations during translation saves are fire-and-forget
  • Concurrency safe: The populate endpoint prevents concurrent runs via an in-memory lock per project