A Qt6/PySide6 translation file editor for PO, TS, JSON, XLIFF, Android, ARB, PHP, and YAML files
Project description
LinguaEdit
Professional translation editor built with PySide6/Qt6 โ by a translator, for translators.
LinguaEdit is a feature-rich, cross-platform translation editor that supports 17+ file formats, translation memory, AI-powered review, and a modern UI designed for productive translation workflows.
๐ Website: www.linguaedit.org ๐ฆ Releases: GitHub Releases ๐ Changelog: CHANGELOG.md ๐ Issues: GitHub Issues
๐ธ Screenshots
Main Editor
Translation Engines
Validation
Statistics
Video Subtitle Extraction
Glossary Management
๐ฆ Installation
pip / pipx (recommended)
# Install with pipx (isolated environment)
pipx install linguaedit
# Or with pip
pip install linguaedit
# Run
linguaedit-gui
Debian / Ubuntu
# Add repository
curl -fsSL https://yeager.github.io/debian-repo/yeager-repo.gpg | sudo gpg --dearmor -o /usr/share/keyrings/yeager-repo.gpg
echo "deb [signed-by=/usr/share/keyrings/yeager-repo.gpg] https://yeager.github.io/debian-repo stable main" | sudo tee /etc/apt/sources.list.d/yeager.list
# Install
sudo apt update
sudo apt install linguaedit
# Note: PySide6 is not available as a system package on most distros.
# Install it via pip:
pip install PySide6
Fedora / RHEL / openSUSE
# Add repository
sudo dnf config-manager --add-repo https://yeager.github.io/rpm-repo/yeager.repo
# Install
sudo dnf install linguaedit
# Install PySide6:
pip install PySide6
macOS
# Via pipx
pipx install linguaedit
# For proper menu bar name and file associations,
# download LinguaEdit.app from GitHub Releases
Windows
Download the self-contained .exe from GitHub Releases โ no Python installation required.
โจ Features
๐ 17+ File Formats
| Format | Extensions | Notes |
|---|---|---|
| PO / POT | .po, .pot |
GNU Gettext |
| Qt Linguist | .ts |
XML format |
| XLIFF | .xliff, .xlf |
Version 1.2 & 2.0 |
| SDLXLIFF | .sdlxliff |
Trados with segment definitions |
| MQXLIFF | .mqxliff |
memoQ with namespace detection |
| JSON | .json |
Flat & nested i18n |
| YAML | .yml, .yaml |
i18n files |
| Android XML | .xml |
strings.xml |
| ARB | .arb |
Flutter Application Resource Bundle |
| PHP | .php |
Array format |
| Java Properties | .properties |
Key=value |
| Apple Strings | .strings |
Localizable.strings |
| Unity Asset | .asset |
Unity localization |
| RESX | .resx |
.NET resource files |
| Chrome i18n | .json |
messages.json |
| Godot | .tres |
Godot translation resources |
| Subtitles | .srt, .vtt |
SubRip & WebVTT |
| TMX | .tmx |
Translation Memory eXchange |
๐ Editor & Navigation
- Multi-tab editing โ work on multiple files simultaneously
- Smart search & replace with regex, case sensitivity, whole word
- Status filters โ All, Untranslated, Fuzzy, Translated, Reviewed, With Warnings
- Sort modes โ File order, alphabetical, by length, untranslated first, by reference
- Inline editing โ double-click entries in the list
- Drag & drop files to open
- Bookmarks โ star entries for quick access
- Tags โ organize entries with custom tags
- Minimap โ visual overview of file status
๐ง Zen Translation Mode
Distraction-free translation workflow (Ctrl+Shift+Z):
- Source text (read-only) + translation (editable)
- Progress bar at top
- Tab = save + next untranslated
- Escape = exit Zen mode
โจ๏ธ Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+O |
Open file |
Ctrl+S |
Save |
Ctrl+H |
Search & Replace |
Ctrl+U |
Toggle fuzzy |
Alt+Enter |
Next untranslated |
Ctrl+Shift+โ/โ |
Previous/next fuzzy |
Ctrl+Enter |
Copy source to translation |
Tab |
Save + next entry |
Shift+Tab |
Save + previous entry |
Ctrl+Shift+Z |
Zen Mode |
Ctrl+D |
Project Dashboard |
Ctrl+Shift+D |
Git Diff |
Ctrl+Alt+T |
Batch Translate |
Ctrl+Shift+F |
Focus Mode (untranslated only) |
F11 |
Fullscreen |
Ctrl+R |
Run linter |
Ctrl+Shift+A |
AI Review |
๐ง Translation Memory (TM)
- SQLite-based, zero configuration
- Fuzzy matching with configurable threshold
- Auto-learning from your translations
- Autocomplete suggestions while typing
- Import/export TMX files
- Propagate identical translations across entries
๐ Glossary
- Term management with source โ target pairs
- Domain tagging
- Consistency checking across the project
- Import/export CSV
- Real-time term highlighting in editor
๐ค AI & Machine Translation
- Inline MT suggestions โ DeepL/OpenAI suggestions appear as you translate
- Batch Machine Translate (Ctrl+Alt+T) โ translate all untranslated at once
- AI Review (Ctrl+Shift+A) โ quality scoring with heuristic fallback
- Back-translation verification โ detect meaning drift
- Confidence scores per entry with visual indicators
- Supported engines: DeepL, OpenAI, Google, Lingva, MyMemory
โ Quality Assurance
- 15+ linting checks:
- Missing translations
- Placeholder/format string mismatches (
%s,{0}, etc.) - HTML/XML tag mismatches
- Accelerator key mismatches (
&) - Length ratio warnings
- Duplicate translations
- Case mismatches
- CLDR plural form validation
- Number localization (thousands separator, currency, dates)
- Inconsistent translations
- Trailing whitespace/punctuation
- Spell check โ red wavy underlines with suggestions and custom dictionary
- Regex tester โ validate format strings
- Layout simulator โ pixel width checking for UI text
- Unicode inspector โ detect invisible/suspicious characters
๐ Project Dashboard (Ctrl+D)
- Per-language translation progress bars
- Pie chart and bar chart (QPainter-based, no external deps)
- Total string counts and summary stats
- Export statistics as CSV
๐ Git Integration
- Git Diff (Ctrl+Shift+D) โ compare with previous commits
- Detect outdated translations (source changed, translation didn't)
- Stage, commit, branch management from within the editor
- File change monitoring with auto-reload
๐ฌ Video Subtitle Translation
- FFmpeg integration โ extract subtitles from video files (.mkv, .mp4, .avi, etc.)
- Auto video preview โ opening a .srt/.vtt automatically finds and shows the matching video
- Editable timestamps โ time intervals as a dedicated column
- Progress bar during extraction with percentage
- User-friendly dialog when FFmpeg is not installed
๐ Security
- Cross-platform credential storage:
- macOS: Keychain
- Windows: Credential Locker
- Linux: Secret Service (GNOME Keyring / KWallet)
- Fallback: AES-encrypted file with master password (PBKDF2, 480k iterations)
- Security status visible in Preferences โ Security
๐ Platform Integration
- Transifex โ community translations with daily GitHub Actions sync (18 languages)
- File associations โ double-click
.po,.ts,.xliff, etc. to open (macOS + Linux) - macOS
.appbundle with proper menu bar name and icon - Linux
.desktopfile with MIME type definitions
๐จ Themes & UI
- 5 built-in themes including comprehensive dark mode
- Horizontal/vertical layout toggle โ editor on right or below
- Auto-collapsing side panel โ hides when empty
- Context-aware toolbar โ customizable, with overflow menu
- Colored entry borders โ red (untranslated), orange (fuzzy), green (translated)
- Save flash animation โ green border flash confirming save
- Fullscreen mode (F11)
- Syntax highlighting for HTML tags, format strings, escape sequences
๐งช Testing
- 90 unit tests covering parsers, linter, TM, settings, and security
๐ ๏ธ Advanced Tools
- Macro recording โ record and replay translation actions
- Plugin system โ extend functionality
- Gamification โ achievements and streaks
- Pomodoro timer โ built-in focus timer
- TTS โ hear translations read aloud
- OCR โ extract text from images
- Locale map โ visual overview of project languages
- Burndown charts โ track translation progress over time
- QA profiles โ configurable validation rule sets
๐ Translations
LinguaEdit is translated via Transifex with 1,487 source strings and 18 languages configured. Translations sync daily via GitHub Actions.
Currently translated:
- Swedish โ 100%
Help translate LinguaEdit into your language! Join us on Transifex โ no coding required.
๐๏ธ Building from Source
# Clone
git clone https://github.com/yeager/linguaedit.git
cd linguaedit
# Install in development mode
pip install -e .
# Run
linguaedit-gui
# Compile translations
pyside6-lrelease translations/linguaedit_sv.ts -qm translations/linguaedit_sv.qm
Dependencies
- Python 3.10+
- PySide6 >= 6.5
- Optional:
ffmpeg(video subtitle extraction),hunspell(spell checking)
๐ฆ Package Repositories
Debian/Ubuntu (apt)
deb [signed-by=/usr/share/keyrings/yeager-repo.gpg] https://yeager.github.io/debian-repo stable main
RPM (dnf/yum)
https://yeager.github.io/rpm-repo/
See debian-repo and rpm-repo for setup instructions.
๐ License
GPL-3.0-or-later โ see LICENSE.
๐ค Author
Daniel Nylander โ Dedicated contributor to Swedish open-source localization, with translations of Ubuntu, GNU binutils, Ardour, util-linux, Weblate, and many more projects.
- ๐ danielnylander.se
- ๐ github.com/yeager
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file linguaedit-1.8.8.tar.gz.
File metadata
- Download URL: linguaedit-1.8.8.tar.gz
- Upload date:
- Size: 679.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c65d190407f85059b91315a6624ae0a78928e09c46f92078e73acdc38f6f6851
|
|
| MD5 |
70a9d76985492621919438831b7e7267
|
|
| BLAKE2b-256 |
bd27162c4ff598f57cb6369872a4c7ca4ec16b465b49da4c8d922af743950326
|
File details
Details for the file linguaedit-1.8.8-py3-none-any.whl.
File metadata
- Download URL: linguaedit-1.8.8-py3-none-any.whl
- Upload date:
- Size: 729.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc1d95a4f1bcfd7a27a14716ebe909a27673bb724999ce9a93c119d3d6be8c9f
|
|
| MD5 |
1a08e256ce95e10847d527b562cb1b0a
|
|
| BLAKE2b-256 |
83ba89f7e0efd0558d8ef4e02da41e5b202a547e35290b49904c236d37caef95
|