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
+48
View File
@@ -0,0 +1,48 @@
#ifndef TRANSLATOR_H
#define TRANSLATOR_H
#include <QObject>
#include <QPointer>
#include <QTranslator>
class Settings;
// Lingua dell'interfaccia.
//
// "" (vuoto) -> lingua del sistema (QLocale::system(), non QLocale(), che e' il
// locale predefinito e viene cambiato da setDefault), con ripiego
// sull'inglese: l'inglese e' la lingua sorgente delle stringhe,
// quindi se per il locale del telefono non esiste un catalogo Qt
// lascia il testo originale inglese.
// "it" -> italiano, dal catalogo installato in
// /usr/share/harbour-aira/translations (i .qm li genera qmake in
// build con CONFIG += sailfishapp_i18n).
//
// Qt 5.6 (Sailfish) non ha QQmlEngine::retranslate(): esiste da Qt 5.10, e prima
// il QML non si ri-traduce da solo quando cambia il traduttore. Per questo
// main.cpp collega languageChanged() alla ricarica della radice QML: l'effetto
// visibile e' che l'app torna alla home, ma nella lingua nuova.
class Translator : public QObject
{
Q_OBJECT
Q_PROPERTY(QString language READ language WRITE setLanguage NOTIFY languageChanged)
public:
explicit Translator(Settings *settings, QObject *parent = 0);
QString language() const;
void setLanguage(const QString &value); // salva nelle impostazioni e applica
void applySaved(); // all'avvio, PRIMA di creare la view
signals:
void languageChanged();
private:
void apply(const QString &value);
Settings *m_settings;
QPointer<QTranslator> m_translator;
};
#endif // TRANSLATOR_H