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.

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

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

Cuando conviertas cadenas de entrada del usuario a números no utilices QVariant::toDouble(), QString::toDouble() u otros métodos ::toDouble() disponibles en las clases QT porque estos métodos ignoran la configuración regional. La misma consideración se aplica a los tipos integrales y a los métodos ::toInt() o ::toLongLong().

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