Local-model translation and localization-file workflows, directly in the Omarchy bar. Translate a short message, shape it for its destination, check the meaning with a quick language swap, or process an application's locale files without leaving the desktop. The bar icon opens it as an ordinary floating window, centred, that you can move, resize and keep beside your work.
The plugin is self-contained and dependency-light:
window → Python standard-library backend → local OpenAI-compatible API
No install hook runs, no cloud translation provider is required, and no third-party Python package is installed.
Hyprland tiles new windows, and floating one after it appears reflows every tiled window on the workspace twice. Add this rule so the window floats from its first frame (Quickshell windows share one class, so the rule matches the title):
-- ~/.config/hypr/hyprland.lua
o.window({ class = "^org\\.quickshell$", title = "^Translation$" }, {
float = true,
center = true,
})The window sets its own size; the rule deliberately names none.
- Text translation — editable source and target languages with common i18n presets, independent context and tone controls, and a copy-ready result
- Quick swap — a translator-style swap button reverses the panes for a one-time semantic check; the reversed direction is temporary and never changes saved settings
- Complete file output — translates user-facing values while preserving keys, code, placeholders, URLs, and the surrounding file structure
- Locale-folder sync — previews missing or empty entries, preserves existing translations, fills only the gaps, and backs up every changed file
- Local model configuration — OpenAI-compatible endpoint, optional model discovery, timeout, and optional API key managed from the window
| Ecosystem | Translate one complete file | Fill missing locale entries |
|---|---|---|
| Web and cross-platform | JSON, ARB, JavaScript, TypeScript, JSX, TSX, gettext PO | JSON and ARB locale files |
| Android | res/values/*.xml |
res/values-*/*.xml, including strings, plurals, and string arrays |
| Apple platforms | .strings, .stringsdict, .xcstrings |
matching .lproj/*.strings files |
- Omarchy Shell with third-party plugin support
- Python 3.11 or newer
- An OpenAI-compatible local model endpoint
omarchy plugin add https://github.com/ryuhzk/omarchy-translation --enable --yesOr from a local clone:
omarchy plugin validate ~/path/to/omarchy-translation
omarchy plugin add file://$HOME/path/to/omarchy-translation --enable --yesThe widget defaults to the center section. Move it at any time with:
omarchy bar move ryuhzk.translation --section centeromarchy plugin remove ryuhzk.translationThis unregisters the plugin and deletes its installed files. Private settings
remain at ~/.config/omarchy-translation/config.env; remove that file only if
you also want to discard the saved endpoint, model, and API key.
Use Text for short-form translation and Files for localization assets. The file workflow has two modes:
- Translate one file returns the complete translated document and refuses to overwrite the selected source file.
- Fill locale folder treats the selected file as canonical, discovers compatible target locales, previews the missing count, and updates only missing or empty entries.
Folder-sync backups are stored under
~/.local/state/omarchy-translation/backups/.
| Key | Action |
|---|---|
Ctrl+Enter |
Translate text |
Ctrl+L |
Clear text and result |
Ctrl+O |
Show or hide writing options |
Ctrl+Shift+C |
Copy the current result |
Esc |
Close the window |
| Key | Default | Description |
|---|---|---|
panelWidth |
800 |
Window width in layout units |
| Source language | auto |
Detect the input language unless specified |
| Target language | English |
Output language; common locale presets are included |
| Tone | natural |
Writing style used for text translation |
| Context | general |
Destination context used for text translation |
| Local endpoint | http://127.0.0.1:8888/v1 |
OpenAI-compatible API base URL |
| Model | (empty) | Discover the endpoint's first model automatically |
| Timeout | 5 |
Text request timeout in seconds |
Translation settings are stored with mode 0600 at
~/.config/omarchy-translation/config.env. The API key is never returned to
the window after it is saved.
./check
omarchy plugin validate ../check validates Python syntax, unit tests, manifest metadata, executable
permissions, and English-only user-visible copy.
- Plugins run unsandboxed inside the long-lived Omarchy Shell; inspect the source before enabling it.
- The backend accepts only local file paths, limits file size and batch count, validates placeholders after model output, and writes files atomically.
- Single-file translation cannot overwrite its source. Folder sync changes only discovered locale targets and creates backups before replacement.
- API credentials live only in the private configuration file and are sent solely to the configured endpoint.