Важно

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

5. Локализация

Пользовательский интерфейс QGIS доступен на нескольких языках.

Глобальная опция в настройках позволяет переопределить язык пользовательского интерфейса, который был автоматически определен операционной системой.

The representation of numbers, currency and dates varies according to the country and it is also overridable in the settings.

Еще одна опция в настройках позволяет определить, нужно ли использовать числовой разделитель тысяч.

All these features are implemented through the QLocale QT class which provides a very complete support for numeric and date types representation.

Для того чтобы эта система работала, необходимо тщательно соблюдать несколько правил при отображении числовых значений в пользовательском интерфейсе QGIS и при преобразовании пользовательского ввода в интегральные переменные или переменные с плавающей точкой.

5.1. Преобразование чисел в строки

Для строк, которые выводятся на экран и видны пользователям, не используйте QString::number(), потому что он не учитывает параметры локали и всегда использует локаль C.

Also do not use string interpolation unless you use the L suffix as explained in 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 для всех типов ввода/вывода с плавающей точкой, когда это возможно, поскольку он очень хорошо протестирован и правильно проверяет вводимые данные. В качестве альтернативы можно использовать класс QgsDoubleValidator самостоятельно на строке, полученной от другого виджета (например, простого виджета QLineEdit).