DeepSeek OmegaT Plugin

DeepSeek OmegaT Plugin adds DeepSeek AI as a machine translation (MT) engine inside OmegaT, the free computer-assisted translation tool. It connects to the OpenAI-compatible DeepSeek Chat Completions API and brings a set of AI-assisted workflow features: glossary awareness, context continuity, auto-mode, and an automated self-review pass.

Version: 1.6.2 · Author: XIA ZIXIN · License: GPL · Source on GitHub

Features

  • DeepSeek MT engine — registers a DeepSeek translation engine in OmegaT’s machine translation settings.
  • Model selection — deepseek-v4-flash (fast, cheap) or deepseek-v4-pro (more refined), pick from a dropdown.
  • Temperature control — slider 0.0–2.0, plus a Dynamic Temperature toggle that lets the API auto-adjust.
  • Glossary support — reads your OmegaT project glossaries and passes matching entries to the AI as hints (Reference mode) or as strict rules (Strict mode).
  • Context segments — optionally sends surrounding segments (above/below, up to 3) so translations stay consistent in tone and narrative flow.
  • Auto-insert — automatically fills the target segment with the translation, no Ctrl+M needed.
  • Auto-confirm — additionally commits the translation and advances to the next untranslated segment.
  • Auto-glossary — the AI suggests key terminology pairs with optional usage notes; entries are saved to deepseek_auto_glossary.txt.
  • Self-review agent — a second AI pass reviews each translation for tag preservation, glossary consistency, accuracy, and fluency, correcting errors automatically.
  • Work tags — identify the source work to the AI: source author, title, tags, and labels are saved to deepseek_tags.txt in the project folder and included in every prompt (edit via the Additional tags… button in the MT settings dialog).
  • Hotkey toggle — Ctrl+Shift+M turns auto-mode on/off from anywhere.
  • ⚡ AUTO indicator — persistent status-bar indicator shows when auto-mode is active.
  • “DeepSeek Function” menu — quick access to all features from OmegaT’s menu bar, no settings digging required.

Requirements

Installation

Build from source

Clone the repository and build with Gradle:

git clone https://github.com/xiazixin/deepseek-omegat-plugin
cd deepseek-omegat-plugin
./gradlew build   # Windows: gradlew.bat build

The plugin JAR is written to build/libs/.

Install into OmegaT

  1. Copy the generated JAR into OmegaT’s plugin directory (Plugins folder next to the OmegaT installation).
  2. Restart OmegaT.
  3. Open Options → Machine Translation, enable DeepSeek, and configure it (see below).

Configuration

Open Options → Machine Translation → DeepSeek to configure the engine. The API key is stored securely in OmegaT’s credential store.

SettingDefaultDescription
API key(none)Your DeepSeek API key, stored in OmegaT credentials
Modeldeepseek-flashdeepseek-flash (V4.1 Flash — latest, faster, cheaper) or deepseek-v4-pro (V4 Pro — being retired; the API routes it to V4.1 Flash after 2026-09-14)
ReasoningOffSlider below the model selector, Faster ↔ Smarter: off / minimal / low / medium / high / extra high / maximum. Sent as "reasoning": {"effort": …}; the stops collapse onto the 4 API modes — off→none, minimal/low→low, medium/high→high, extra high/maximum→max. Also applies to the self-review pass.
Temperature0.3Slider 0.0–2.0 in 0.1 steps. Fades (greys out) when Dynamic Temperature is on
Dynamic TemperatureOffLets the API auto-adjust temperature; the slider is ignored
Glossary modeNoneNone — disabled · Reference — entries are followed by default; the AI may override one only when using it literally would cause a factual, grammatical, or stylistic error (e.g. keeps 白金色 as “platinum color” even with 金色 → gold color in the glossary) — never for preference or variety · Strict — entries must be used exactly
Context segments0Number of surrounding segments (above and below) sent as context. 0 = disabled, up to 3
Context char limit400Max characters per context segment before truncation: 200 / 400 / 600 / 800 / 1000 / No limit

System property overrides

