5. ローカライズ

QGISのユーザーインタフェースは、複数の言語が用意されています。

設定にあるグローバルオプションによりオペレーティングシステムから自動的に検出されたユーザーインタフェース言語を上書きすることができます。

数字、通貨記号及び日付は国によって異なり、それも設定で上書きすることができます。

設定にある他のオプションでは、千の位のセパレータを使うかどうかを決めることができます。

これらの機能の全ては、数字と日付の表現の完全なサポートを提供する Qlocale QTクラスにより実装されています。

QGISインタフェースで数値を表示させる際やユーザーの入力を整数や浮動小数点に変換 する際にこのシステムを機能させるためには、いくつかの規則を慎重に守ることが必要です。

5.1. 数字を文字に変換する

QString::number() はロケールオプションを考慮せず、常に C ロケールを使用するため、画面に表示され、ユーザーから見える文字列には使用しないでください。

また QString documentation で説明されているように、 L サフィックスを使用しない限り、文字列補間は使用しないでください。

代わりに QLocale().toString() を使ってください。

例:

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

警告

この規則の顕著な例外は、 C 数値表現(ドットを小数の区切りとして、千の区切りがない)を期待する外部のアプリケーションやスクリプトに渡す文字列を生成することです。このような場合には QString::number() を使用する必要があります。

5.2. ユーザー入力文字列を数字に変換する

ユーザー入力の文字列を数値に変換する場合、 QVariant::toDouble()QString::toDouble() 、QTクラスで利用できる他の ::toDouble() メソッドは使用しないでください、これらの方法はロケール設定を無視します。同じことが、整数型と ::toInt()::toLongLong() のメソッドにも当てはまります。

このような場合には QLocale().toDouble()QLocale().toInt() などの QLocale() 変換メソッドを使用することができます。

より良い選択肢として、QGIS APIは、浮動小数点数値のユーザー入力に使用すべきいくつかのクラスを提供します:

QgsDoubleSpinBox はユーザーのロケールや設定に合わせて数字を表示し、 QgsDoubleValidator によってユーザーの入力を検証します。

バリデータクラスは寛容で、まずユーザーのロケールをチェックし、 一致しない場合は C ロケールにフォールバックして入力を解釈しようと試みます。

一般的には、全ての浮動小数点型のI/Oに対して QgsDoubleSpinBox を使用することをお勧めします。なぜなら非常によくテストされていて、正しく入力を検証してくれるからです。別の方法として、他のウィジェット(例えば、単純な QLineEdit ウィジェット)から取得した文字列に対して QgsDoubleValidator クラスを独立して使用することが可能です。