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.

All these features are implemented through the QLocale QT class which provides a very complete support for numeric and date types representation.

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.

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().

QLocale().toDouble() o QLocale().toInt() e gli altri metodi di conversione QLocale() possono essere usati in questa situazione.

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 testato e convalida correttamente l’input. In alternativa è possibile usare la classe QgsDoubleValidator indipendentemente da una stringa ottenuta da un altro widget (ad esempio un semplice widget QLineEdit).