Advanced users can override settings with Java system properties (useful for scripting or managed deployments):

  • deepseek.api.key — API key (takes precedence over the stored credential)
  • deepseek.api.model — model name
  • deepseek.api.url — API base URL (default https://api.deepseek.com)

Auto Mode

Auto mode is the plugin’s hands-free translation workflow:

  1. In the settings dialog, tick Auto-insert (and optionally Auto-confirm to also commit and advance).
  2. Press Ctrl+Shift+M — or use the DeepSeek Function → ⚡ Toggle Auto Mode menu item — to switch auto-mode on.
  3. The ⚡ AUTO indicator appears in the status bar while active.

The hotkey is a master toggle: it only switches auto-mode on/off and never changes your settings. The checkboxes define what auto-mode does; the hotkey controls whether it’s active.

Safety rails:

  • Auto-insert never overwrites an existing translation — it only fills empty target segments.
  • Auto-mode is stopped with Ctrl+Shift+M — the earlier “auto-stop on manual click” behaviour was removed in 1.5.3 because it caused editor re-entrancy problems.
  • Auto-mode state persists across OmegaT restarts (the indicator restores itself).

Glossary Support

With glossary mode set to Reference or Strict, the plugin reads standard OmegaT glossary files (.txt, .csv, .tab, .utf8) from your project’s glossary folder. Each line is tab-separated:

source term → target term → comment (optional)

Only entries whose source term actually appears in the current segment are included in the prompt (up to 20, sorted by specificity — longer matches first). In Reference mode the glossary entries are followed by default — the AI may deviate only when using an entry literally would cause a factual, grammatical, or stylistic error (a compound word containing a glossary term must not be split), never for preference or variety; in Strict mode the glossary translations are mandatory.

Auto-glossary

When enabled, the AI appends a [GLOSSARY] block to its response suggesting non-obvious domain terms in source = target ;; usage note format. The plugin parses it, deduplicates against existing entries, and appends them to deepseek_auto_glossary.txt in your project’s glossary folder — ready for OmegaT to pick up as real glossary entries. The glossary block is stripped from the translation text itself.

Context Segments

When set to a value greater than 0, the plugin includes up to N segments above and below the current segment as context in the system prompt. This helps the AI:

  • Maintain consistent tone and style across sentences
  • Understand narrative flow (especially for novel/creative translation)
  • Produce more natural transitions between segments

Segments above include both the source text and the user’s actual stored translation from OmegaT (shown as SRC → TRG). This means if you manually edit a translation, the AI sees your corrected version — not its own raw output. It falls back to the plugin’s cached output if no stored translation exists yet.

Context segments are truncated to the configured character limit (200–1000, or no limit). Adjust based on your typical segment size — higher values for paragraph-level segmentation, lower for sentence-level.

Self-Review Agent

When enabled, each translation goes through a second API pass that checks for:

  1. Tag preservation — all tags, placeholders, and formatting codes must match the source exactly
  2. Glossary consistency — glossary entries must be followed
  3. Accuracy — faithful meaning, no omissions or additions
  4. Fluency — natural reading in the target language

The reviewer runs at a lower temperature (0.2) for precision and is instructed to be conservative — it only fixes what is clearly wrong, never rephrases for style alone. If the review pass fails or returns empty, the original translation is kept.

Known Issues

Context segments + ellipsis segments

When Context segments is set greater than 0 and the current source segment consists only of punctuation/ellipsis (e.g. ......), there is a small chance the API will return translations for the next few segments instead of the current one — the model can misidentify the ellipsis as a scene break or continuation marker.

Workaround: temporarily set Context segments to 0 when translating isolated punctuation segments, or manually correct the output after translation.

Changelog

1.6.2

  • New: DeepSeek V4.1 Flash model — deepseek-flash is now the default and the retired deepseek-v4-flash was removed from the selector. deepseek-v4-pro remains selectable, but DeepSeek is sunsetting it — requests are routed to V4.1 Flash after 2026-09-14

1.6.1

  • New: Work tags — an Additional tags… button in the MT settings dialog opens an editor (source author, title, tags, generic labels); it writes deepseek_tags.txt into the project folder and injects the tags into every translation prompt
  • New: Reasoning slider — Faster ↔ Smarter stops off / minimal / low / medium / high / extra high / maximum (default off), sent as "reasoning": {"effort": …} and collapsed onto the four API modes; applies to the self-review pass too

1.6.0

  • New: DeepSeek top menu — a dedicated top-level menu in the OmegaT menu bar for additional plugin functions
  • New: Raw response log — menu toggle that appends every raw API response body (untouched JSON) to deepseek_raw.log in the OmegaT configuration folder; the same menu offers open and clear
  • New: Current prompts viewer — shows the most recent request sent to the API (parameters, system prompt, user message) with real line breaks in a scrollable dialog
  • Changed: Reference glossary mode — entries are now followed by default; the AI may override one only for a factual, grammatical, or stylistic error, never for preference or variety
  • Fixed: Auto-glossary dedup — now checks every glossary file in the project’s glossary folder (not just deepseek_auto_glossary.txt), re-reads them on each save, and synchronizes across concurrent translation threads

1.5.3

  • Fixed: Editor freeze — translationCache (an access-ordered LinkedHashMap) was not thread-safe; concurrent access corrupted its internal list and could loop forever. Now wrapped with Collections.synchronizedMap()
  • Changed: Hotkey debouncing — Ctrl+Shift+M ignores OS auto-repeat and enforces a 400 ms minimum between toggles
  • Removed: Auto-stop on manual click — the entry-listener state machine caused editor re-entrancy issues; use Ctrl+Shift+M to stop auto-mode instead

1.5.2

  • Fixed: Cached translation insertion — toggling auto-mode on inserts the already-generated MT result straight from cache (no redundant API call)
  • Fixed: Auto-confirm throttle — advances are spaced at least 600 ms apart with a javax.swing.Timer, preventing editor flooding
  • Changed: Simplified architecture — removed the entry-listener and state machine that caused re-entrancy issues on some OmegaT versions

1.5.1

  • Fixed: commitAndDeactivate() + nextUntranslatedEntry() for correct auto-confirm advancement
  • Fixed: removed double commitAndDeactivate() that caused auto-mode to cancel after advancing
  • Fixed: glossary file encoding switched to UTF-8 to prevent ???? corruption

1.5.0

  • New: Auto-glossary — AI suggests terminology pairs with optional ;; comment usage notes
  • New: Self-review agent — second API pass for quality checking
  • New: ⚡ AUTO status indicator
  • New: Auto-stop on manual navigation (entry-number matching, no time window)
  • New: Glossary deduplication across sessions
  • Changed: Ctrl+Shift+M is now a master toggle that doesn’t change individual settings

1.4.x

  • Configurable context character limit (200–1000 / No limit) instead of hardcoded 200
  • Context segments — surrounding segments sent to the AI for narrative continuity
  • Stored-translation awareness — context above respects user edits
  • Glossary mode selector — None / Reference / Strict, with comments passed to the AI
  • Dynamic temperature toggle, temperature slider (default 0.3), model dropdown

1.0.0

Initial release with DeepSeek API integration.

Documentation page generated from the plugin’s README and source (v1.5.1).