Важно

Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.

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).