Класс 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 |
- 32 открытых функции унаследованы от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 2 сигнала унаследованы от QObject
- 11 статические открытые члены унаследованы от 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()).
Предыдущее содержимое объекта переводчика отбрасывается.
Если имя файла не существует, проверяются другие имена файлов в следующем порядке:
- Имя файла без добавленного suffix.
- Имя файла с удалённым текстом после символа в search_delimiters и добавленным suffix ("_." по умолчанию для search_delimiters, если это пустая строка).
- Имя файла без добавленного suffix, очищенное.
- Имя файла очищенное ещё дальше и т. д.
Например, приложение, работающее в локали fr_CA (франкоязычная Канада), может вызвать load("foo.fr_ca", "/opt/foolib"). load() затем попытается открыть первый существующий читаемый файл из этого списка:
/opt/foolib/foo.fr_ca.qm/opt/foolib/foo.fr_ca/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.qm/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 + имя языка UI + suffix (".qm", если suffix не указан), что может быть абсолютным именем файла или относительным к directory. Возвращает true, если перевод успешно загружен; в противном случае возвращает false.
Предыдущее содержимое объекта переводчика отбрасывается.
Если имя файла не существует, проверяются другие имена файлов в следующем порядке:
- Имя файла без добавленного суффикса.
- Имя файла с частью языка интерфейса после символа «_» удаленной и суффиксом.
- Имя файла с удаленной частью языка интерфейса без добавленного суффикса.
- Имя файла с далее удалённой частью языка интерфейса и т.д.
Например, приложение, работающее в локале с такими языками интерфейса - "es", "fr-CA", "de" может вызвать load(QLocale(), "foo", ".", "/opt/foolib", ".qm"). load() заменит '-' (дефис) на '_' (нижнее подчеркивание) в языке интерфейса, а затем попытается открыть первый существующий и читаемый файл из этого списка:
/opt/foolib/foo.es.qm/opt/foolib/foo.es/opt/foolib/foo.fr_CA.qm/opt/foolib/foo.fr_CA/opt/foolib/foo.de.qm/opt/foolib/foo.de/opt/foolib/foo.fr.qm/opt/foolib/foo.fr/opt/foolib/foo.qm-
/opt/foolib/foo. /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/archives/qt-5.11/qtranslator.html