0.4.0: interfaccia in italiano e inglese, scelta nelle impostazioni

L'inglese è la lingua sorgente delle stringhe; l'italiano sta nel catalogo
translations/harbour-aira-it.ts (99 stringhe), che lupdate aggiorna e lrelease
compila in build. Di serie la lingua del sistema, con ripiego sull'inglese.

- nuova classe Translator: risolve la lingua prima di createView e allinea
  QLocale::setDefault, così anche i numeri seguono la lingua (23,0 °C in
  italiano, 23.0 °C in inglese) — le temperature passano da formatValue, non
  più dal toFixed() di JavaScript che metteva sempre il punto
- Qt 5.6 non ha QQmlEngine::retranslate(): al cambio di lingua la radice QML
  viene ricaricata (setSource ricrea il componente anche a url invariata)
- le etichette di stato in airajson.cpp usano QCoreApplication::translate per
  esteso: lupdate non riconosce una funzione wrapper e le avrebbe perse
- selettore della lingua in Impostazioni (Sistema / English / Italiano)
- test: 41/41, carica il .qm vero come fa main.cpp e verifica entrambe le
  lingue, il ripiego e i formati numerici
- anteprime bilingui (docs/anteprima/ inglese, it/ italiano), README e PIANO
  aggiornati, spec RPM con i cataloghi in %files
This commit is contained in:
Carlo
2026-10-10 08:19:20 +02:00
parent e0dcf1f830
commit fddd21e16a
29 changed files with 1230 additions and 190 deletions
+24 -1
View File
@@ -8,7 +8,7 @@ Piano scritto il 9 ottobre 2026, prima di scrivere la UI (convenzione di lavoro)
|---|---|
| Accesso cloud Aira | **funziona** — `pyairahome` 2.3.0, pool Cognito `eu-north-1_cnqyjWtbz` (indice 0), token salvati in `~/.hermes/profiles/carlo/aira_tokens.json` (600) |
| Lettura impianto | **funziona** — esterna, interna, ACS attuale/obiettivo, modalità, curve zone, firmware, errori |
| Bridge HTTP sul server | **scritto e provato** — `~/workspace/Carlo/Aira/aira_bridge.py`, v0.1.0 |
| Bridge HTTP sul server | **scritto e provato** — `~/workspace/Carlo/Aira/aira_bridge.py`, v**0.3.0** (servizio systemd utente attivo) |
| Bluetooth sul server | **assente** — nessun adattatore HCI (esclude la via locale BLE su questa macchina) |
| SDK Sailfish (`sfdk`) | **assente qui** — build e deploy li fa Carlo dal suo PC |
| Jolla Phone 2026 | non raggiungibile dalla rete del server: deploy solo dal PC |
@@ -119,6 +119,29 @@ Non verificabile qui (serve il suo PC + il telefono): build RPM, istallazione, U
solo per LAN e VPN. *Lezione*: un test da `127.0.0.1` non attraversa quelle regole e non
rivela il problema — va provato dalla LAN.
- **App 0.4.0 — localizzazione ita/eng** (richiesta dell'utente): l'interfaccia si
può mettere in italiano o inglese **dalle impostazioni**; di serie segue la lingua
del sistema, con **ripiego sull'inglese**. L'inglese è la lingua sorgente delle
stringhe (restano nel codice), l'italiano sta in `translations/harbour-aira-it.ts`
(**99 stringhe**, aggiornate con `lupdate` e compilate da `lrelease` in build).
Nuova classe `Translator` (`src/translator.{h,cpp}`): risolve la lingua **prima**
di `createView`, così le `qsTr()` del QML nascono già tradotte, e allinea
`QLocale::setDefault` alla lingua scelta — così i numeri seguono la lingua
(`23,0 °C` in italiano, `23.0 °C` in inglese): le temperature si formattano in
`ApiClient::formatValue`, non più con il `toFixed()` di JavaScript, che avrebbe
sempre messo il punto. *Vincolo di piattaforma*: **Qt 5.6 non ha
`QQmlEngine::retranslate()`** (arriva con Qt 5.10), quindi installare il
traduttore non ritraduce ciò che è già a schermo: al cambio lingua l'app
**ricarica la radice QML**. *Trappola di `lupdate`*: riconosce solo le funzioni di
traduzione note (`tr()`, `QCoreApplication::translate()`), **non una funzione
wrapper scritta da noi** — le etichette di `airajson.cpp` sono quindi chiamate
`QCoreApplication::translate("AiraJson", …)` per esteso, altrimenti sparirebbero
dal catalogo. Nucleo app: **39/39** (le attese sono cambiate in inglese e il test
carica il `.qm` vero come fa `main.cpp`, verificando entrambe le lingue, il
ripiego e i formati numerici). Anteprime rigenerate in **due lingue**
(`docs/anteprima/` inglese, `docs/anteprima/it/` italiano), impostazioni comprese
la nuova riga della lingua.
## 6. Rischi noti
- **Dipendenza dal server**: se il bridge è spento, l'app non vede nulla. Mitigazione: unità