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) ordeepseek-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.txtin 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
- OmegaT 6.0 or newer
- A DeepSeek API key
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
- Copy the generated JAR into OmegaT’s plugin directory (
Pluginsfolder next to the OmegaT installation). - Restart OmegaT.
- 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.
| Setting | Default | Description |
|---|---|---|
| API key | (none) | Your DeepSeek API key, stored in OmegaT credentials |
| Model | deepseek-flash | deepseek-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) |
| Reasoning | Off | Slider 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. |
| Temperature | 0.3 | Slider 0.0–2.0 in 0.1 steps. Fades (greys out) when Dynamic Temperature is on |
| Dynamic Temperature | Off | Lets the API auto-adjust temperature; the slider is ignored |
| Glossary mode | None | None — 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 segments | 0 | Number of surrounding segments (above and below) sent as context. 0 = disabled, up to 3 |
| Context char limit | 400 | Max 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 namedeepseek.api.url— API base URL (defaulthttps://api.deepseek.com)
Auto Mode
Auto mode is the plugin’s hands-free translation workflow:
- In the settings dialog, tick Auto-insert (and optionally Auto-confirm to also commit and advance).
- Press Ctrl+Shift+M — or use the DeepSeek Function → ⚡ Toggle Auto Mode menu item — to switch auto-mode on.
- 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:
- Tag preservation — all tags, placeholders, and formatting codes must match the source exactly
- Glossary consistency — glossary entries must be followed
- Accuracy — faithful meaning, no omissions or additions
- 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-flashis now the default and the retireddeepseek-v4-flashwas removed from the selector.deepseek-v4-proremains 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.txtinto 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.login 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-orderedLinkedHashMap) was not thread-safe; concurrent access corrupted its internal list and could loop forever. Now wrapped withCollections.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
;; commentusage 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+Mis 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).