Важно
Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.
5. Локализация
Пользовательский интерфейс QGIS доступен на нескольких языках.
Глобальная опция в настройках позволяет переопределить язык пользовательского интерфейса, который был автоматически определен операционной системой.
Представление чисел, валюты и дат зависит от страны, и это также можно изменить в настройках.
Еще одна опция в настройках позволяет определить, нужно ли использовать числовой разделитель тысяч.
Все эти возможности реализованы с помощью класса QLocale QT, который обеспечивает очень полную поддержку представления числовых типов и типов дат.
Для того чтобы эта система работала, необходимо тщательно соблюдать несколько правил при отображении числовых значений в пользовательском интерфейсе QGIS и при преобразовании пользовательского ввода в интегральные переменные или переменные с плавающей точкой.
5.1. Преобразование чисел в строки
Для строк, которые выводятся на экран и видны пользователям, не используйте QString::number()
, потому что он не учитывает параметры локали и всегда использует локаль C
.
Также не используйте интерполяцию строк, если вы не используете суффикс L
, как объясняется в документации по QString.
Вместо этого используйте 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
для всех типов ввода/вывода с плавающей точкой, когда это возможно, поскольку он очень хорошо протестирован и правильно проверяет вводимые данные. В качестве альтернативы можно использовать класс QgsDoubleValidator
самостоятельно на строке, полученной от другого виджета (например, простого виджета QLineEdit
).