README file from
GithubPO Editor — Obsidian Plugin
Edit, validate, and convert PO/Gettext translation files directly inside Obsidian — grid view, raw editor, multi-format export, and full plural form support.
Built with:
✨ Features
| Area | What PO Editor provides |
|---|---|
| Editor | Dual-mode editing — interactive grid table and raw PO text editor with CodeMirror syntax highlighting |
| Format Conversion | Convert PO ↔ XLIFF, ARB, ARB Enhanced, JSON, YAML, ICU MessageFormat |
| Entry Management | Singular and plural forms, translator comments, flags, msgctxt context, source references |
| Filtering | Filter by status (translated / untranslated / fuzzy), format flag, comment, or context |
| Validation | Flag conflicts, plural integrity, empty msgstr, fuzzy/obsolete detection, strict mode |
| Commands | Create, view, validate, mark/unmark fuzzy — all accessible from the command palette |
| Project Mode | Manage multiple related PO files from a single folder |
| Settings | Default language, output directory, custom keybindings, quick-action buttons, placeholder patterns |
🚀 Installation
Community Plugins (when listed)
- Open Obsidian → Settings → Community plugins → Browse
- Search "PO Editor"
- Click Install, then Enable
BRAT (beta testing)
- Install BRAT from Community plugins
- Open BRAT settings → Add Beta Plugin
- Enter
Kodaskills/obsidian-po-editor
Manual
Download the latest release from GitHub Releases, copy main.js, manifest.json, and styles.css to:
<vault>/.obsidian/plugins/po-editor/
Then reload Obsidian and enable the plugin.
Note: Desktop only —
isDesktopOnly: true.
⚡ Quick Start
1. Click the 🌐 ribbon icon (or run "Create PO File" from the command palette)
2. Choose a language and output directory → file is created and opens in grid view
3. Click any row to edit an entry — add/update msgstr, set flags, add comments
4. Toggle to raw text mode (top-right) for direct PO source editing
5. Run "Validate PO File" to check for errors and incomplete translations
6. Use "Convert" to export the file to XLIFF, JSON, YAML, ARB, or ICU format
📂 Supported Formats
| Format | Extension | Direction |
|---|---|---|
| Gettext PO | .po |
Read & Write |
| Gettext Template | .pot |
Read & Write |
| XLIFF | .xliff |
PO ↔ XLIFF |
| Flutter ARB | .arb |
PO ↔ ARB |
| ARB Enhanced | .arb |
PO ↔ ARB (with metadata) |
| JSON | .json |
PO ↔ JSON |
| YAML | .yaml |
PO ↔ YAML |
| ICU MessageFormat | .json |
PO ↔ ICU |
🛠 Commands
| Command | ID | Description |
|---|---|---|
| Create PO File | po-create |
Open dialog to create a new .po file |
| View Active PO File | po-view-active |
Open the currently active .po file in the editor |
| Validate PO File | po-validate |
Run validation and show a detailed error/warning report |
| Mark as Fuzzy | po-mark-fuzzy |
Add the fuzzy flag to the selected entry |
| Unmark Fuzzy | po-unmark-fuzzy |
Remove the fuzzy flag from the selected entry |
All commands are available via Ctrl/Cmd + P.
⚙️ Settings
| Setting | Default | Description |
|---|---|---|
outputDirectory |
(vault root) | Where new PO files are saved |
showComments |
true |
Show translator comments in the grid |
preserveComments |
true |
Keep comments during format conversion |
preserveFlags |
true |
Keep flags during format conversion |
preserveReferences |
true |
Keep source references during format conversion |
autoValidate |
false |
Run validation automatically on save |
strictMode |
false |
Treat untranslated and fuzzy entries as errors |
showLineNumbers |
true |
Show line numbers in the raw text editor |
projectModeFolders |
[] |
Folders that activate project mode |
placeholderPatterns |
(printf, ICU) | Regex patterns for placeholder detection |
Custom Keybindings
Map editor actions to keyboard shortcuts via keyMapping in settings. Bind any action to a key combination — no restart required.
Quick Actions
Configure quickActions buttons in settings to insert frequently used flags or comment snippets with a single click inside the entry editor.
📊 Validation
Run "Validate PO File" to get a full report:
| Check | Severity |
|---|---|
Empty msgstr on non-header entry |
Error |
Conflicting format flags (e.g. c-format + no-c-format) |
Error |
| Multiple conflicting format flags on one entry | Error |
| Incorrect plural form count | Error |
| Untranslated entries | Warning |
| Fuzzy entries | Warning |
| Obsolete entries | Info |
In strict mode, untranslated and fuzzy entries are promoted to errors.
📄 License
MIT — see LICENSE for details.
Maintained with ⚡ by the Kodaskills team