Spec-Zone.ru › Qt 5.12

Класс QTranslator

Класс QTranslator обеспечивает поддержку локализации для вывода текста. Подробнее...

Заголовок: #include <QTranslator>
qmake: QT += core
Наследует: QObject
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Открытые функции

QTranslator(QObject *parent = nullptr)
virtual ~QTranslator()
virtual bool isEmpty() const
bool load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
bool load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
bool load(const uchar *data, int len, const QString &directory = QString())
virtual QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
  • 32 открытых функций унаследованы от QObject

Статические открытые члены

const QMetaObject staticMetaObject
  • 10 статических открытых членов унаследованы от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследован от QObject
  • 2 сигнала унаследованы от QObject
  • 9 защищённых функций унаследованы от QObject

Подробное описание

Класс QTranslator предоставляет поддержку локализации для вывода текста.

Объект этого класса содержит набор переводов из исходного языка на целевой язык. QTranslator предоставляет функции для поиска переводов в файле перевода. Файлы перевода создаются с помощью Qt Linguist.

Наиболее распространенное использование QTranslator: загрузить файл перевода, установить его с помощью QCoreApplication::installTranslator() и использовать его через QObject::tr(). Вот пример main() функции, использующей QTranslator:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator translator;
    // look up e.g. :/translations/myapp_de.qm
    if (translator.load(QLocale(), QLatin1String("myapp"), QLatin1String("_"), QLatin1String(":/translations")))
        app.installTranslator(&translator);

    QPushButton hello(QCoreApplication::translate("main", "Hello world!"));
    hello.resize(100, 30);

    hello.show();
    return app.exec();
}

Обратите внимание, что переводчик должен быть создан до создания виджетов приложения.

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

Поиск переводов

Возможно искать перевод с помощью translate() (как tr() и QCoreApplication::translate()). Функция translate() принимает до трех параметров:

  • context — обычно имя класса вызывающего tr().
  • source text — обычно аргумент к tr().
  • disambiguation — необязательная строка, которая помогает избежать неоднозначности при использовании одного и того же текста в одном и том же контексте.

Например, «Отмена» в диалоговом окне может иметь «Anuluj» при запуске программы на польском языке (в этом случае исходным текстом будет «Cancel»). Контекстом будет (обычно) имя класса диалогового окна; обычно комментария не будет, и переведённый текст будет «Anuluj».

Но это не всегда так просто. В испанской версии диалогового окна принтера с настройками для двусторонней печати и переплёта, скорее всего, потребуются как «Activado», так и «Activada» в качестве переводов для «Enabled». В этом случае исходный текст будет «Enabled» в обоих случаях, а контекстом будет имя класса диалогового окна, но два элемента будут иметь различия, такие как «двусторонняя печать» для одного и «переплёта» для другого. Эти различия позволяют переводчику выбрать соответствующий род для испанской версии и позволяют Qt различать переводы.

Использование нескольких переводов

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

Этот механизм позволяет «выбирать» или отдавать приоритет определённому переводу над другими; просто удалите перевод из приложения, передав его функции QCoreApplication::removeTranslator(), и переустановите его с помощью QCoreApplication::installTranslator(). Тогда он будет первым переводимым файлом, который будет проверяться на наличие соответствующих строк.

См. также QCoreApplication::installTranslator(), QCoreApplication::removeTranslator(), QObject::tr(), QCoreApplication::translate(), Пример I18N, Пример Hello tr(), Пример Arrow Pad и Пример Troll Print.

Документация по функциям членов

QTranslator::QTranslator(QObject *parent = nullptr)

Конструирует пустой объект файла сообщений с родителем parent, который не подключен к какому-либо файлу.

[virtual] QTranslator::~QTranslator()

Уничтожает объект и освобождает все выделенные ресурсы.

[virtual] bool QTranslator::isEmpty() const

Возвращает true , если этот переводчик пуст, иначе возвращает false. Эта функция работает с очищенными и неочищенными файлами перевода.

bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())

Загружает filename + suffix (".qm", если suffix не указан), который может быть абсолютным именем файла или относительным к directory. Возвращает true , если перевод успешно загружен; в противном случае возвращает false.

