Недавно я заинтересовался вопросом - "А сколько у нас в ПП сегментов, перевод которых совпадает с оригиналом (совпадающие сегменты)?". Быстро набросал программку и получил следующий результат: из 100000 сегментов совпадающих 75000. Если просто выкинуть их из ПП (например, с помощью TMXCleaner), то потом все равно придется их вводить. Но можно сделать по-другому:
1. При следующем объединении выделить все совпадающие в отдельный файл (я ради интереса написал QTMXSplitter).
2. Переводчикам взять файл только с несовпадающими сегментами.
3. Переводить файлы как обычно.
4. При объединении объединить файлы переводчиков в один, извлечь из него совпадающие сегменты и объединить их с файлом, полученным в п. 1.
"+": Меньше размер ПП, меньше трафика, быстрее анализ в омеге.
"-": Больше работы объединяющему, некоторые сегменты придется помечать как переведенные заново.
Кто что думает по этому поводу?
Я думаю, что лучше из ПП переводчика вычленять новые сегменты, т.е. отдельная программа. И эту разностную ПП отправлять.
Для меня более важна скорость анализа в Омеге, чем объем пересылаемого файла.
P.S. А программу для diff'а TMX еще никто не писал?
Я написал программу для сравнивания двух файлов омеги.
Она создает новый файл омеги содержащий только сегменты, которых нет в первом файле, и сегменты, значение которых было изменено. Сейчас подчищу код и попробую зарегиться на гиториусе
На гиториусе зарегился, но он у меня ключи не принимает... Так что пока выкладываю тут.
Вот новая версия. Чуть пофиксил баги, доработал API для указания исходного языка и языка перевода. Будет пару часиков свободного времени и креативное настроение, напишу еще класс TMXMerger
P.S. Что-то гиториус у меня так ключи не принимает. Похоже какой-то глюк
Теперь исходники переехали на сюда - http://gitorious.org/qtmxtools
Добавил возможность объединения ПП из двух файлов. При этом программа берет сегменты которые есть только в одном файле, а для сегментов которые есть в обоих файлах и у которых различается перевод выводит оригинал, оба варианта и спрашивает какой оставить.
Kagami, я тут собрался документацию обновить, и решил собрать общую ПП (Novak куда-то пропал) и обнаружил странную вещь, Твоя программа дала разницу только для моей ПП, делал так:
L:\Repository\TrTools\qtmxtools\qtmxtools.d --diff comon.tmx alex977.tmx diffalex.tmx
L:\Repository\TrTools\qtmxtools\qtmxtools.d --diff comon.tmx kagami.tmx diffkagami.tmx
L:\Repository\TrTools\qtmxtools\qtmxtools.d --diff comon.tmx my.tmx diffmy.tmx
(имя исполняемого фала я изменил)Это по меньшей мере странно. Вроде ты все делал правильно. Вот только если ошибки нет, то ты получил бы 3 файла, если бы была ошибка, ты бы не получил ничего... А тут есть один файл.. Буду думать.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tmx SYSTEM "tmx11.dtd">
<tmx version="1.1">
<header creationtool="QTMXSplitter" creationtoolversion="0.3" segtype="sentence" adminlang="EN-US" srclang="EN-US"></header>
<body></body>
</tmx>
Т.е. за месяц ничего не появилось? Ведь проверялась Qt 4.6, и должны быть хоть какие-то отличия от 4.4 и у тебя и у Алекса
Скомпилил программу под виндой и она у меня вообще не работала - не видела параметры командной строки. Кажется я нашел баг в libqxt. Она не правильно парсит параметры под виндой. Попробуй сделать так:
diff --git a/3rdparty/libqxt/qxtcommandoptions.cpp b/3rdparty/libqxt/qxtcommandoptions.cpp
index a9711c6..76c4f98 100644
--- a/3rdparty/libqxt/qxtcommandoptions.cpp
+++ b/3rdparty/libqxt/qxtcommandoptions.cpp
@@ -489,7 +489,7 @@ void QxtCommandOptionsPrivate::parse(const QStringList& params)
param = params[pos];
pos++;
- if (!endFlags && ((flagStyle == QxtCommandOptions::Slash && param[0] != '/') ||
+ if (!endFlags && ((flagStyle == QxtCommandOptions::Slash && param[0] == '/') ||
(flagStyle != QxtCommandOptions::Slash && param[0] == '-')))
{
// tagged argument
@@ -225,10 +225,12 @@ int merge()
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
//Options parsing
+ options.setFlagStyle(QxtCommandOptions::DoubleDash);
+ options.setParamStyle(QxtCommandOptions::SpaceAndEquals);
options.addSection(QxtCommandOptions::tr("Modes"));;
options.add("split", QxtCommandOptions::tr("Split TMX file"),
QxtCommandOptions::NoValue, MODE_OPTION);
options.alias("split", "p");
options.add("diff", QxtCommandOptions::tr("Diff two TMX files"),
мне виндовые слэши не нравятся.Изменения однозначно были. После исправления бага в libqxt у меня создалось три файла без проблем. Проверял на WinXP SP3 Qt SDK 2010.02 (Qt 4.6.2).
P.S. Я не хотел жестко зашивать префикс параметров на "--", но, наверно, так все-таки удобнее будет.
Юр, ну как, получилось сделать diff?
P.S. Попробовал сделать --merge под виндой. Чертова разница в кодировках Сделал новую ветку locale, в которой добавил ключ --locale для установки кодировки принудительно. "--locale ?" выведет список доступных. Думаю "--locale CP866" сработает под виндой как надо.
Непонятно... у меня все делает... Какая у тебя версия Qt? Еще можно попробовать сразу сделать merge: "qtmxtools --merge common.tmx kagami.tmx merged1.tmx --locale CP866" и посмотреть, будет ли он выводить варианты для выбора.
Kagami, я разобрался, извиняюсь, что создал такую суматоху.
Первопричину я не выяснил. Но суть такова, что с файлами ПП, в какой-то момент намудрил. Взял по новой ваши файлы из рабочей копии и всё сработало. Но доку собирать буду в выходные, сейчас времени нет.
Чуть погодя выложу несколько терминов по которым обнаружил конфликт.
Мм... При объединении qtmxtools выводит сегмент, два варианта перевода и предлагает выбрать какой оставить (введя номер сегмента и нажать Enter). Ничего больше руками делать не надо.
Kagami, тут проблемка вылезла, делал diff, получил сообщение:
ASSERT: "isStartElement() && name() == "tuv"" in file src\abstracttmxreader.cpp, line 131
Сделал вот так вот:
//Q_ASSERT(isStartElement() && name() == "tuv");
if (!isStartElement() || name() != "tuv"){
qDebug() << "!isStartElement() || name() != \"tuv\". Line number ="
<< lineNumber();
qFatal("");
}
, т.е. хочу получить номер строки на которой споткнулся читатель, получил в консоли 636 349. Но в файле их всего 8 093
А можно файлики получить? попробую сам посмотреть.
P.S. У меня в планах есть мысль переписать это дело немного. Вынести эти классы в библиотеку и прикрутить гуй (ну и консольную версию оставить). Правда пока времени свободного почти нет:(
архив kot.tmx:
kot.zip ( 38.05 килобайт )
: 3
запускал так:
qtmxtools --diff qtrtt_2010.04.10.tmx kot.tmx diffkot.tmx
Все очень просто. Номер строки правильный. Ошибка произошла в qtrtt_2010.04.10.tmx. На этой строке какой-то непонятный тег <prop type="x-olf-flag">1</prop>. Интересно, откуда он взялся? Посмотрел на файл внимательней - там таких еще штук 14. Чем ты обрабатывал ПП?
UPD. Закоммитил на гиториус новую версию - она выводит номер строки, имя файла и какая ошибка.
Очень интересная штука. Надо подумать как добавить поддержку всех тегов...
Litkevich Yuriy, попробуй новую версию. У меня вроде отработало правильно.
угу, диф создался
Kagami, тут столкнулся с необходимостью в ещё одной функции - patch. Должно работать так:
qtmxtools.exe --patch qtrtt_2010.04.10.tmx qtrtt_diff_05.02_04.10.tmx common.tmx
Хехе, я как раз думал сегодня в эту сторону. Решил сделать так. При диффе сохранять в разностную ПП информацию является ли сегмент новым, а если нет, то исходный вариант? с помощью тегов <prop> и <note> (тогда можно будет diff поглядеть и откорректировать прямо в файлике). И добавить ключик --force [n] для режима --merge чтобы он выбирал указанный вариант - 1 или 2 (по умолчанию 2) - без запроса пользователя. Но если хочешь, могу и --patch сделать. Думаю вечером появится в гиториусе
мне больше подуше вариант классический. Т.е. разность это разность (но в случае с ПП, конечно, нужно чтобы это была полноценная память переводов, а не то, что делает unix'овая программа diff, т.е. без спец информации). А patch просто интуитивно понятный ключ.
Если есть интересные мысли по поводу специнформации, то мне, как пользователю, было бы удобнее разрешать её появление в tmx-файле только при дополнительном ключе. А по умолчанию, чтобы просто чистая ПП была.
П.С. к стати говоря проект твой весьма впечатляющий, хоть и маленький и не приметный на первый взгляд. Я думаю, надо тебе место в подфоруме проекты выделить. И сделать там два раздельчика русскоязычный и англоязычный. Пюс написать команде OmegaT, чтобы они добавили твой проект в свой раздел http://www.omegat.org/en/3rd_party.html. Многим инструмент понадобится. Тем более, что работает он шутсрее явовских
Добавил режим "patch". Для добавления специнформации в diff я сделаю дополнительный ключик.
P.S. Раздел на форуме можно сделать, но добавлять информацию на сайт омеги мне кажется рановато. Есть еще несколько вещей, которые я хотел бы сделать перед этим.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)