Название: Автоматизация привода программы под требования Linguist Отправлено: DarkHobbit от Октябрь 07, 2014, 10:14 Добрый вечер.
Имеется некий немалый пласт унаследованых Qt-программ, в которых русские тексты ввалены прямо в исходники. Есть нестерпимый зуд привести их к нормальному виду (английские строки, tr(), файлы перевода). Насколько я понимаю, максимально формализуемый алгоритм здесь такой: 1) Обрамить все русские строки в tr() и повыкидывав костыли типа fromLocal8Bit(); 2) вытащить их в файл(ы) .ts (вероятно, здесь удастся воспользоваться lupdate, но я не знаю, схватит ли она нелатинские строки); 3) поставить в файле(ах) .ts "оригинал" на место перевода, где он и должен обретаться; 4) выполнить перевод .ts на английский; 5) по полученному .ts заменить все русские строки в исходниках на английский. Понятно, что шаг 4 будет делаться вручную. А вот есть ли какой-нибудь способ/утилита автоматизировать шаги 1, 3 и 5? (ну и 2 заодно, если строгая lupdate окажется работать в нештатных условиях) Первая мысль, приходящая в голову - написать три скрипта на перле :) Но может, кто-то эту задачу или некоторые её части уже решил? Название: Re: Автоматизация привода к программы под требования Linguist Отправлено: OKTA от Октябрь 07, 2014, 10:27 А не проще вытащить все русские слова, отдельно их перевести вручную, заменить в исходниках с указанием tr() и потом уже делать переводы лингвистом куда хочешь? :)
Название: Re: Автоматизация привода программы под требования Linguist Отправлено: DarkHobbit от Октябрь 15, 2014, 19:21 Ну вытащил я их до tr-изации в какой-то самописный файл. По идее, это должно быть что-то типа того же .ts, т.е. должна запоминаться связь вытащенных строк с оригиналом. Т.е. придётся написать свой аналог lupdate, ибо оригинальному нужен tr(). Далее после перевода надо написать утилиту, которая будет производить замену в исходниках и заодно "переворачивать" .ts, меняя местами оригинал и перевод. После этого уже при необходимости можно Лингвистом переводить на третий, чевёртый и прочие языки.
Нет, не сильно проще. Программ будет не три, а две, правда, но они будут сложнее. Я не буду отвергать этот вариант с порога (для пользователя он действительно чуть проще). Подумаю. Но работать за lupdate пока не очень охота :) Название: Re: Автоматизация привода программы под требования Linguist Отправлено: RSATom от Октябрь 17, 2014, 07:45 Ну вытащил я их до tr-изации в какой-то самописный файл. По идее, это должно быть что-то типа того же .ts, т.е. должна запоминаться связь вытащенных строк с оригиналом. Можно при вытаскивании сразу добавлять tr. Например, tstrings.h: Код: #pragma once а в MyDialog вместо текста использовать MyDialogLabelText upd: а можно еще и контекст поменять при необходимости. Код: #pragma once Название: Re: Автоматизация привода программы под требования Linguist Отправлено: DarkHobbit от Январь 02, 2015, 18:48 С шагом 2, кажется, наступила ясность. Если вместо tr() использовать trUtf8() (разумеется, при условии, что строки в программе действительно в этой кодировке), то lupdate замечательно вытаскивает их в .ts.
Linguist тоже не возражает против того, чтобы переводить русский источник на английский язык, и создаёт корректный .ts. Правда, просмотр исходника по выбранной ошибке (в правой части окна Linguist) происходит в битой кодировке, но тут уж ничего не попишешь. Осталось написать "переворачиватель". Название: Re: Автоматизация привода программы под требования Linguist Отправлено: DarkHobbit от Январь 26, 2016, 01:55 Дальнейшие эксперименты вылились в написание консольной программки, которую я назвал LInvert (по аналогии с lupdate и lrelease).
Процесс адаптации программ на Qt4/5 к требованиям Qt Linguist с применением LInvert включает в себя 4 шага:
Исходники - на гитхабе (https://github.com/DarkHobbit/linvert). Двоичных сборок я не делаю, поскольку программист, применяющий Qt, скорее всего, предпочтёт собрать программу под свою любимую ОС, версию Qt, архитектуру и разрядность процессора ;) Я проверял работу на 64-разрядной Debian Jessie. Замечания и пожелания приветствуются. |