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
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
#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
|