Класс QTranslator
Класс QTranslator предоставляет поддержку локализации для вывода текста. Подробнее...
| Заголовок: | #include <QTranslator> |
| qmake: | QT += core |
| Наследует: | QObject |
Открытые функции
| QTranslator(QObject *parent = Q_NULLPTR) | |
| ~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 = Q_NULLPTR, int n = -1) const |
- 31 открытых функции унаследованы от 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(), Пример локализации, Пример Hello tr(), Пример с панелью со стрелками и Пример с принтером Troll.
Документация по членам функций
QTranslator::QTranslator(QObject *parent = Q_NULLPTR)
Конструирует пустой объект файла сообщений с родителем parent, который не подключен к файлу.
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 (по умолчанию «_.» для search_delimiters, если это пустая строка) и suffix.
- Имя файла очищенное без добавленного 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 + имя языка интерфейса + 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 = Q_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.6/qtranslator.html