powersync-docs/mkdocs.yml
Patrick Schurig 846c0c7525 feat(i18n): traduire ce qu'on écrit, garder verbatim ce que la machine affiche
Signalé sur /de/appareils/bornes/goecharger/ : la page était allemande sur deux
lignes et anglaise sur tout le reste. Le diagnostic a séparé deux choses que
j'avais mises dans le même sac le 2026-10-12.

LA LIGNE DE PARTAGE, écrite en tête du générateur :

  • les LIBELLÉS QUE NOUS ÉCRIVONS (en-têtes de colonnes, titres de section,
    oui/non, « Documentation fabricant ») → TRADUITS. Ils ne désignent rien à
    l'écran, l'anglais n'y était qu'une friction. REF devient REF_I18N, trois
    jeux de 20 libellés.

  • le CONTENU VENANT DE NYMEA (noms de modèles, clés de registres, libellés de
    champs comme « MAC address », unités) → VERBATIM, en anglais. Ce sont
    exactement les chaînes que l'installateur lit DANS L'APP, qui tourne en
    en_US. Les traduire rendrait la doc inutilisable pour retrouver un champ à
    l'écran.

Et la pièce qui change l'expérience plus que la traduction elle-même : une note
`verbatim`, générée dans la langue de la page, en tête du bloc de référence.
Sans elle le mélange FR/EN passe pour une traduction bâclée ; avec elle c'est
une convention que le lecteur comprend.

L'injection devient sensible à la langue : `locale_of()` déduit la langue du
suffixe du fichier et `process()` rend le bloc en conséquence. Sans ça le même
bloc partait à l'identique dans les trois versions.

TAGLINES ET TITRES — i18n/devices.yaml, 52 entrées

Le tagline vivait en paragraphe libre, écrit UNE SEULE FOIS à la création de la
page : il restait donc en anglais sur les trois versions, y compris la
FRANÇAISE. Il entre dans le bloc badges, donc il est régénéré, donc traduisible
pour toujours. 52 taglines en fr et de ; l'anglais retombe sur l'amont.

Les traductions vivent dans le dépôt de DOC et pas dans les meta.json : trois
des cinq dépôts plugins sont des dépôts nymea amont que l'AGENTS.md interdit de
modifier. Repli sur l'amont pour toute entrée absente.

Deux titres s'affichaient en FRANÇAIS sous /de/ et /en/ — « Compteur ABB B2x »,
« Borne ABB Terra AC » : corrigés, dans la page et dans la nav.

Deux coquilles AMONT corrigées au passage, repérées en relisant les 57 entrées :
meta.json annonçait « Bestel » pour Vestel et « Easeex » pour Easee. Signalées
comme corrections, pas comme traductions, dans i18n/devices.yaml.

48 FICHES FR ÉTAIENT DANS UN ANCIEN FORMAT, ET MENTAIENT

Trouvé en vérifiant : 48 fiches FR n'avaient pas de marqueur `__badges_*__`.
Leurs badges étaient du HTML figé, écrit une fois — goecharger affichait
« NIGHTLY » alors que PORTING_STATUS dit `stable` depuis. Elles sont migrées au
format canonique : badges générés, donc exacts, plus titre localisé, tagline et
intertitre. Reste `hvac/homeconnect.md`, orpheline (plugin hors PORTING_STATUS).

NAV : UN CONSTAT QUI ÉVITE DE REFAIRE L'ESSAI

`literate-nav` ne lit que son `nav_file` : la substitution par suffixe de
mkdocs-static-i18n ne s'y applique PAS. Un `SUMMARY.de.md` généré n'était lu par
personne et la barre latérale allemande gardait les noms français. Testé, puis
retiré — et la raison est écrite dans le générateur pour que personne n'y
revienne. Les libellés de nav passent par `nav_translations` : 31 éléments
traduits par langue au lieu de 29.

RÉFÉRENCE API : LAISSÉE EN ANGLAIS, DÉLIBÉRÉMENT

Les 23 pages de l'API n'ont pas de variante par langue. Leur traduire les
libellés aurait fait voir du FRANÇAIS aux lecteurs /de/ et /en/ par le repli —
une régression. Créer 46 variantes pour traduire dix libellés aurait triplé
28 000 mots de contenu généré pour un gain nul : le reste de la page (noms de
méthodes, de champs, de types, descriptions) est l'API elle-même, et ce sont les
chaînes qu'on écrit dans ses requêtes. À la place, une note explique dans les
trois langues POURQUOI cette référence est en anglais.

Vérifié : build --strict sans avertissement, les deux générateurs rendent « Doc à
jour » en --check, et la fiche goecharger relue dans les trois langues.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 08:42:21 +02:00

177 lines
5.9 KiB
YAML

