русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Русификация


Дата добавления: 2015-07-04; просмотров: 2608; Нарушение авторских прав


Проще всего будет модифицировать уже созданный вами проект Hello, но, если хотите, можете создать новый проект, благо вы это уже умеете.

Кстати, вместо кнопки мы теперь создадим пустое окно (12): первый параметр конструктора указывает на родительский элемент (в данном случае 0 – окно не имеет родителя), а второй – набор битовых флагов, влияющих на внешний вид окна (флаг Qt::Windows означает, что элемент будет выглядеть, как окно приложения, т.е. будет иметь строку заголовка с системными кнопками для сворачивания на панель задач, закрытия и т.д.). И укажем заголовок этого окна (13) – «Пустое окно Qt».

#include <QApplication>

#include <QMainWindow>

#include <QTextCodec>

 

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

 

QTextCodec* codec = QTextCodec::codecForName("CP1251");

QTextCodec::setCodecForTr(codec);

 

QMainWindow* mw = new QMainWindow(0, Qt::Window);

mw->setWindowTitle(QMainWindow::tr("Пустое окно Qt"));

mw->resize(400, 300);

mw->show();

 

return app.exec();

}

Рис. 5.1. Пустое окно Qt с кириллицей

 

Вот и появилось на экране пустое окошко…

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

Впрочем, как вы, наверное, заметили, все графические элементы в Qt можно создавать вручную (так мы еже создали кнопку и окно), но проще и нагляднее применять все же Qt Designer.


Qt Linguist. Создание переводимого интерфейса приложения

 

1. Перед тем, как приступить к выполнению этой части лабораторной работы прочтите раздел «Мультиязычность» теоретической части.



 

2. В качестве примера, рассмотрим процесс перевода приложения QReader, которое было написано нами в процессе выполнения прошлой лабораторной работы. Оно уже содержит все необходимые вызовы tr(). Откройте его в Qt Creator.

 

3. Прежде всего, необходимо внести изменения в файл проекта .pro, чтобы указать - какие языки будут поддерживаться приложением. Допустим, что мы собираемся включить поддержку немецкого, французского и английского языков, дополнительно к русскому, тогда необходимо в файл QReader.pro добавить раздел TRANSLATIONS:

TRANSLATIONS = QReader_de.ts \

QReader_fr.ts \

QReader_en.ts \

QReader_ru.ts

Здесь мы указали три файла переводов: для немецкого, французского и английского языков. Эти файлы будут созданы при первом запуске утилиты lupdate, а на последующих запусках будут просто дополняться.

 

Для продолжения работы с переводами необходимо собрать приложение.

 

4. Далее запускаем lupdate из меню (Инструменты – Внешние – Linguist – Обновить переводы), см. рис. 5.2.

 

Рисунок 5.2. Вызов утилиты lupdate.

 

Каждая строка, которая "завернута" в вызов tr(), заносится в .ts, с пустым местом для перевода. Строки, которые находятся в файле .ui, так же включаются в исходный файл перевода. Теперь в каталоге должны появиться три файла.

 

5. Перевод, в файлы QReader_de.ts, QReader_fr.ts и QReader_ru.ts, добавляется переводчиком, с помощью утилиты Qt Linguist. В данном случае – Вами. =)

Чтобы запустить Qt Linguist выберите пункт Qt | Qt Linguist в меню Пуск, либо найдите исполняемый файл в «<Путь установки Qt>\<№ версии Qt>\mingw48_32\bin\linguist.exe». Затем, с помощью меню File|Open, откройте файл с исходным текстом перевода. Осуществите перевод всех строк с русского на английский.

С левой стороны главного окна Qt Linguist находится список контекстов переводов. Для QReader существуют лишь контексты: "MainWindow" и "Find_Dialog". По центру вверху находится список строк для текущего контекста. Каждая строка отображается вместе с переводом и флагом Done ("Готово") в активном (если уже переведено) или пассивном состоянии (если перевод еще не готов). По центру вводится текст перевода для текущей строки.

 

Рисунок 5.3. Qt Linguist в действии

6. По окончании работы над переводом, файл .ts необходимо преобразовать в файл .qm. Здесь есть 2 варианта.

7.1. В приложении Qt Linguist выберите пункт меню File|Release (Файл|Скомпилировать). Обычно, после перевода нескольких строк, выполняются пробные запуски приложения, с созданным файлом .qm, чтобы визуально оценить качество перевода.

7.2. Запускаем lrelease из меню (Инструменты – Внешние – Linguist – Создать переводы), см. рис. 5.2.

Непереведенные строки, при пробном запуске приложения, будут отображаться на языке оригинала. Флаг Done никак не используется утилитой lrelease, он предназначен исключительно для переводчика, чтобы напоминать о том, какие строки имеют окончательный перевод, а какие требуют уточнения.

В случае внесения изменений в исходный код приложения, содержимое файлов .ts может "устареть". Чтобы этого не происходило нужно всякий раз запускать утилиту lupdate, добавлять перевод для вновь появляющихся строк и пересобирать файлы .qm. Некоторые команды разработчиков синхронизируют перевод так часто, насколько это только возможно, другие предпочитают дождаться окончательного релиза приложения и только тогда приступают к переводу.

Утилиты lupdate и Qt Linguist достаточно "умны". Переведенные строки, необходимость в которых уже отпала, все равно сохраняются в исходных файлах с переводами, на тот случай, если они могут понадобиться в будущем. При обновлении файлов .ts, утилита lupdate использует интеллектуальный алгоритм объединения, который помогает избежать лишней работы по переводу одинаковых строк в различных контекстах.

8. Теперь настало время подключить наш перевод посредством программного кода, например, подключим английский язык (в файле main.cpp):

QTranslator translator;

bool file_load=translator.load("QReader_en");

app.installTranslator(&translator);

По идее данный код должен работать и подключать к нашей программе английский язык (кстати, не забудьте подключить #include <QTranslator>), НО по неведанной мне причине, вопреки справочной системе и интернету – он НЕ работает(а именно: функция load не находит файл с переводом).

Посему необходимо будет пойти другим путем – попробуем задать путь к файлу напрямую (например):

QString tmp="C:\\QtSDK\\MyProject\\QReader-build-desktop\\debug\\QReader_en";

translator.load(tmp);

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

НО в данном случае путь будет задан жестко, что негативно отразиться на переносимости нашего ПО, посему:

QString tmp=qApp->applicationDirPath()+"\\QReader_en";

translator.load(tmp);

qApp->installTranslator(&translator);

На сей раз стоит снова обратить внимание на слеш, который стоит перед файлом с переводом – дело в том, что qApp->applicationDirPath() возвращает строку без слеша в конце. НО qApp->applicationDirPath()возвращает путь к исполняемому файлу, поэтому файлы перевода (.qm) стоит перебросить в новоиспеченную папку debug нашего проекта.

Это интересно.Подключив #include <QLocale> мы получим доступ к весьма специфичному коду:

translator.load("QReader_" + QLocale::system().name());

Эти строчки программного кода подключат к вашей программе родной язык компьютера! В нашем случае это будет русский (QLocale::system().name() – вернет ru).

 

Это полезно: найти примеры программ, использующих Qt Linguist можно в «<Путь установки Qt>\<№ версии Qt>\mingw48_32\examples\linguist»




<== предыдущая лекция | следующая лекция ==>
Кодировка | Динамическое переключение языков.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.337 сек.