Importante

La traduzione è uno sforzo comunitario you can join. Questa pagina è attualmente tradotta al 100.00%.

5. Localizzazione

L’interfaccia utente di QGIS è disponibile in più lingue.

Un’opzione globale nelle impostazioni permette di sovrascrivere la lingua dell’interfaccia utente che è stata rilevata automaticamente dal sistema operativo.

La rappresentazione di numeri, valuta e date varia a seconda del paese ed è anche sovrascrivibile nelle impostazioni.

Un’altra opzione nelle impostazioni permette di definire se deve essere usato il separatore numerico delle migliaia.

Tutte queste funzionalità sono implementate attraverso la classe QT https://doc.qt.io/archives/qt-5.15/qlocale.html che fornisce un supporto molto completo per la rappresentazione di tipi numerici e di date.

Per far si che questo sistema possa funzionare è necessario seguire attentamente alcune regole quando si visualizzano valori numerici nell’interfaccia utente di QGIS e quando si converte l’input dell’utente in variabili intere o in virgola mobile.

5.1. Conversione di numeri in stringhe

Per le stringhe che sono visualizzate sullo schermo e visibili agli utenti non usare QString::number() perché non prende in considerazione le opzioni di localizzazione e usa sempre il locale C.

Inoltre non usare l’interpolazione delle stringhe a meno che tu non utilizzi il suffisso L come spiegato nella documentazione di QString documentation.

Utilizzare invece QLocale().toString().

Esempio:

const QString localizedNumber = QLocale().toString( 1234.56 );
// localizedNumber will be:  1,234.56 using english or "C" locale
//                           1.234,56 using italian locale
//                            1234.56 using english or "C" locale without thousands separator
//                            1234,56 using italian locale without thousands separator

Avvertimento

Una notevole eccezione a questa regola è la generazione di stringhe che saranno passate ad applicazioni o script esterni che si aspettano una rappresentazione numerica C (punto come separatore decimale e nessun separatore delle migliaia). QString::number() deve essere usato in questa situazione.

5.2. Conversione di stringhe in ingresso dell’utente in numeri

Quando si convertono stringhe dall’input dell’utente a numeri non usare QVariant::toDouble(), QString::toDouble() o altri metodi ::toDouble() disponibili nelle classi QT perché questi metodi ignorano le impostazioni locali. La stessa considerazione si applica ai tipi interi e ai metodi ::toInt() o ::toLongLong().

In questa situazione è possibile utilizzare QLocale().toDouble() o QLocale().toInt() e gli altri metodi di conversione QLocale().

Come alternativa migliore, QGIS API fornisce alcune classi che dovrebbero essere utilizzate per l’input numerico in virgola mobile dell’utente:

QgsDoubleSpinBox visualizza il numero secondo la lingua e le impostazioni dell’utente e valida l’input dell’utente usando QgsDoubleValidator.

La classe del validatore è tollerante e cercherà di interpretare l’input controllando prima la lingua dell’utente e tornando alla sua lingua C se non c’è corrispondenza.

La raccomandazione generale è di usare QgsDoubleSpinBox per tutti i tipi di I/O in virgola mobile, quando è possibile, perché è molto ben testata e convalida correttamente l’input. In alternativa, è possibile utilizzare la classe QgsDoubleValidator indipendentemente da una stringa ottenuta da un altro widget (ad esempio, un semplice widget QLineEdit).