Qt Linguist: перевод внутри не наследников и Заключительные штрихи
Содержание:
1. Функция tr(), утилиты lupdate и lrelease;
2. Класс QTranslator и Смена языка интерфейса;
3.Перевод внутри не наследников и Заключительные штрихи (Вы читаете данный раздел).
[/center]
Отдельного внимания заслуживает перевод внутри классов, которые не являются наследниками QObject. Ведь функция tr() - член именно этого класса. Есть два решения задачи: первая - вместо tr() пользоваться статичной функцией:
Она, как и tr(), распознается утилитой lupdate при сканировании исходного кода. Параметр context в ней - имя класса, а sourceText - строка, перевод которой вы желаете получить.
Второй вариант решения этой задачи - прибегнуть к знаменитой системе макросов Qt, которая творит чудеса. Если в описание класса добавить макрос Q_DECLARE_TR_FUNCTIONS, то функцию tr() можно будет использовать в функциях этого класса. Пример:
После такого объявления MyClass мы можем использовать в функциях этого класса функцию tr().
Существуют еще тонкости использования механизма перевода при работе Qt-приложения в системе Mac OS - они частично описаны в документации Qt. «Частично» потому, что вас отправляют за подробностями на недоступные веб-страницы. Я не знаток разработки ПО под Mac OS, поэтому посоветовать ничего не могу. И напоследок - об утилите lupdate. Когда вы удаляете из исходника некие строки, «помеченные» функцией tr (либо translate), при обработке исходника программой lupdate в TS-файлах остаются записи, относящиеся к удаленным строкам. Чтобы их не было, lupdate следует запускать с параметром -no-obsolete. Затем, конечно, следует скомпилировать TS-файлы при помощи lrelease или в Qt Linguist.
Qt Linguist очень удобен для перевода - лучше, чем обычный текстовый редактор. В Qt Linguist можно быстро перемещаться к не имеющим перевода строкам, делать разные отметки, добавлять примечания, видеть статистику. Бывают иногда крайние случаи, когда файл перевода поврежден и Qt Linguist не может его открыть. Приходится прибегнуть к текстовому редактору, чтобы исправить XML-разметку вручную. Но лично я сталкивался с этим лишь однажды за много лет работы.
Графические утилиты интересует Вас гораздо меньше, чем игровые автоматы? В таком случае, Вам следует знать, что лучшие игровые гаминаторы представлены тут. Это отличные игровые автоматы с частыми выигрышами, которые определенно точно придутся Вам по вкусу!
1. Функция tr(), утилиты lupdate и lrelease;
2. Класс QTranslator и Смена языка интерфейса;
3.
Перевод внутри не наследников QObject
Отдельного внимания заслуживает перевод внутри классов, которые не являются наследниками QObject. Ведь функция tr() - член именно этого класса. Есть два решения задачи: первая - вместо tr() пользоваться статичной функцией:
QString QCoreApplication::translate (const char *context, const char *sourceText, -
const char *disambiguation = 0, Encoding encoding = CodecForTr)
const char *disambiguation = 0, Encoding encoding = CodecForTr)
Она, как и tr(), распознается утилитой lupdate при сканировании исходного кода. Параметр context в ней - имя класса, а sourceText - строка, перевод которой вы желаете получить.
Второй вариант решения этой задачи - прибегнуть к знаменитой системе макросов Qt, которая творит чудеса. Если в описание класса добавить макрос Q_DECLARE_TR_FUNCTIONS, то функцию tr() можно будет использовать в функциях этого класса. Пример:
class MyClass
{
Q_DECLARE_TR_FUNCTIONS(MyClass)
public:
MyClass();
};
{
Q_DECLARE_TR_FUNCTIONS(MyClass)
public:
MyClass();
};
После такого объявления MyClass мы можем использовать в функциях этого класса функцию tr().
Заключительные штрихи
Существуют еще тонкости использования механизма перевода при работе Qt-приложения в системе Mac OS - они частично описаны в документации Qt. «Частично» потому, что вас отправляют за подробностями на недоступные веб-страницы. Я не знаток разработки ПО под Mac OS, поэтому посоветовать ничего не могу. И напоследок - об утилите lupdate. Когда вы удаляете из исходника некие строки, «помеченные» функцией tr (либо translate), при обработке исходника программой lupdate в TS-файлах остаются записи, относящиеся к удаленным строкам. Чтобы их не было, lupdate следует запускать с параметром -no-obsolete. Затем, конечно, следует скомпилировать TS-файлы при помощи lrelease или в Qt Linguist.
Итоги по Linguist
Qt Linguist очень удобен для перевода - лучше, чем обычный текстовый редактор. В Qt Linguist можно быстро перемещаться к не имеющим перевода строкам, делать разные отметки, добавлять примечания, видеть статистику. Бывают иногда крайние случаи, когда файл перевода поврежден и Qt Linguist не может его открыть. Приходится прибегнуть к текстовому редактору, чтобы исправить XML-разметку вручную. Но лично я сталкивался с этим лишь однажды за много лет работы.
Графические утилиты интересует Вас гораздо меньше, чем игровые автоматы? В таком случае, Вам следует знать, что лучшие игровые гаминаторы представлены тут. Это отличные игровые автоматы с частыми выигрышами, которые определенно точно придутся Вам по вкусу!