diff --git a/README.md b/README.md index 223c5bc..17c30c7 100644 --- a/README.md +++ b/README.md @@ -27,16 +27,20 @@ This demo runs with sample XMLTV feeds to showcase the interface. ## ✨ Features - 🎛️ **Timeline grid** — horizontal EPG-style view with a live "now" indicator +- 📅 **Date in timebar** — midnight markers show the day/date so you always know where you are - 📱 **Responsive** — optimized list view on mobile - ⏱️ **Live progress bar** on the currently airing program - 🕶️ **Past programs** automatically dimmed - 📋 **Hover tooltip** — title, synopsis, season/episode, schedule, duration +- 🎬 **Program popup** — click any program for full details + IMDb search link - 🔗 **One-click copy** buttons for EPG & M3U URLs in the topbar - ▶️ **Built-in HLS player** — click any channel or live program to watch in a PiP overlay - 🔀 **HTTP→HTTPS proxy** — streams Tunarr over HTTP transparently from an HTTPS page - 🎨 **Theme system** — drop a CSS file in `themes/` and it appears in the menu automatically - 📡 **Multi-EPG sources** — configure multiple EPG/M3U sources, switch from the topbar - 👤 **Personal EPG** — optionally let visitors use your instance with their own EPG/M3U URLs (saved in localStorage) +- 🔍 **Search** — filter the grid by channel name or program title/synopsis (debounced) +- 🌍 **i18n** — auto-detects browser language, supports EN / FR / ES (add your own in `locales/`) - ⚙️ **Guided setup** on first launch — no config files to edit manually - 🔄 **Auto-reload** EPG every 30 minutes - 0️⃣ **Zero JS dependencies** — vanilla PHP, hls.js loaded from CDN @@ -208,21 +212,25 @@ gridtv/ ├── Dockerfile ├── docker-compose.yml ├── .gitignore # config.json excluded +├── locales/ # i18n translation files +│ ├── en.json +│ ├── fr.json +│ └── es.json ├── themes/ # CSS theme files │ ├── default.css │ ├── magazine.css │ ├── cyberpunk.css │ └── steampunk.css └── src/ - ├── config.php # Config loader + migration + ├── config.php # Config loader, migration, locale detection ├── tpl/ # HTML templates │ ├── head.php # DOCTYPE, , CSS │ ├── topbar.php # Topbar (nav, source switcher, search, theme) │ ├── grid.php # Grid + mobile + PiP + overlays - │ ├── modals.php # Personal EPG modal + │ ├── modals.php # Program info modal + Personal EPG modal │ └── footer.php # JS modules loader, └── js/ # JavaScript modules - ├── config.js # Constants + PHP-injected vars + ├── config.js # Constants + PHP-injected vars (incl. locale) ├── utils.js # Helpers, clock, EPG fetch ├── epg.js # Grid rendering ├── mobile.js # Mobile list view @@ -232,6 +240,7 @@ gridtv/ ├── player.js # HLS PiP player ├── themes.js # Theme switcher ├── search.js # Search + filter (debounced) + ├── program.js # Program info modal + IMDb link └── live.js # Live updates + responsive ``` @@ -296,6 +305,22 @@ GridTV parses the standard **XMLTV format**. Tested with: - ✅ [Jellyfin](https://jellyfin.org/) - ✅ Any XMLTV-compliant source + +--- + +## 🌍 Internationalization + +GridTV auto-detects the visitor's browser language and serves the matching locale. Supported out of the box: **English**, **French**, **Spanish**. + +To add a new language, create a file in `locales/` based on an existing one: + +```bash +cp locales/en.json locales/de.json +# then translate the values +``` + +GridTV will automatically pick it up for browsers with that language set — no code changes needed. + --- ## 🤝 Contributing @@ -322,7 +347,10 @@ GNU Affero General Public License v3.0 (AGPLv3) - Personal EPG (localStorage) - Modular codebase (src/tpl + src/js) - Docker support -- **Search** — filter grid by channel name or program title/synopsis +- **Search** — filter grid by channel name or program title/synopsis (debounced) +- **Date in timebar** — midnight markers with day/date in the ruler +- **Program popup** — full details + IMDb search link on any program click +- **i18n** — EN / FR / ES with browser auto-detection, extensible via locales/ ### 🔜 Coming soon - **Favorites** — pin channels to the top of the grid (localStorage)