Viktigt
Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.
5. Lokalisering
QGIS användargränssnitt finns tillgängligt på flera språk.
Ett globalt alternativ i inställningarna gör det möjligt att åsidosätta språket i användargränssnittet som automatiskt identifierades av operativsystemet.
Hur siffror, valuta och datum representeras varierar beroende på land och det går också att ändra i inställningarna.
Ett annat alternativ i inställningarna gör det möjligt att definiera om den numeriska tusentalsavgränsaren måste användas.
Alla dessa funktioner implementeras genom QT-klassen QLocale som ger ett mycket komplett stöd för representation av numeriska typer och datumtyper.
För att detta system ska fungera måste några regler följas noggrant när numeriska värden visas i QGIS användargränssnitt och när användarinmatning konverteras till integral- eller flyttalsvariabler.
5.1. Konvertera tal till strängar
För strängar som skrivs ut på skärmen och är synliga för användarna ska du inte använda QString::number()
eftersom den inte tar hänsyn till locale-alternativ och alltid använder C
locale.
Använd inte heller stränginterpolation om du inte använder suffixet L
enligt vad som förklaras i QString documentation.
Använd istället QLocale().toString()
.
Exempel:
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
Varning
Ett undantag från denna regel är generering av strängar som ska skickas till externa program eller skript som förväntar sig C
talrepresentation (punkt som decimalavgränsare och ingen tusentalsavgränsare). QString::number()
måste användas i denna situation.
5.2. Konvertera strängar som användaren matar in till siffror
När du konverterar strängar från användarinmatning till siffror ska du inte använda QVariant::toDouble()
, QString::toDouble()
eller andra ::toDouble()
-metoder som finns i QT-klasser eftersom dessa metoder ignorerar lokala inställningar. Samma övervägande gäller för integraltyper och metoderna ::toInt()
eller ::toLongLong()
.
QLocale().toDouble()
eller QLocale().toInt()
och de andra konverteringsmetoderna QLocale()
kan användas i denna situation.
Som ett bättre alternativ tillhandahåller QGIS API några klasser som bör användas för numerisk användarinmatning med flyttal:
QgsDoubleSpinBox
visar numret enligt användarens språk och inställningar och validerar användarens inmatning med hjälp av QgsDoubleValidator
.
Valideringsklassen är tolerant och försöker tolka inmatningen genom att först kontrollera användarens språk och återgå till ”C”-språk om det inte finns någon matchning.
Den allmänna rekommendationen är att använda QgsDoubleSpinBox
för alla flyttalstyper I/O när det är möjligt eftersom den är mycket väl testad och validerar inmatningen korrekt. Som ett alternativ är det möjligt att använda klassen QgsDoubleValidator
oberoende av en sträng som erhållits från en annan widget (t.ex. en enkel QLineEdit
-widget).