5. 本土化

QGIS用户界面提供多种语言版本。

设置中的全局选项允许覆盖从操作系统自动检测到的用户界面语言。

数字、货币和日期的表示因国家/地区的不同而不同,在设置中也可以覆盖。

设置中的另一个选项允许定义是否必须使用数字千位分隔符。

所有这些功能都是通过 QLocale Qt类,它为数字和日期类型的表示提供了非常完整的支持。

为了使该系统正常工作,在QGIS用户界面中显示数值以及将用户输入转换为整型变量或浮点型变量时,需要仔细遵循几条规则。

5.1. 将数字转换为字符串

对于打印在屏幕上并对用户可见的字符串,请不要使用 QString::number() 因为它不考虑区域设置选项,并且总是使用 C 地点。

此外,不要使用字符串内插,除非您使用 L 后缀,如所述 QString documentation

使用 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() 或其他 ::toDouble() 方法在Qt类中可用,因为这些方法忽略区域设置。同样的注意事项也适用于整型和 ::toInt()::toLongLong() 方法:研究方法。

QLocale().toDouble()QLocale().toInt() 以及其他人 QLocale() 在这种情况下可以使用转换方法。

作为一种更好的替代方案,QGIS API提供了几个应用于浮点数字用户输入的类:

QgsDoubleSpinBox 根据用户区域设置和设置显示数字,并使用 QgsDoubleValidator

验证器类是容错的,它将尝试首先解释用户区域设置的输入检查,然后回退到 C 如果没有匹配项,则为区域设置。

一般的建议是使用 QgsDoubleSpinBox 对于所有浮点类型的I/O,只要有可能,因为它经过了很好的测试,并且正确地验证了输入。作为一种替代方法,可以使用 QgsDoubleValidator 独立于从另一个小部件获得的字符串(例如,简单的 QLineEdit 窗口小部件)。