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
クラスを独立して使用することが可能です。