- Add translation JSON files (en.json, ru.json) with 110+ strings each - Implement locale auto-detection from browser settings - Add locale toggle button (EN/RU) with localStorage persistence - Translate all user-facing text: auth, player, scripts, callbacks - Fix dynamic content translation on locale switch (playback state, track title) - Add comprehensive i18n documentation to CLAUDE.md - Follow existing theme toggle pattern for consistency Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2.6 KiB
Media Server - Development Guide
Overview
Standalone REST API server (FastAPI) for controlling system-wide media playback on Windows, Linux, macOS, and Android.
Running the Server
Manual Start
python -m media_server.main
Auto-Start on Boot (Windows Task Scheduler)
Run in Administrator PowerShell from the media-server directory:
.\media_server\service\install_task_windows.ps1
To remove the scheduled task:
Unregister-ScheduledTask -TaskName "MediaServer" -Confirm:$false
Configuration
Copy config.example.yaml to config.yaml and customize.
The API token is generated on first run and displayed in the console output.
Default port: 8765
Internationalization (i18n)
The Web UI supports multiple languages with translations stored in separate JSON files.
Locale Files
Translation files are located in:
media_server/static/locales/en.json- English (default)media_server/static/locales/ru.json- Russian
Maintaining Translations
IMPORTANT: When adding or modifying user-facing text in the Web UI:
- Update all locale files - Add or update the translation key in both
en.jsonandru.json - Use consistent keys - Follow the existing key naming pattern (e.g.,
section.element,scripts.button.save) - Test both locales - Verify translations appear correctly by switching between EN/RU
Adding New Text
When adding new UI elements:
- Add the English text to
static/locales/en.json - Add the Russian translation to
static/locales/ru.json - In HTML: use
data-i18n="key.name"for text content - In HTML: use
data-i18n-placeholder="key.name"for input placeholders - In HTML: use
data-i18n-title="key.name"for title attributes - In JavaScript: use
t('key.name')ort('key.name', {param: value})for dynamic text
Adding New Locales
To add support for a new language:
- Create
media_server/static/locales/{lang_code}.json(copy fromen.json) - Translate all strings to the new language
- Add the language code to
supportedLocalesarray inindex.html
Versioning
Version is tracked in two files that must be kept in sync:
pyproject.toml-[project].versionmedia_server/__init__.py-__version__
When releasing a new version, update both files with the same version string.
Important: After making any changes, always ask the user if the version needs to be incremented.
Git Rules
- ALWAYS ask for user approval before committing and pushing changes.
- When pushing, always push to all remotes:
git push origin master && git push github master