# AI Translation All in One with Translation Memory

> Every approved translation is remembered: exact and near matches are answered from memory before a token is spent, with TMX in and out.

- **What it is:** Every approved translation is remembered: exact and near matches are answered from memory before a token is spent, with TMX in and out.
- **For:** Website
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 178 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_translation_memory
- **Manual:** https://docs.bambooforge.dev/bambooforge_translation_memory/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_translation_memory.action_bf_translate_memory
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_translation_memory
- **Manual last updated:** 2026-10-15

---
# AI Translation All in One with Translation Memory

An add-on for **BambooForge AI Translate** (17.0). Every approved
translation is remembered; exact and near matches are answered from
memory before the engine is asked; TMX in and out; a counter of what
was saved.

## How the memory fills

Nothing to do. When a batch **applies** an item - after review, or
straight away on an auto-approved batch - the pair *source → value* is
written to *AI Translate ▸ Translation Memory* for that language pair,
with where it came from (model, field, batch) and when. A later
approval of the same source **replaces** the earlier one: the
reviewer's newest decision is the memory. An item that was itself
answered from memory and applied unchanged writes nothing new.

Pairs where the translation equals the source (`OK → OK`) are not
stored: they would never help.

## How a batch uses it

On the batch, **Use translation memory** (default on) and **Near-match
threshold (%)** (default 90). When the batch is translated, *before*
anything is sent to the engine and *after* the glossary:

- an item whose source is already in memory for this language pair
  (compared ignoring case and extra spaces) is proposed from memory,
  note *memory*, **Match % = 100**, and is not sent;
- otherwise the most similar remembered source is looked for; if it is
  at least *threshold* % similar (`difflib` ratio) the remembered
  translation is proposed with note *memory, 96 % match - check* and
  **Match %** in orange - the reviewer fixes three characters instead of
  reading a fresh sentence;
- everything else goes to the engine as before.

The batch shows **Answered from memory** and **Characters not sent**.
Set the threshold to 100 for exact matches only; the glossary always
wins over the memory.

## TMX

*AI Translate ▸ Import TMX*: pick the file and the language pair; every
`<tu>` carrying both languages (by Odoo code `de_DE` or ISO `de`)
is remembered with origin *TMX import*; duplicates update the existing
entry. *Translation Memory ▸ select rows ▸ Action ▸ Export TMX* (or no
selection = everything) downloads TMX 1.4 with `xml:lang` per
segment.

## Technical notes

- Uses AI Translate 1.1.0's `bf.translate.job._local_proposals(items,
  glossary)` and `bf.translate.item._after_applied()` hooks; the
  engine code is untouched.
- Exact lookup is an indexed equality on a normalised key; near-match
  is Python `difflib` over the pair's pool with a length pre-filter -
  fine for tens of thousands of entries, not a search engine.
- Entries are per company; the unique key is (normalised source,
  from, to, company).
- Community only. No Enterprise module, no external service.

## How we make sure it works

Before every release, **20 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- A memory hit applied unchanged does not duplicate.
- An archived entry is not used.
- Rejected and failed items teach nothing.
- Identity pairs are not stored.
- The wrong language pair is never used.

The complete list is in the source you receive.

## Install

1. Copy `bambooforge_translation_memory` into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
2. Install **AI Translation Suite: Translation Memory & TMX**.
3. Open **Translation Memory** - its menus are Import TMX.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Web; translate ai (BambooForge) must be installed first app. No extra Python package.

****Where does it show up?****

Under the **Translation Memory** menu (Import TMX).

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.
