Stop copying text between
windows and just translate
One click. Instant translation. Auto-copied to clipboard. 30+ languages. Zero hassle. Built for GNOME Shell.
What makes translation less annoying
Because your time is worth more than tab-switching hell
Lives in your panel
Native GNOME integration. No new windows, no browser tabs. Just click the icon and get your translation. Stays out of your way.
Works with selection
Just highlight text and click. No need to copy it first. Clipboard text works too if nothing's selected, but selection is faster.
Figures out what you want
Auto-detects language and direction. Reading Spanish? Goes to English. Writing in English? Goes to your target language. Zero manual switching.
Auto-copy means one less step
Translation hits your clipboard automatically. Translate → Paste. That's it. Configurable per language if you want control.
Installation
Takes about 2 minutes. Seriously.
Requirements
- GNOME Shell 48+
- DeepL API key (free tier: 500,000 characters/month)
- libsecret (usually pre-installed on GNOME systems)
Installation Commands
# Download the extension package
wget https://github.com/juan-de-costa-rica/gnome-automagic-panel-translator/releases/latest/download/automagic-panel-translator@juan-de-costa-rica.zip
# Install (--force overwrites any existing version)
gnome-extensions install --force automagic-panel-translator@juan-de-costa-rica.zip
# Log out and log back in (required for GNOME to discover the extension)
# Enable the extension
gnome-extensions enable automagic-panel-translator@juan-de-costa-rica
Note: The logout/login step is required on Wayland. GNOME Shell needs to restart to discover new extensions.
Get Your API Key
Sign up for a free DeepL API account at deepl.com/pro-api. Make sure you get the free API key, not the Pro tier key (they're different).
Once you have the key, right-click the extension icon in your panel → Preferences → paste your API key. The extension stores it encrypted in GNOME Keyring.
Ready to stop wasting time on translations?
Get the extension installed in under 2 minutes and start translating smarter.
Download NowHow to Use
1. Configure Your Languages
Set your main language (default: English) and pick which secondary languages you want as quick buttons in the panel menu.
The extension will auto-detect the source language and translate in the right direction based on what it detects.
2. Translate Text
Either select text with your mouse, or copy text to clipboard (Ctrl+C).
Click the extension icon in the panel. If you have text selected, it uses that. Otherwise it uses whatever's on your clipboard.
3. Pick Target Language
Click one of the language buttons in the popup menu. Translation happens instantly and appears in the popup.
4. Auto-Copy & Paste
Translation is automatically copied to your clipboard (configurable in settings). Just paste it wherever you need it.
Translation Logic
The extension detects the source language automatically:
- If source ≠ main language → translates to main language (e.g., Spanish → English)
- If source = main language → translates to selected secondary language (e.g., English → Spanish)
No need to manually switch modes or directions. It just figures it out.
Settings
| Setting | What It Does |
|---|---|
| API Key | Your DeepL API key (stored encrypted in GNOME Keyring) |
| Main Language | Your primary language (default: EN) |
| Available Languages | Comma-separated language codes that appear as buttons |
| Auto-copy to Main | Auto-copy when translating to main language |
| Auto-copy to Secondary | Auto-copy when translating to secondary language |
Technical Details
For the developers who actually care about what's under the hood.
Architecture
- extension.js - Main UI and extension logic (22KB)
- translator.js - DeepL API wrapper with input validation
- prefs.js - Preferences dialog
- lib/keyring.js - Secure storage wrapper for libsecret
- lib/languageMap.js - Shared language code/name mappings
Code Quality
- Modern async/await patterns throughout (no callback hell)
- Memory leak prevention via Gio.Cancellable for all async operations
- Input validation on all user inputs and API calls
- ESLint configuration enforced (zero errors/warnings)
- Comprehensive JSDoc documentation on all public APIs
- Proper Soup.Session cleanup with abort() on destroy
Security
API keys are stored using libsecret (GNOME Keyring), which provides encryption at rest. The extension never stores the API key in plain text. If you previously used an older version, the extension will automatically migrate your key from dconf to encrypted storage on first run.
Dependencies
| Library | Purpose |
|---|---|
| Soup 3 | HTTP requests to DeepL API |
| libsecret | Encrypted keyring storage |
| Gio, GLib, St, Clutter | Standard GNOME platform libraries |
API Usage
Calls api-free.deepl.com when you click "Translate". No telemetry, no tracking. Your text is only sent to DeepL's API when you explicitly request a translation.
Supported Languages
All DeepL-supported languages: EN, ES, FR, DE, IT, PT-BR, PT-PT, NL, DA, SV, NB, FI, PL, CS, SK, HU, RO, BG, SL, LT, LV, ET, UK, RU, TR, EL, JA, ZH, KO, ID, AR
Development
Repository: github.com/juan-de-costa-rica/gnome-automagic-panel-translator
Report issues: GitHub Issues
License: MIT
Support Development
If you find this extension useful, consider supporting its continued development and maintenance.
Ethereum
0x55DE05974F8590ee9F4d013E1b63FcC68661136E