5. Localização

A interface de usuário do QGIS está disponível em vários idiomas.

Uma opção global nas configurações permite substituir o idioma da interface do usuário que foi detectado automaticamente no sistema operacional.

A representação de números, moeda e datas varia de acordo com o país e também é substituível nas configurações.

Outra opção nas configurações permite definir se o separador numérico de milhares deve ser usado.

Todos esses recursos são implementados através da classe QLocale <https://doc.qt.io/qt-5/qlocale.htm>`_ QT que fornece um suporte muito completo para representação numérica e de tipos de data.

Para fazer este sistema funcionar, algumas regras precisam ser seguidas cuidadosamente ao exibir valores numéricos na interface do usuário do QGIS e ao converter a entrada do usuário em variáveis ​​integrais ou de ponto flutuante.

5.1. Convertendo números em strings

Para strings que são impressas na tela e visíveis para os usuários, não use QString::número() porque não leva em consideração as opções de localidade e sempre usa C localidade.

Também não use interpolação de string a menos que você use o sufixo L conforme explicado na documentação do QString.

Use QLocalidade().toString() em vez disso.

Exemplo:

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

Aviso

Uma notável exceção a esta regra é a geração de strings que serão passadas para aplicações externas ou scripts que esperam representação numérica C (ponto como separador decimal e sem separador de milhares). QString::número() deve ser usado nesta situação.

5.2. Convertendo strings de entrada do usuário em números

Ao converter strings da entrada do usuário para números não use VarianteQ::paraoDobro(), QString::paraoDobro() ou outros métodos ::paraoDobro() disponíveis em classes QT porque estes métodos ignoram as configurações de localidade. A mesma consideração se aplica a tipos integrais e métodos ::paraInt() ou ::paraLongoLongo().

QLocalidade().paraoDobro() ou QLocalidade().toInt() e os outros métodos de conversão QLocalidade() podem ser usados ​​nesta situação.

Como uma alternativa melhor, a API do QGIS fornece algumas classes que devem ser usadas para entrada numérica de ponto flutuante do usuário:

:classe:`QgsCaixadeGiroDuplo <qgis.gui.QgsDoubleSpinBox>` exibe o número de acordo com a localidade e configurações do usuário e valida a entrada do usuário usando :classe:`QgsCaixadeGiroDuplo <qgis.gui.QgsDoubleValidator>`.

A classe validadora é tolerante e tentará interpretar a entrada verificando primeiro a localidade do usuário e voltando para a localidade C se não houver correspondência.

A recomendação geral é usar :classe:`CaixadeGiroDuploQgs <qgis.gui.QgsDoubleSpinBox>` para todos os tipos de E/S de ponto flutuante sempre que possível porque é muito bem testado e valida a entrada corretamente. Como alternativa, é possível usar a classe :classe:`ValidadorDuploQgs <qgis.gui.QgsDoubleValidator>` independentemente de uma string obtida de outro widget (por exemplo, um widget QLineEdit simples).