Spec-Zone.ru › Qt 5.14

Класс QTranslator

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

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

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

QTranslator(QObject *parent = nullptr)
виртуальный ~QTranslator()
виртуальный 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())
виртуальный QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const

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

Объект этого класса содержит набор переводов с исходного языка на целевой язык. 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")))
        QCoreApplication::installTranslator(&translator);

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

    hello.show();
    return QCoreApplication::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 и добавленным suffix ("_." — по умолчанию для search_delimiters, если это пустая строка).
  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())

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

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

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

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

Например, приложение, работающее в locale с такими языками пользовательского интерфейса: «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, оно используется для выбора соответствующей формы перевода (например, «найден файл» против «найдены файлы»).

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

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

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

Spec-Zone.ru

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