Offline email translation for GNOME Evolution using ArgosTranslate
Tested and verified on Manjaro Linux with GNOME Evolution 3.58.3. Originally forked from costantinoai/evolution-mail-translate, extended and maintained independently. Compatibility with Evolution ≥ 3.56's new EUIManager API was the original motivation — see Changes from upstream.
This Evolution extension adds instant, privacy-preserving email translation directly within GNOME Evolution. Translate foreign language emails to your preferred language with a single click—all processing happens locally on your machine with no data ever leaving your computer.
- One-Click Translation: Translate emails directly from the toolbar, menu, or keyboard shortcut
- Toggle back instantly: Press the shortcut (or click the toolbar button) again to restore the original
- 100% Offline & Private: Uses local translation models (ArgosTranslate), no internet required, no data transmitted
- Toolbar button: Translate icon appears next to Reply/Forward in the mail toolbar
- Custom keyboard shortcut: Default
Alt+Shift+T, fully configurable in Translate Settings - Install-on-Demand: Automatically downloads missing translation models as needed
- HTML Email Support: Preserves formatting, styles, and structure in translated emails
- Auto Language Detection: Automatically detects source language
- 50+ Languages: Supports translation between 50+ language pairs
- GPU Acceleration: Automatically uses CUDA when available for faster translation
For users: Download and install the .deb package from GitHub Releases
# Recommended: lets APT resolve dependencies automatically
sudo apt install ./evolution-translate-extension_1.0.0-1_amd64.deb
# Restart Evolution
killall evolution && evolution &From source (Ubuntu/Debian):
# Install build dependencies
sudo apt install cmake pkg-config evolution-dev evolution-data-server-dev \
python3 python3-venv python3-pip
# Clone and build
git clone https://github.com/MoDD0/moddo-evolution-translator.git
cd evolution-mail-translate
# Build and install to system directories (requires sudo)
./scripts/install-from-source.sh
# Restart Evolution
killall evolution 2>/dev/null || true
evolution &Tested on Manjaro with GNOME Evolution 3.58.3. No
.debpackage — build from source. On Arch-based distros theevolutionpackage already includes development headers, so no separate-devpackage is needed.
# Install build dependencies
sudo pacman -S --needed cmake pkgconf python python-pip
# Clone this fork (has fixes for Evolution >= 3.56)
git clone https://github.com/MoDD0/moddo-evolution-translator.git
cd evolution-mail-translate
# Build and install to system directories (requires sudo)
./scripts/install-from-source.sh
# Restart Evolution
killall evolution 2>/dev/null || true
evolution &Notes:
- Evolution only loads modules from
/usr/lib*/evolution/modules/, so installation requires sudo - The module is installed to
/usr/lib*/evolution/modules/libtranslate-module.so - Python helper scripts are installed to
/usr/share/evolution-translate/translate/ - Python environment and models are per-user: run
evolution-translate-setupto create a venv under~/.local/lib/evolution-translate/venvand install models under~/.local/share/argos-translate/packages/
Uninstall:
# From the repository directory
./scripts/uninstall.shSee USER_GUIDE.md for detailed installation instructions and all available methods.
- Select an email and press
Alt+Shift+T— or click the Translate button in the toolbar - Press the same shortcut (or click the toolbar button) again to toggle back to the original
- Configure settings in
Edit→Translate Settings- Change the target language, translation provider, or keyboard shortcut
See USER_GUIDE.md for complete usage documentation.
- USER_GUIDE.md - Installation, usage, configuration, and troubleshooting
- DEVELOPER_GUIDE.md - Architecture, development, and contribution guidelines
- CHANGELOG.md - Notable changes
Open “Translate Settings” via Edit → Translate Settings.
- Target language: Choose your default translation target
- Provider: Argos Translate (offline) or Google Translate (online)
- Translate shortcut: Customize the keyboard shortcut (default:
Alt+Shift+T). Takes effect after restarting Evolution. - Install models on demand: If enabled, missing Argos models are downloaded automatically the first time a pair is needed
- Python venv: Create and manage your per-user venv with
evolution-translate-setup(installs Python deps and optionally models)
Tip: You can also set environment variables for development overrides:
TRANSLATE_HELPER_PATHto point to a local translate_runner.pyTRANSLATE_PYTHON_BINto point to a specific Python interpreter
- No Data Transmission: All translation happens locally; message content never leaves your machine
- Body Only: Only email body is processed; headers, addresses, and attachments are never touched
- Open Source Models: Uses transparent, auditable open-source translation models
- No API Keys: No accounts, no tracking, no telemetry
- GNOME Evolution ≥ 3.36
- Python 3.8+
- CMake 3.10+ (for building from source)
We welcome contributions! See CONTRIBUTING.md for guidelines.
This project follows the same LGPL-2.1+ licensing model as the Evolution example module files.
This fork fixes two issues that prevent the plugin from building and running on Evolution ≥ 3.56 (which ships with Manjaro, Fedora, and other rolling-release distros):
Evolution 3.56 reduced the function from 10 arguments to 7. The name string,
-1 length, and &error parameters were removed, and user_data moved before eui:
/* Old (Evolution < 3.56) */
e_ui_manager_add_actions_with_eui_data(ui_manager, group, domain,
entries, n_entries, "ui-name", eui_def, -1, user_data, &error);
/* New (Evolution ≥ 3.56) */
e_ui_manager_add_actions_with_eui_data(ui_manager, group, domain,
entries, n_entries, user_data, eui_def);The new EUI parser requires <submenu action='...'> referencing a registered action.
The old <submenu id='...'> with <attribute name='label'> and after= attributes
are no longer valid. Custom plugin menus must use the custom-menus placeholder:
<eui>
<menu id='main-menu'>
<placeholder id='custom-menus'>
<submenu action='translate-menu'>
<item action='translate-message-action'/>
...
</submenu>
</placeholder>
</menu>
</eui>The submenu header (translate-menu) must be registered as an EUIActionEntry
with a NULL activate callback.
This started as a fork of costantinoai/evolution-mail-translate.
While extending it, we noticed the upstream project independently tagged their own v1.2.0 release
with different content — making it clear that the two projects had diverged enough to warrant
a distinct identity rather than risk confusing users about which v1.2.0 is which.
The rename to Moddo Evolution Translator reflects that this is now an independently maintained project, not just a patch on top of the original.
- Originally forked from costantinoai/evolution-mail-translate
- Built on ArgosTranslate
- Integrates with GNOME Evolution
- Translation models from OpenNMT