site_name: ETM PowerSync — Documentation
site_url: https://docs.etm-powersync.fr
site_description: >-
Documentation du HEMS ETM PowerSync : installation, fonctionnalités, compatibilité
des équipements. Gestion d'énergie locale bâtie sur nymea.io.
site_author: ETM-Schurig
copyright: >-
© ETM-Schurig — Documentation sous licence CC-BY 4.0 · exemples de code sous GPL-3.0
repo_url: https://github.com/etmschurig/powersync-docs
repo_name: etmschurig/powersync-docs
edit_uri: edit/main/docs/
theme:
name: material
language: fr
font:
text: IBM Plex Sans
code: IBM Plex Mono
palette:
scheme: slate # thème sombre, raccord avec la charte ETM
primary: custom # couleurs réelles définies dans stylesheets/extra.css
accent: custom
features:
- navigation.indexes
- navigation.top
# - navigation.instant # RETIRÉ (multi-langue, 2026-10-12) :
# incompatible avec le lien contextuel du sélecteur de langue de
# mkdocs-static-i18n, et l'avertissement fait échouer `mkdocs build --strict`.
# Le sélecteur l'emporte : il ramène sur la même page dans l'autre langue.
- navigation.footer
- search.suggest
- search.highlight
- content.code.copy
- content.action.edit
icon:
repo: fontawesome/brands/github
extra_css:
- stylesheets/extra.css
markdown_extensions:
- admonition
- attr_list
- md_in_html
- tables
- toc:
permalink: true
- pymdownx.highlight:
anchor_linenums: true
- pymdownx.superfences
- pymdownx.details
- pymdownx.inlinehilite
- pymdownx.tabbed:
alternate_style: true
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
plugins:
# i18n AVANT literate-nav et search : il réécrit l'arbre des fichiers par langue,
# les autres doivent voir l'arbre déjà localisé.
- i18n:
docs_structure: suffix # index.md (fr) · index.de.md · index.en.md
fallback_to_default: true # pas de page absente : on retombe sur le FR
reconfigure_material: true # bascule de langue dans le header Material
reconfigure_search: true # un index de recherche par langue
languages:
- locale: fr
name: Français
default: true
build: true
site_name: ETM PowerSync — Documentation
theme:
language: fr
- locale: de
name: Deutsch
build: true
site_name: ETM PowerSync — Dokumentation
theme:
language: de
nav_translations:
Accueil: Startseite
Installation: Installation
Appareils: Geräte
Fonctionnalités: Funktionen
Référence: Referenz
Aide: Hilfe
Compatibilité: Kompatibilität
Dépôt APT: APT-Repository
Configuration: Konfiguration
L'application: Die App
Surplus solaire: Solarüberschuss
Délestage: Lastabwurf
Gestion batterie: Speicherverwaltung
Tarifs dynamiques: Dynamische Tarife
API JsonRPC: JSON-RPC-API
Référence API: API-Referenz
Dépannage: Fehlersuche
FAQ: FAQ
Compteurs: Zähler
Bornes de recharge: Wallboxen
SmartDevices: SmartDevices
HVAC: HVAC
Onduleurs / PV: Wechselrichter / PV
Batteries / ESS: Speicher / ESS
Tarifs & prévisions: Tarife & Prognosen
Types génériques: Generische Typen
API — Métier: API — Fachlich
API — Système: API — System
Compteur ABB B2x: ABB-B2x-Zähler
Borne ABB Terra AC: ABB Terra AC Ladestation
- locale: en
name: English
build: true
site_name: ETM PowerSync — Documentation
theme:
language: en
nav_translations:
Accueil: Home
Installation: Installation
Appareils: Devices
Fonctionnalités: Features
Référence: Reference
Aide: Help
Compatibilité: Compatibility
Dépôt APT: APT repository
Configuration: Configuration
L'application: The app
Surplus solaire: Solar surplus
Délestage: Load shedding
Gestion batterie: Battery management
Tarifs dynamiques: Dynamic tariffs
API JsonRPC: JSON-RPC API
Référence API: API reference
Dépannage: Troubleshooting
FAQ: FAQ
Compteurs: Meters
Bornes de recharge: EV chargers
SmartDevices: SmartDevices
HVAC: HVAC
Onduleurs / PV: Inverters / PV
Batteries / ESS: Batteries / ESS
Tarifs & prévisions: Tariffs & forecasts
Types génériques: Generic types
API — Métier: API — Domain
API — Système: API — System
Compteur ABB B2x: ABB B2x meter
Borne ABB Terra AC: ABB Terra AC charging station
- search:
lang: fr
- literate-nav:
nav_file: SUMMARY.md
nav:
- Accueil: index.md
- Installation:
- installation/index.md
- Dépôt APT: installation/depot-apt.md
- Configuration: installation/configuration.md
- L'application: installation/application.md
- Appareils: appareils/
- Fonctionnalités:
- fonctionnalites/index.md
- Surplus solaire: fonctionnalites/surplus-solaire.md
- Délestage: fonctionnalites/delestage.md
- Gestion batterie: fonctionnalites/gestion-batterie.md
- Tarifs dynamiques: tarifs.md
- Référence:
- reference.md
- API JsonRPC: integrations/jsonrpc-api.md
- Référence API: api/
- MQTT: integrations/mqtt.md
- Aide:
- Dépannage: depannage.md
- FAQ: faq.md