Предлагаю Вашему внимаю, простую, полезную утилитку для обработки ts — файлов.
Текущая версия 1.0
Мне она понадобилась сейчас для того что бы перевести приложение на другой язык используя сервисы распределённого перевода, которые не работают с ts — файлами,
а вместо этого принимают набор строк который потом же назад переведённым и возвращают.
На входе ts файл. Утилита парсит с приоритетом для тега <translation> (если он пустой используется тег <source>) и генерирует два файлв на выходе:
— .ts с хешами
— .txt файл со хешем и строкой
У меня один вопрос, почему не скриптовый язык(python)? Думаю такое можно сделать и в .bat или .sh. По моему для такой задачи лучше скрипт, который можно будет встроить в сборку. Хотя, можно постепенно наращивать функционал, добавить проверку наличия количества %number в исходной строкое и переведенной, GUI с автоматической отправкой на перевод и прочее .
Прелесть того же Qt Linguist в том, что переводчик, работая с ts, видит не только слово/фразу, которую надо перевести, но и контекст. А вот такого рода txt файл для качественного перевода недостаточен ИМХО.
N>>Утилита для скачивания доступна тут. N>>Git Repo: https://github.com/nen777w/ts_tool.git
I>У меня один вопрос, почему не скриптовый язык(python)? Думаю такое можно сделать и в .bat или .sh. По моему для такой задачи лучше скрипт, который можно будет встроить в сборку. Хотя, можно постепенно наращивать функционал, добавить проверку наличия количества %number в исходной строкое и переведенной, GUI с автоматической отправкой на перевод и прочее .
Да нужно было написать быстро, как говорят на коленке, а я как раз никогда не работал со XML средствами Qt, потом вдруг захотелось попробовать вообще все на Qt написать , в порядке экперимента, т.е. для меня "вообще всё" это без boost-а.
А на самом деле по хорошему, там надо выбросить все эти недоделки типа QCommandLineParser, QDir, QFileInfo, QTextStream и прочую ерунду разве что кроме QXmlStreamReader/Writer и втулить вместо этого нормальные boost::program_options/filesystem std:/iostream.
Но написал, оно работает, ну и отлично, отдал в паблик, может кто то что то допишет еще для обработки .ts файлов.
АШ>Прелесть того же Qt Linguist в том, что переводчик, работая с ts, видит не только слово/фразу, которую надо перевести, но и контекст. А вот такого рода txt файл для качественного перевода недостаточен ИМХО.
Я знаю. Но сервисы для распределённого web перевода не работают c .ts файлами.
Они берут строки и распределяют их по пулу своих переводчиков потом собирают их обратно и получается что локализация готова очень быстро.
К тому же у меня была еще такая проблема:
EN — версия это базовая версия, т.е. в коде все строки написаны на английском. В .ts есть поля:
<source>String from code OR typo</source>
и
<translation>Another string interpretation or typo fixing</translation>
Я давал например FR переводчику qtlinguist.exe, EN.ts и FR.ts и говорил что бы он открывал сразу 2 файла в лингвисте (он это может)
и переводил из того что написано в "<translation>" в EN вресии или из "<source>" если translation пуст.
В результате когда я проверял работу переводчик иногда ошибался и переводил то что было в "source"
Я понимаю что это больше вопрос ко мне и к порядку в .ts файлах.
Но на самом деле когда EN отдаешь на вычитку нейтиву то потом руками вносить в код правки из .ts файлов очень не удобно, а у qt утилит для этого нет.
Поэтому сейчас проще сделать экспорт EN.ts в .txt файл ts_tool при экспорте отдает приимущество <translation> тегу и отдать строки на перевод.
Аналогичная проблема. В ts в <source> кривой инглиш, в <translation> нормальный. То есть ваша утилита берет из <translation> или из <source>, если он пуст, я правильно понимаю? Если так, то это просто здорово.
1) Имхо, кавычки лишние.
2) Неплохо бы отдельным ключом исключать obsolete. Я специально оставляю в ts obsolete. иногда оттуда может понадобиться перевод. А отдавать их переводчику не надо.
Здравствуйте, Qt-Coder, Вы писали:
QC>Здравствуйте, nen777w, Вы писали:
QC>Аналогичная проблема. В ts в <source> кривой инглиш, в <translation> нормальный. То есть ваша утилита берет из <translation> или из <source>, если он пуст, я правильно понимаю? Если так, то это просто здорово.
Здравствуйте, Qt-Coder, Вы писали:
QC>1) Имхо, кавычки лишние.
Тоже думал над этим, но добавил т.к. у меня в некоторых строках есть суфиксные и префиксные пробелы и табуляции.
QC>2) Неплохо бы отдельным ключом исключать obsolete. Я специально оставляю в ts obsolete. иногда оттуда может понадобиться перевод.
Сори не допёр сперва. Т.е. утилита подхватывает obsolete записи. Ок пофиксю.
Здравствуйте, nen777w, Вы писали:
N>Тоже думал над этим, но добавил т.к. у меня в некоторых строках есть суфиксные и префиксные пробелы и табуляции.
То есть, это попытка защититься от косяков переводчика? Имхо не поможет, они могут и внутри кавычек удалить "лишнее".
Такие строки надо дробить на более мелкие. У переводчика не должно быть ничего лишнего, только текст.
N>Сори не допёр сперва. Т.е. утилита подхватывает obsolete записи. Ок пофиксю.
Ждемс версию 2.0 ))
Add mode --with-unfinished for include unfinished records to result .txt file,
and --with-vanished for include obsolete records to result .txt file.
Rename mode XML to TS
Здравствуйте, nen777w, Вы писали:
N>>>Сори не допёр сперва. Т.е. утилита подхватывает obsolete записи. Ок пофиксю. QC>>Ждемс версию 2.0 ))
N>Обновил: http://rsdn.ru/forum/cpp.qt/6242302.1
N>>>>Сори не допёр сперва. Т.е. утилита подхватывает obsolete записи. Ок пофиксю. QC>>>Ждемс версию 2.0 ))
N>>Обновил: http://rsdn.ru/forum/cpp.qt/6242302.1
Гм... интересно а какой атрибут стоит у <translation> тега (я так понимаю вы используется Qt 4-й версии)
Может даже лучше, если можно скинуть мне .ts файлик?
nen777w@gmail.com
Здравствуйте, nen777w, Вы писали:
N>Гм... интересно а какой атрибут стоит у <translation> тега (я так понимаю вы используется Qt 4-й версии) N>Может даже лучше, если можно скинуть мне .ts файлик? N>nen777w@gmail.com