Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разделение памяти переводов
Форум на CrossPlatform.RU > Документация > Переводы
Kagami
Недавно я заинтересовался вопросом - "А сколько у нас в ПП сегментов, перевод которых совпадает с оригиналом (совпадающие сегменты)?". Быстро набросал программку и получил следующий результат: из 100000 сегментов совпадающих 75000. Если просто выкинуть их из ПП (например, с помощью TMXCleaner), то потом все равно придется их вводить. Но можно сделать по-другому:
1. При следующем объединении выделить все совпадающие в отдельный файл (я ради интереса написал QTMXSplitter).
2. Переводчикам взять файл только с несовпадающими сегментами.
3. Переводить файлы как обычно.
4. При объединении объединить файлы переводчиков в один, извлечь из него совпадающие сегменты и объединить их с файлом, полученным в п. 1.
"+": Меньше размер ПП, меньше трафика, быстрее анализ в омеге.
"-": Больше работы объединяющему, некоторые сегменты придется помечать как переведенные заново.
Кто что думает по этому поводу?
Litkevich Yuriy
Я думаю, что лучше из ПП переводчика вычленять новые сегменты, т.е. отдельная программа. И эту разностную ПП отправлять.
Kagami
Для меня более важна скорость анализа в Омеге, чем объем пересылаемого файла.
P.S. А программу для diff'а TMX еще никто не писал?
Litkevich Yuriy
Цитата(Kagami @ 16.1.2010, 14:40) *
А программу для diff'а TMX еще никто не писал?
Я так и не нашёл времени.
Kagami
Я написал программу для сравнивания двух файлов омеги.
Она создает новый файл омеги содержащий только сегменты, которых нет в первом файле, и сегменты, значение которых было изменено. Сейчас подчищу код и попробую зарегиться на гиториусе :)
Kagami
На гиториусе зарегился, но он у меня ключи не принимает... Так что пока выкладываю тут.
Kagami
Вот новая версия. Чуть пофиксил баги, доработал API для указания исходного языка и языка перевода. Будет пару часиков свободного времени и креативное настроение, напишу еще класс TMXMerger ;)
P.S. Что-то гиториус у меня так ключи не принимает. Похоже какой-то глюк :(
Kagami
Теперь исходники переехали на сюда - http://gitorious.org/qtmxtools
Kagami
Добавил возможность объединения ПП из двух файлов. При этом программа берет сегменты которые есть только в одном файле, а для сегментов которые есть в обоих файлах и у которых различается перевод выводит оригинал, оба варианта и спрашивает какой оставить.
Litkevich Yuriy
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
(имя исполняемого фала я изменил)
Здесь comon.tmx - общая ПП с прошлого раза.
Может я не правильно делал?
Kagami
Это по меньшей мере странно. Вроде ты все делал правильно. Вот только если ошибки нет, то ты получил бы 3 файла, если бы была ошибка, ты бы не получил ничего... А тут есть один файл.. Буду думать.
Litkevich Yuriy
Цитата(Kagami @ 23.2.2010, 17:15) *
ты бы не получил ничего... А тут есть один файл.. Буду думать.
нет, я получил 3 файла, diff*, но два из них пустые (твой и Алекса):
<?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 и у тебя и у Алекса
Kagami
Скомпилил программу под виндой и она у меня вообще не работала - не видела параметры командной строки. Кажется я нашел баг в 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

После этой правки у меня все заработало как надо. Надо будет еще раз все проверить и написать разработчикам.

P.S. Под виндой надо использовать "/diff" вместо "--diff" и т.д. Надо будет поправить пример использования.
Litkevich Yuriy
Цитата(Kagami @ 23.2.2010, 18:39) *
Кажется я нашел баг в libqxt. Она не правильно парсит параметры под виндой. Попробуй сделать так:
это я исправил, там просто настройки нужно задать:
@@ -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"),
мне виндовые слэши не нравятся.

Я тебе на гиториусе "запрос на слияние" отправил

Собственно я озадачен тем, что ПП ни у тебя ни у Алекса не изменились, если это действительно так, то я соберу общую (добавив только свои изменения). Если же изменения были, надо прогу проверить.
Kagami
Изменения однозначно были. После исправления бага в libqxt у меня создалось три файла без проблем. Проверял на WinXP SP3 Qt SDK 2010.02 (Qt 4.6.2).

P.S. Я не хотел жестко зашивать префикс параметров на "--", но, наверно, так все-таки удобнее будет.
alex977
Цитата(Litkevich Yuriy @ 23.2.2010, 19:13) *
Собственно я озадачен тем, что ПП ни у тебя ни у Алекса не изменились, если это действительно так, то я соберу общую (добавив только свои изменения). Если же изменения были, надо прогу проверить.


Перевел "с нуля" porting4.html и scripting.html (1000+ сегментов, 1 Мб разницы с tmx от 07.12.2009). Также поправлял перевод на разных версиях (около 300 файлов, несколько сотен сегментов "до-перевода" и "пере-перевода", плюс исправление опечаток).
Litkevich Yuriy
Цитата(Kagami @ 23.2.2010, 23:12) *
Изменения однозначно были.
вот и я из-за этого озадачился, т.к. в каждом фале есть title, у которого стоит номер версии, и этот сегмент должен был добавится в память переводов.
Цитата(Kagami @ 23.2.2010, 23:12) *
P.S. Я не хотел жестко зашивать префикс параметров на "--", но, наверно, так все-таки удобнее будет.
вообще мне их творение не понравилось, ключей не так много, здесь было бы удобнее вручную всё сделать.
Kagami
Юр, ну как, получилось сделать diff?

P.S. Попробовал сделать --merge под виндой. Чертова разница в кодировках :( Сделал новую ветку locale, в которой добавил ключ --locale для установки кодировки принудительно. "--locale ?" выведет список доступных. Думаю "--locale CP866" сработает под виндой как надо.
Litkevich Yuriy
Цитата(Kagami @ 24.2.2010, 23:50) *
Юр, ну как, получилось сделать diff?
дык, я делал диф (который изначально описал) с помощью модифицированной версии (т.е. ключи с двойных тире) и на тот момент у меня получилось:
два пустых дифа и один не пустой.
Kagami
Непонятно... у меня все делает... Какая у тебя версия Qt? Еще можно попробовать сразу сделать merge: "qtmxtools --merge common.tmx kagami.tmx merged1.tmx --locale CP866" и посмотреть, будет ли он выводить варианты для выбора.
Litkevich Yuriy
Kagami, я разобрался, извиняюсь, что создал такую суматоху.

Первопричину я не выяснил. Но суть такова, что с файлами ПП, в какой-то момент намудрил. Взял по новой ваши файлы из рабочей копии и всё сработало. Но доку собирать буду в выходные, сейчас времени нет.

Чуть погодя выложу несколько терминов по которым обнаружил конфликт.
Kagami
Цитата(Litkevich Yuriy @ 16.3.2010, 15:03) *
Цитата(Kagami @ 16.3.2010, 16:36) *
P.S.Кстати, а у нас что-то объединение ПП затянулось...
ага, есть такое дело. Времени не хватает, т.к. приходится проверять, являются ли сегменты просто конфликтными, или они являются исправлениями старых переводов.

Да, это проблема. Но ее можно обойти. Пусть у нас есть старая общая ПП и три ПП переводчиков - твоя, моя, и Алекса. Сначала делаем три диффа - сравниваем старую общую ПП с ПП переводчиков. Получаем три файла отличий. И объединяем их. Все отличающиеся сегменты будут конфликтными. В результате будет общий дифф, который мы объединяем со старой общей ПП. В этом случае все отличающиеся сегменты будут исправлениями старых переводов.
Litkevich Yuriy
Цитата(Kagami @ 16.3.2010, 18:25) *
В результате будет общий дифф
в этом-то и проблема, уже эти три содержат конфликты между собой.
Я их по одному гружу в олифант, к ранее загруженой общей ПП. И там смотрю, если номер сегмента (олифант их нумерует по порядку импортирования) больше, значит это новый вариант перевода. Ну и пытаюсь понять, новый вариант лучше старого или наоборот. Лишний, конфликтующий, сегмент удаляю.

Но эта процедура, для свыше сотни сегментов, здорово утомляет глаза. Поэтому боюсь накосячить. Вынужден прерываться.

Цитата(Kagami @ 16.3.2010, 18:25) *
В этом случае все отличающиеся сегменты будут исправлениями старых переводов.
иногда эти исправления не соответсвуют нашему глоссарию, или просто содержат ошибки, поэтому они не всегда лучше старых.
Kagami
Мм... При объединении qtmxtools выводит сегмент, два варианта перевода и предлагает выбрать какой оставить (введя номер сегмента и нажать Enter). Ничего больше руками делать не надо.
Litkevich Yuriy
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
Kagami
А можно файлики получить? попробую сам посмотреть.
P.S. У меня в планах есть мысль переписать это дело немного. Вынести эти классы в библиотеку и прикрутить гуй (ну и консольную версию оставить). Правда пока времени свободного почти нет:(
Litkevich Yuriy
архив kot.tmx:Нажмите для просмотра прикрепленного файла
запускал так:
qtmxtools --diff qtrtt_2010.04.10.tmx kot.tmx diffkot.tmx


где qtrtt_2010.04.10.tmx - ПП, которую я выложил после объединения на FTP'шник
Kagami
Все очень просто. Номер строки правильный. Ошибка произошла в qtrtt_2010.04.10.tmx. На этой строке какой-то непонятный тег <prop type="x-olf-flag">1</prop>. Интересно, откуда он взялся? Посмотрел на файл внимательней - там таких еще штук 14. Чем ты обрабатывал ПП?

UPD. Закоммитил на гиториус новую версию - она выводит номер строки, имя файла и какая ошибка.
Litkevich Yuriy
Цитата(Kagami @ 25.4.2010, 21:39) *
какой-то непонятный тег <prop type="x-olf-flag">1</prop>. Интересно, откуда он взялся? Посмотрел на файл внимательней - там таких еще штук 14. Чем ты обрабатывал ПП?
это просто свойство, это допустимый тэг.
Обрабатывал Olifant'ом

хотя странно, что они там есть, видимо я забыл очистить флажки.

Я вот начинал переводить, да в октябре остановился, может быть будет полезным: Нажмите для просмотра прикрепленного файла

Посмотри в нём приложение "A. Sample Document" там приведён пример наиболее вероятного документа
Kagami
Очень интересная штука. Надо подумать как добавить поддержку всех тегов...
Litkevich Yuriy
Цитата(Kagami @ 26.4.2010, 1:41) *
Надо подумать как добавить поддержку всех тегов...
ну поддержка не обязательна. Желательно чтобы приложение просто не ругалось на разрешённые теги, но пусть их игнорирует
Kagami
Litkevich Yuriy, попробуй новую версию. У меня вроде отработало правильно.
Litkevich Yuriy
угу, диф создался
Litkevich Yuriy
Kagami, тут столкнулся с необходимостью в ещё одной функции - patch. Должно работать так:
qtmxtools.exe --patch qtrtt_2010.04.10.tmx qtrtt_diff_05.02_04.10.tmx common.tmx

в отличие от --merge программа ничего не должна спрашивать у пользователя, она просто должна применить разностную ПП (qtrtt_diff_05.02_04.10.tmx) к исходной, чтобы получилась новая.
В случае конфликтов приоритет отдаётся разностной ПП.

Сможешь такую штуку сделать?
Kagami
Хехе, я как раз думал сегодня в эту сторону. Решил сделать так. При диффе сохранять в разностную ПП информацию является ли сегмент новым, а если нет, то исходный вариант? с помощью тегов <prop> и <note> (тогда можно будет diff поглядеть и откорректировать прямо в файлике). И добавить ключик --force [n] для режима --merge чтобы он выбирал указанный вариант - 1 или 2 (по умолчанию 2) - без запроса пользователя. Но если хочешь, могу и --patch сделать. Думаю вечером появится в гиториусе :)
Litkevich Yuriy
мне больше подуше вариант классический. Т.е. разность это разность (но в случае с ПП, конечно, нужно чтобы это была полноценная память переводов, а не то, что делает unix'овая программа diff, т.е. без спец информации). А patch просто интуитивно понятный ключ.

Если есть интересные мысли по поводу специнформации, то мне, как пользователю, было бы удобнее разрешать её появление в tmx-файле только при дополнительном ключе. А по умолчанию, чтобы просто чистая ПП была.

П.С. к стати говоря проект твой весьма впечатляющий, хоть и маленький и не приметный на первый взгляд. Я думаю, надо тебе место в подфоруме проекты выделить. И сделать там два раздельчика русскоязычный и англоязычный. Пюс написать команде OmegaT, чтобы они добавили твой проект в свой раздел Third-party software. Многим инструмент понадобится. Тем более, что работает он шутсрее явовских
Kagami
Добавил режим "patch". Для добавления специнформации в diff я сделаю дополнительный ключик.
P.S. Раздел на форуме можно сделать, но добавлять информацию на сайт омеги мне кажется рановато. Есть еще несколько вещей, которые я хотел бы сделать перед этим.
Litkevich Yuriy
Цитата(Kagami @ 2.5.2010, 23:34) *
Есть еще несколько вещей, которые я хотел бы сделать перед этим.
тебе решать. Просто я пользуюсь почти каждый день. Т.к. я соорудил себе робота который готовит документацию для выкладывания на сайт. И блох в нём много ещё. Твоя программа позволяет мне очень просто делать разные файлики для проверки робота.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.