Если directory не указан, используется текущая директория (т.е., как currentPath()).

Предыдущее содержимое объекта переводчика отбрасывается.

Если имя файла не существует, будут проверены другие имена файлов в следующем порядке:

  1. Имя файла без присоединённого suffix.
  2. Имя файла с текстом после символа в search_delimiters удалённым ("_." по умолчанию для search_delimiters, если это пустая строка) и suffix.
  3. Имя файла удалённое без присоединённого suffix.
  4. Имя файла удалённое дальше, и т.д.

Например, приложение, работающее в локали fr_CA (франкоязычный Канада), может вызвать load("foo.fr_ca", "/opt/foolib"). load() затем попытается открыть первый существующий читаемый файл из этого списка:

  1. /opt/foolib/foo.fr_ca.qm
  2. /opt/foolib/foo.fr_ca
  3. /opt/foolib/foo.fr.qm
  4. /opt/foolib/foo.fr
  5. /opt/foolib/foo.qm
  6. /opt/foolib/foo

Обычно лучше использовать функцию QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &) вместо этого, поскольку она использует QLocale::uiLanguages() а не просто имя локали, которое относится к форматированию дат и чисел, а не обязательно к языку пользовательского интерфейса.

bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())

Загружает имя_файла + префикс + имя_языка_пользовательского_интерфейса + суффикс (".qm", если суффикс не указан), который может быть полным именем файла или относительным к каталогу. Возвращает true, если перевод загружен успешно; в противном случае возвращает false.

Предыдущее содержимое этого объекта переводчика отбрасывается.

Если имя файла не существует, проверяются другие имена файлов в следующем порядке:

  1. Имя файла без прикреплённого суффикса.
  2. Имя файла с частью языка пользовательского интерфейса после символа "_" удалённой и суффиксом.
  3. Имя файла с удалённой частью языка пользовательского интерфейса без прикреплённого суффикса.
  4. Имя файла с дальнейшим удалением части языка пользовательского интерфейса и т. д.

Например, приложение, работающее в локали с следующими языками пользовательского интерфейса - "es", "fr-CA", "de" может вызвать load(QLocale(), "foo", ".", "/opt/foolib", ".qm"). load() заменит '-' (дефис) на '_' (подчёркивание) в языке пользовательского интерфейса, а затем попытается открыть первый существующий читабельный файл из этого списка:

  1. /opt/foolib/foo.es.qm
  2. /opt/foolib/foo.es
  3. /opt/foolib/foo.fr_CA.qm
  4. /opt/foolib/foo.fr_CA
  5. /opt/foolib/foo.de.qm
  6. /opt/foolib/foo.de
  7. /opt/foolib/foo.fr.qm
  8. /opt/foolib/foo.fr
  9. /opt/foolib/foo.qm
  10. /opt/foolib/foo.
  11. /opt/foolib/foo

В операционных системах, где файловая система чувствительна к регистру, QTranslator также пытается загрузить версию имени локали в нижнем регистре.

Эта функция была добавлена в Qt 4.8.

bool QTranslator::load(const uchar *data, int len, const QString &directory = QString())

Эта функция перегружает load().

Загружает данные QM-файла data длиной len в переводчик.

Данные не копируются. Вызывающий код должен гарантировать, что data не будет удалён или изменён.

directory используется только для указания базового каталога при загрузке зависимостей QM-файла. Если у файла нет зависимостей, этот аргумент игнорируется.

[virtual] QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const

Возвращает перевод для ключа (context, sourceText, disambiguation). Если не найден, также пытается найти (context, sourceText, ""). Если и это не удаётся, возвращает пустую строку.

Примечание: Неполные переводы могут привести к неожиданному поведению: Если перевод для (context, sourceText, "") не предоставлен, метод в этом случае может фактически вернуть перевод для другого disambiguation.

Если n не равно -1, оно используется для выбора подходящей формы перевода (например, «Найдено %n файл» против «Найдено %n файлов»).

Если вам нужно программно вставлять переводы в QTranslator, эту функцию можно переопределить.

См. также load().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qtranslator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API