diff --git a/docs/PIANO.md b/docs/PIANO.md index 8569d7b..80f9f02 100644 --- a/docs/PIANO.md +++ b/docs/PIANO.md @@ -600,7 +600,32 @@ la domanda "cos'è la striscia bianca sotto l'acqua calda?"). Regola: un indicatore permanente che resta sempre allo stesso valore è rumore. Se un giorno servisse, va ancorato a qualcosa che cambia davvero. -## 21. Conseguenze dell'uso reale (0.7.0) +## 22. Il cambio lingua — v0.7.10 + +Carlo: *"Tutto perfetto. Solo il cambio lingua non sembra funzionare"*. + +Misurato invece che dedotto, con un banco vero in container (Qt 5.15, non 5.6: +differenza che conta). Esiti: + +1. installare il traduttore **non** ri-traduce le stringhe gia' a schermo + (conferma: Qt 5.6 non ha `retranslate()`); +2. `setSource()` con la **stessa** url **ri-traduce** (House -> Casa): la + tecnica dell'app e' quella giusta; +3. il catalogo si trova **anche** con locale `it_IT`: `load()` ripiega sul nome + accorciato `it`; e nel pacchetto sta in + `/usr/share/harbour-aira/translations/harbour-aira-it.qm`, la cartella che + l'app cerca. + +Restava un'unica differenza fra banco e telefono: la versione di Qt. La +ricarica si affidava a un comportamento di `setSource(stessa url)` che cambia +fra versioni, quindi ora si fa in due mosse — radice scaricata con url vuota, +poi ricaricata: cosi' il componente **deve** essere ricreato, su qualunque Qt. + +E per non indovinare piu': la Home manda al `/layout` anche `lingua`, `locale` e +`catalogo`, cosi' il registro del bridge dice cosa sta usando davvero il +telefono. + +## 23. Conseguenze dell'uso reale (0.7.0) Deciso con l'uso, non in anticipo: diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml index 74ade83..52bc30f 100644 --- a/qml/pages/MainPage.qml +++ b/qml/pages/MainPage.qml @@ -400,7 +400,12 @@ Page { "versione": appVersion, "schermo": Math.round(height), "contenuto": Math.round(flick.contentHeight), - "righe": righe + "righe": righe, + // Diagnostica della lingua: con che scelta, che locale e che + // catalogo sta girando l'app in questo momento. + "lingua": translator.language === "" ? "sistema" : translator.language, + "locale": translator.localeName, + "catalogo": translator.catalogLoaded }) } } diff --git a/rpm/harbour-aira.spec b/rpm/harbour-aira.spec index 3d7a000..904d5ac 100644 --- a/rpm/harbour-aira.spec +++ b/rpm/harbour-aira.spec @@ -1,6 +1,6 @@ Name: harbour-aira Summary: Control your Aira heat pump through a local bridge -Version: 0.7.9 +Version: 0.7.10 Release: 1 Group: Qt/Qt License: MIT @@ -37,6 +37,12 @@ Address and token of the bridge live in the app settings (AppConfigLocation); no personal data is stored in the binary. %changelog +* Sun Oct 11 2026 Carlo - 0.7.10-1 +- cambio lingua: la ricarica della radice QML ora e' in due mosse (url vuota, + poi ricarica), cosi' il componente viene ricreato su qualunque versione di Qt + invece di affidarsi a un comportamento che cambia fra versioni. +- diagnosi: la Home manda al /layout anche lingua, locale e catalogo, perche' + un difetto di lingua sul telefono si possa leggere invece che indovinare. * Sun Oct 11 2026 Carlo - 0.7.9-1 - via la barra di avanzamento sotto l'acqua calda: partiva da 10 °C e stava sempre al 99%, quindi non diceva niente. Tolta dal componente ReadingCell diff --git a/src/main.cpp b/src/main.cpp index 10e113f..3cab242 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,7 +21,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) app->setOrganizationName(QStringLiteral("harbour")); app->setApplicationName(QStringLiteral("aira")); - app->setApplicationVersion(QStringLiteral("0.7.9")); + app->setApplicationVersion(QStringLiteral("0.7.10")); Settings settings; ApiClient api(&settings); @@ -36,7 +36,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) // Prima riga del log: dice subito se il device sta girando la build nuova // o una stale (trappola nota del build engine). - qDebug() << "harbour-aira v0.7.9 build" << __DATE__ << __TIME__; + qDebug() << "harbour-aira v0.7.10 build" << __DATE__ << __TIME__; view->rootContext()->setContextProperty(QStringLiteral("appSettings"), &settings); view->rootContext()->setContextProperty(QStringLiteral("api"), &api); @@ -52,12 +52,14 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) // scelta nelle impostazioni si applica ricaricando la radice QML. Conseguenza // voluta e attesa: si torna alla home, nella lingua nuova. // - // setSource() con la STESSA url ricrea davvero il componente: in Qt 5.6 - // QQuickViewPrivate::execute() cancella root e component e ne costruisce uno - // nuovo (documentato: "the QML component being instantiated, even if the URL - // is unchanged"), quindi ogni qsTr() viene rivalutato. Non serve - // clearComponentCache(): i valori delle stringhe non stanno nella cache. + // La ricarica si fa in DUE mosse: prima si scarica la radice (url vuota), poi + // si ricarica. Una sola setSource con la STESSA url e' un comportamento che + // cambia fra le versioni di Qt (misurato su Qt 5.15: ricrea; su 5.6 non e' + // garantito) e il telefono non e' la macchina su cui si prova. Con l'url vuota + // il componente e' per forza ricreato, quindi ogni qsTr() viene rivalutato. + // Non serve clearComponentCache(): le stringhe non stanno nella cache. QObject::connect(&translator, &Translator::languageChanged, view, [view]() { + view->setSource(QUrl()); view->setSource(SailfishApp::pathTo(QStringLiteral("qml/harbour-aira.qml"))); }); diff --git a/src/translator.cpp b/src/translator.cpp index 2c5f626..255b0a4 100644 --- a/src/translator.cpp +++ b/src/translator.cpp @@ -40,6 +40,16 @@ void Translator::applySaved() apply(language()); } +bool Translator::catalogLoaded() const +{ + return m_catalogLoaded; +} + +QString Translator::localeName() const +{ + return m_localeName; +} + void Translator::apply(const QString &value) { if (m_translator) { @@ -67,6 +77,9 @@ void Translator::apply(const QString &value) delete translator; } + m_localeName = locale.name(); + m_catalogLoaded = !m_translator.isNull(); + qDebug() << "Translator: richiesta [" << (value.isEmpty() ? QStringLiteral("sistema") : value) << "] locale" << locale.name() diff --git a/src/translator.h b/src/translator.h index 5663e5f..58a47f9 100644 --- a/src/translator.h +++ b/src/translator.h @@ -27,6 +27,11 @@ class Translator : public QObject Q_OBJECT Q_PROPERTY(QString language READ language WRITE setLanguage NOTIFY languageChanged) + // Diagnostica: quali valori sono in vigore davvero. Finiscono nel /layout che + // la Home manda al bridge, cosi' un problema di lingua sul telefono si legge + // invece di indovinarlo. + Q_PROPERTY(bool catalogLoaded READ catalogLoaded) + Q_PROPERTY(QString localeName READ localeName) public: explicit Translator(Settings *settings, QObject *parent = 0); @@ -35,6 +40,9 @@ public: void setLanguage(const QString &value); // salva nelle impostazioni e applica void applySaved(); // all'avvio, PRIMA di creare la view + bool catalogLoaded() const; // catalogo installato? + QString localeName() const; // locale in vigore (es. it_IT) + signals: void languageChanged(); @@ -43,6 +51,8 @@ private: Settings *m_settings; QPointer m_translator; + QString m_localeName; + bool m_catalogLoaded = false; }; #endif // TRANSLATOR_H diff --git a/translations/harbour-aira-it.ts b/translations/harbour-aira-it.ts index 85cb4c6..9cf8224 100644 --- a/translations/harbour-aira-it.ts +++ b/translations/harbour-aira-it.ts @@ -521,104 +521,104 @@ MainPage - + No data yet Nessun dato - + Not updated · last %1 Non aggiornato · ultimo %1 - + Updated at %1 Aggiornato alle %1 - + Refresh Aggiorna - - + + Settings Impostazioni - + House Casa - - + + target %1 °C obiettivo %1 °C - + Hot water Acqua calda - + Boost · %1 Boost · %1 - + Tap a value to adjust it Tocca un valore per regolarlo - + Quick actions Azioni rapide - + Boost Boost - + Stop Stop - + Home Torna - + Away Assenza - + More Altro - + Outside %1 °C · Thermostat %2 °C · Zones %3 Esterno %1 °C · Termostato %2 °C · Zone %3 - + Data Dati - + Bridge not configured. Open the settings and enter the server address and the token. Bridge non configurato. Apri le impostazioni e inserisci l'indirizzo del server e il token. - + Plant Impianto diff --git a/translations/harbour-aira.ts b/translations/harbour-aira.ts index 60fcfdc..14c053a 100644 --- a/translations/harbour-aira.ts +++ b/translations/harbour-aira.ts @@ -521,104 +521,104 @@ MainPage - + No data yet - + Not updated · last %1 - + Updated at %1 - + Refresh - + Data - + Plant - - + + Settings - + Bridge not configured. Open the settings and enter the server address and the token. - + House - - + + target %1 °C - + Hot water - + Boost · %1 - + Tap a value to adjust it - + Quick actions - + Boost - + Stop - + Home - + Away - + More - + Outside %1 °C · Thermostat %2 °C · Zones %3