5. Lokalisatie
De QGIS gebruikersinterface is beschikbaar in meerdere talen.
Een globale optie in de instellingen maakt het mogelijk de taal voor de gebruikersinterface, die automatisch wordt gedetecteerd vanuit het besturingssysteem, te overschrijven.
De weergave van getallen, valuta en datums varieert per land en is dus ook te overschrijven in de instellingen.
Een andere optie in de instellingen maakt het mogelijk te definiëren of het scheidingsteken voor duizendtallen moet worden gebruikt.
Al deze mogelijkheden werden geïmplementeerd door de QT-klasse QLocale, die een zeer volledige ondersteuning voor weergave van typen numeriek en datum verschaft.
Om dit systeem te laten werken moeten een paar regels zorgvuldig in acht worden genomen bij het weergeven van numerieke waarden in de gebruikersinterface van QGIS en bij het converteren van invoer van de gebruiker naar variabelen integral of floating point.
5.1. Getallen converteren naar tekenreeksen
Gebruik niet QString::number()
voor tekenreeksen die worden afgedrukt op het scherm en zichtbaar zijn voor gebruikers, omdat het geen rekening houdt met de opties voor de locale en altijd de locale C
gebruikt.
Gebruik ook niet interpoleren van tekenreeksen, tenzij u het achtervoegsel L
gebruikt, zoals uitgelegd in QString documentatie.
Gebruik in plaats daarvan QLocale().toString()
.
Voorbeeld:
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
Waarschuwing
Een te onthouden uitzondering op deze regel is het maken van tekenreeksen die zullen worden doorgegeven aan externe toepassingen of scripts die C
-weergave van getallen verwachten (punt als decimaal scheidingsteken en geen scheidingsteken voor duizendtallen). QString::number()
moet in deze situatie worden gebruikt.
5.2. Gebruikersinvoer converteren van tekenreeksen naar getallen
Bij het converteren van tekenreeksen van gebruikersinvoer naar getallen, gebruik dan niet QVariant::toDouble()
, QString::toDouble()
of andere methoden ::toDouble()
die beschikbaar zijn in klassen van QT, omdat die methoden instellingen voor de locale negeren. Hetzelfde is van toepassing voor typen integral en methoden ::toInt()
of ::toLongLong()
.
QLocale().toDouble()
of QLocale().toInt()
en de andere methoden voor conversie van ``QLocale()``kunnen in deze situatie worden gebruikt.
Als een beter alternatief verschaft de QGIS API een aantal klassen die zouden moeten worden gebruikt voor numerieke gebruikersinvoer van floating point:
QgsDoubleSpinBox
geeft het getal weer overeenkomstig de locale van de gebruiker en instellingen en het valideert de gebruikersinvoer met QgsDoubleValidator
.
De klasse voor valideren is tolerant en het zal proberen de invoer te interpreteren door eerst te controleren op de locale van de gebruiker en, als er geen overeenkomst wordt gevonden, terug te vallen op de locale C
.
De algemene aanbeveling is om QgsDoubleSpinBox
te gebruiken voor alle typen floating point I/O wanneer dat mogelijk is, omdat het heel goed getest is en het de invoer correct valideert. Als een alternatief is het mogelijk de klasse QgsDoubleValidator
onafhanklijk te gebruiken op een tekenreeks die is verkregen uit een ander widget (bijv. een eenvoudig widget QLineEdit
).