Зрілий інтерфейс на qt linguist

Відео: Створюємо інтерфейс програми на Qt 4 + VS 2010. А.С

Зрілий інтерфейс на Qt Linguist
Коли дозріває сир, його вживають в їжу. Коли дозріває програма, їй, як правило, личить обзавестися деякими можливостями, властивими зрілим додатків. Почну з такою актуальною для більшості програм завдання, як переклад інтерфейсу на іншу мову.

Відразу обмовлюся, що не буду використовувати слова на кшталт «інтернаціоналізація» і «локалізація». За кальку «локалізація» вперше вхопилися медики: «локалізація болю» тощо.

Слідом потягнулися комп`ютерні люди, розуміючи під «локалізацією» переклад на рідну мову. Відповідно, під «інтернаціоналізацією» вони мають на увазі переклад на безліч мов, не лише на рідній.

Так ось, завдання перекладу можна вирішити різними способами, і найбільш популярні тут gettext і вбудовані в Qt кошти (втім, ніхто не заважає вам створити свій движок перекладу - це не так вже й складно).

Оскільки мова йде про Qt, скористаємося її ж засобами.

Функція tr ()

Процес перекладу здійснюється в кілька етапів. Перший - на рівні исходника на C ++. В Qt є функція tr (), а точніше - статична функція:
QObject :: tr (const char * sourceText, const char * disambiguation = 0, int n = -1)

В її параметрі треба передати строкове значення, яке ви хочете перевести. наприклад:
QLabel * l = new QLabel (tr ( "hello")) -

У цьому прикладі рядок "hello" буде «позначена» для перекладу. Більш того, коли підсистема перекладів Qt за допомогою тієї ж функції tr () знайде цей рядок, то підставить потрібний текст перекладу. Якщо, звичайно, все правильно підготувати.

Отже, всі рядки, які ми хочемо перевести, поміщаємо як параметри tr ():
QLabel * l1 = new QLabel (tr ( "hello")) - QLabel * l2 new QLabel (tr ( "world")) -

Утиліти lupdate і lrelease

До складу Qt входить утиліта lupdate. Вона, аналізуючи файли исходника, створює текстові файли перекладу, в форматі Qt TS XML і кодуванні cp1251. Ці файли можна змінювати в звичайному текстовому редакторі, але зручніше використовувати спеціальну програму - Qt Linguist (запускається командою linguist).




TS-файли не використовуються движком перекладу безпосередньо. Їх ще треба обробити утилітою lrelease, отримавши на виході файли в QM-форматі, які вже і завантажуються безпосередньо движком.

Отже, TS-медіа - щоб правки перекладу, а результат їх компіляції, QM-медіа - щоб завантаження. Файли обох типів слід включати в дистрибутив исходника. Для поширення програми в бінарному вигляді TS-файли вже не потрібні, а ось QM - знадобляться.

Де зберігати ці файли? Як програма знайде їх в системі? Щоб не замислюватися про те, де в такий-то операційній системі (або окремому дистрибутиві Linux) слід шукати допоміжні файли, я раджу використовувати систему ресурсів Qt.

Файли-ресурси впроваджуються безпосередньо в виконуваний бінарний файл, і місце розташування таких файлів завжди і всюди однаково, а для доступу до них треба лише випередити шлях префіксом «: /». Скажімо, ось так:
": /translations/ru.qm"

Як все це втілити в життя? Поставимо для прикладу таку задачу: є інтерфейс, спочатку англійською мовою, а ми хочемо зробити (і потім оновлювати) переклади на російську та німецьку.




Створимо в корені исходника порожній каталог translations. Тепер в файл проекту (.pro) додамо рядки:
TRANSLATIONS = translations / ru.ts translations / de.ts

Це означає, що коли ми дамо команду:
$ Lupdate назва_пакунка-проекта.pro

утиліта lupdate пройдеться по ісходникам на предмет пошуку функції tr (), і за результатами пошуку створить файли ru.ts і de.ts, спочатку без перекладу (але з порожніми місцями, куди треба вставити свої переклади рядків). Коли ви додасте туди перекладені рядки, кожний наступний виклик lupdate буде лише оновлювати ці файли, які не затираючи вже перекладені рядки.

Назви «ru» і «de» я вибрав невипадково - це скорочені імена локалей. Під час роботи програми ми, отримавши ім`я поточної локалі, зможемо по ньому скласти ім`я необхідного файла з перекладом.

Але повернемося до справи: ще не завершена робота з файлом проекту (* .pro). Додаємо вміст каталогу translations в DISTFILES, щоб при виконанні команди make dist файли перекладу були включені в дистрибутив:
DISTFILES + = translations / *

Тепер в `.pro-файлі вкажемо файл ресурсу, який використовується програмою. У нашому прикладі нехай це буде test.qrc:
RESOURCES + = test.qrc

Найпростіший файл ресурсу в даному випадку виглядає так:


translations / ru.qm
translations / de.qm


Це означає, що всередині програми ми зможемо звертатися до файлів ресурсу по шляхах: /translations/ru.qm і: /translations/de.qm, як якщо б вони були частиною звичайної файлової системи.

Підготовчий етап завершено.

Помістіть в своєму исходнике рядки, які хочете перевести, в параметр макросу tr (). Запустіть lupdate.
В Qt Linguist завантажте TS-файл і зробіть кілька пробних перекладів рядків. Потім збережіть TS-файл, і виберіть пункт «Скомпілювати» або скористайтеся командою:
$ Lrelease назва_пакунка-проекта.pro

Повинні вийти QM-файли. виконайте:
$ qmake
$ make
$ Make dist

Так ви зможете переконатися, що файли перекладу включені в архів-дистрибутив исходника.
Перейдемо до наступного етапу - автоматичної завантаженні в програмі потрібного (за поточною локалі) перекладу.

ІНШЕ

Digify фото

Digify

Відео: Digify Africa: Email Marketing #DigiKnow Ідея самознищується повідомлень щосили використовується в месенджерах.…

Sdl: збірка за допомогою make фото

Sdl: збірка за допомогою make

Відео: C. Урок 12. Компіляція і система збирання (gcc, make)Етап 4. Складання за допомогою make Наведу мінімальний…

Ccleaner фото

Ccleaner

Відео: Що робити, якщо комп`ютер гальмує. Очищення Windows. Ccleaner Програма CCleaner покликана прискорити роботу…

Використання nepomuk фото

Використання nepomuk

NEPOMUK в Dolphin На рис. вище я червоним кольором зазначив і пошукове поле, і функції додавання коментарів і позначок.…

Як відновити вилучені файли? фото

Як відновити вилучені файли?

Відео: Як відновити вилучені файли в Windows Скільки разів у вашому житті було таких ситуацій, що ви випадково видаляли…

Установка sdl фото

Установка sdl

Відео: Tutorial: Setup SDL for Visual Studio 2012Етап 2. Python і Scons Цей етап знадобиться тільки для зборки за…

Як навчиться переводити? фото

Як навчиться переводити?

У наш час іноземні мові займають важливу роль в житті людей. Тому не тільки перекладачі, а й практично люди всіх…

» » Зрілий інтерфейс на qt linguist