Translating
Help translate the UI into your language! No coding is required. This page mirrors
the Translators section of
CONTRIBUTING.md.
The UI is localized into English (the default), Spanish, Simplified Chinese, Japanese, and Brazilian Portuguese, with per-key English fallback so any string left untranslated always shows readable English — never a raw key.
Source of truth
Section titled “Source of truth”Every user-facing string lives in a per-locale JSON catalog under messages/ —
one file per language, keyed by a stable message id:
messages/en.json— the complete source catalog (every message id)messages/es.json— Spanishmessages/zh.json— Simplified Chinesemessages/ja.json— Japanesemessages/pt-BR.json— Brazilian Portuguese
The other catalogs hold translations and may be partial. Any id missing or left
empty in a target locale falls back to its English text. New English strings added
to en.json automatically surface as untranslated entries for every language.
Via Weblate (recommended)
Section titled “Via Weblate (recommended)”Translations are managed through Weblate, a libre web translation platform, using a git-based workflow:
- Open the PosterPilot project on Weblate and sign in — a free account works.
- Pick your language and translate the untranslated strings right in the browser.
- Weblate proposes the changes back to the repository as commits/PRs over git; a maintainer merges them.
The Weblate component is configured against messages/*.json with en as the
source language and JSON (key-value) format, so it always reflects the current
source catalog.
Via a direct pull request
Section titled “Via a direct pull request”You can also edit a catalog by hand: copy a new key from messages/en.json into
messages/<locale>.json, translate the value, and open a PR.
- Keep keys identical to the source; only translate the values.
- Leave technical proper nouns untranslated: Plex, MediUX, TMDB, Kometa, Fanart.tv.
How the active language is chosen
Section titled “How the active language is chosen”The active language is resolved per request: (1) your persisted preference (set
via the header switcher or Settings), then (2) your browser’s Accept-Language,
then (3) English. See Configuration → Language
for details.
By contributing translations, you agree your contributions are licensed under the project’s MIT license.
PosterPilot is an independent project, not affiliated with or endorsed by Plex, Jellyfin, Emby, MediUX, Fanart.tv, TMDB, ThePosterDB, or Kometa. Trademarks belong to their respective owners. This product uses the TMDB API but is not endorsed or certified by TMDB.