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
70 lines
2.0 KiB
C++
70 lines
2.0 KiB
C++
#include "settings.h"
|
|
|
|
#include <QDebug>
|
|
#include <QDir>
|
|
#include <QStandardPaths>
|
|
|
|
QString Settings::configPath()
|
|
{
|
|
// Path canonico per la sandbox SailJail: con org/app impostati in main.cpp
|
|
// (harbour/aira) AppConfigLocation = ~/.config/harbour/aira, l'unica zona
|
|
// config persistente tra gli avvii.
|
|
const QString dir = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
|
|
QDir().mkpath(dir);
|
|
return dir + QStringLiteral("/aira.conf");
|
|
}
|
|
|
|
Settings::Settings(QObject *parent)
|
|
: QObject(parent)
|
|
, m_settings(configPath(), QSettings::IniFormat)
|
|
{
|
|
// Diagnostica: senza questa riga un problema di persistenza resta invisibile.
|
|
qDebug() << "Settings file:" << m_settings.fileName();
|
|
if (m_settings.status() != QSettings::NoError)
|
|
qDebug() << "Settings WARNING: file di configurazione non accessibile";
|
|
qDebug() << "Settings read: baseUrl=[" << baseUrl() << "] token impostato:" << !token().isEmpty();
|
|
}
|
|
|
|
QString Settings::baseUrl() const
|
|
{
|
|
return m_settings.value(QStringLiteral("baseUrl"), QString()).toString();
|
|
}
|
|
|
|
void Settings::setBaseUrl(const QString &value)
|
|
{
|
|
if (value == baseUrl())
|
|
return;
|
|
m_settings.setValue(QStringLiteral("baseUrl"), value);
|
|
m_settings.sync(); // le chiusure brusche perdono il flush del distruttore
|
|
emit baseUrlChanged();
|
|
}
|
|
|
|
QString Settings::token() const
|
|
{
|
|
return m_settings.value(QStringLiteral("token"), QString()).toString();
|
|
}
|
|
|
|
void Settings::setToken(const QString &value)
|
|
{
|
|
if (value == token())
|
|
return;
|
|
m_settings.setValue(QStringLiteral("token"), value);
|
|
m_settings.sync();
|
|
emit tokenChanged();
|
|
}
|
|
|
|
QString Settings::language() const
|
|
{
|
|
// Vuoto = non deciso dall'utente: si usa la lingua del sistema.
|
|
return m_settings.value(QStringLiteral("language"), QString()).toString();
|
|
}
|
|
|
|
void Settings::setLanguage(const QString &value)
|
|
{
|
|
if (value == language())
|
|
return;
|
|
m_settings.setValue(QStringLiteral("language"), value);
|
|
m_settings.sync();
|
|
emit languageChanged();
|
|
}
|