5. Localización

La interfaz de usuario de QGIS está disponible en varios idiomas.

Una opción global en la configuración permite anular el idioma de la interfaz de usuario que se detectó automáticamente desde el sistema operativo.

La representación de números, moneda y fechas varía según el país y también se puede anular en la configuración.

Otra opción en la configuración permite definir si se debe usar el separador numérico de miles.

Todas estas características se implementan a través de la clase QLocale QT que proporciona un soporte muy completo para la representación de tipos numéricos y de fecha.

Para que este sistema funcione, se deben seguir cuidadosamente algunas reglas al mostrar valores numéricos en la interfaz de usuario de QGIS y al convertir la entrada del usuario en variables integrales o de punto flotante.

5.1. Convertir números en cadenas

Para las cadenas que se imprimen en la pantalla y son visibles para los usuarios, no use QString::number() porque no tiene en cuenta las opciones de configuración regional y siempre usa la configuración regional C.

Tampoco use la interpolación de cadenas a menos que use el sufijo L como se explica en la documentación de QString.

Utilice QLocale().toString() en su lugar.

Ejemplo:

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

Advertencia

Una notable excepción a esta regla es la generación de cadenas que se pasarán a aplicaciones externas o secuencias de comandos que esperan representación de números C (punto como separador decimal y sin separador de miles). QString::number() debe usarse en esta situación.

5.2. Conversión de cadenas de entrada del usuario en números

When converting strings from user input to numbers do not use QVariant::toDouble(), QString::toDouble() or other ::toDouble() methods available in QT classes because these methods ignore locale settings. The same consideration applies to integral types and ::toInt() or ::toLongLong() methods.

QLocale().toDouble() o QLocale().toInt() y los otros métodos de conversión QLocale() se pueden usar en esta situación.

Como una mejor alternativa, la API de QGIS proporciona algunas clases que deben usarse para la entrada de usuario numérica de coma flotante:

QgsDoubleSpinBox displays the number according to user locale and settings and it validates the user input using QgsDoubleValidator.

La clase del validador es tolerante e intentará interpretar la entrada comprobando primero la configuración regional del usuario y recurriendo a la configuración regional C si no hay ninguna coincidencia.

La recomendación general es usar QgsDoubleSpinBox para todos los tipos de E/S de punto flotante siempre que sea posible porque está muy bien probado y valida la entrada correctamente. Como alternativa, es posible utilizar la clase QgsDoubleValidator de forma independiente en una cadena obtenida de otro widget (por ejemplo, un widget simple QLineEdit).