Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » GoldenDict (Часть 1)

Модерирует : gyra, Maz

Maz (23-02-2017 11:53): GoldenDict (Часть 2)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249

   

slech



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору




 
Актуальная версия 1.5.0:
Windоws RC2-36 Qt 4.8.6 или Qt 5.6.2, последний EXE-файл: goldendict-1.5.0-RC2-50-g2fe314a(EXE only).7z.
Плагин dsengine.dll для Qt 5.6-based версии на Windows XP: dsengine_5.6.1_for_XP.7z
MacOSX RC2-36 (Qt 562) (рекомендуется для Mavericks & Yosemite); RC 483 (Qt 532) (рекомендуется для Mountain Lion); RC 425 (Qt 486)
 
GoldenDict — новая словарная программа, обладающая следующими особенностями:  
 
  • Графический интерфейс на основе табов, для создания которого использована библиотека Qt;
  • Интеграция с html-движком WebKit для корректного представления материалов в html-формате;
  • Поддержка подключения словарей в форматах: Babylon (.BGL), StarDict (.ifo/.dict./.idx/.syn), Dictd (.index/.dict(.dz)), ABBYY Lingvo (.dsl тексты и аудиоматериалы .lsa/.dat, .lsd - только в Android), XDXF, AARD, MDX/MDD, EPWING;
  • Система морфологии, которая находит основы слов при поиске, улучшая его результаты, а также дает рекомендации по правильному написанию слов. Используются обычные словари Hunspell/Myspell;
  • Поддержка индексации звуковых файлов в директориях, формируя из них словари аудио-произношений;
  • Поддержка отправки запросов в Wikipedia, Wiktionary и другие MediaWiki сайты;
  • Режим работы в роли глобальной для всего десктопа всплывающей подсказки, позволяющий выводить информацию для выделенного или помещенного в буфер обмена слова из любого текста внешней программы;
  • Для загрузки доступна версия, имеющая в комплекте набор англо-русско-английских словарей, словарей морфологии и примеры произношения слов на английском языке.  
     
    Программа позиционируется как функциональная замена StarDict, поддерживающая большее количество форматов файлов и более качественное их отображение. Программа умышленно не вводит собственного формата файлов, ставя вместо этого задачу наиболее полно поддержать все популярные существующие.
     
    Официальные Early Access билды для Windоws :: для MacOSX :: для Linux.
    Официальные Development билды для Windоws.
    Официальный форум поддержки GoldenDict.
    Официальный баг-трэкер.
     
    Параллельные топики:
    GoldenDict - New Level - Разработка новых форматов словарей для GD: DSLGD, HTMLGD; подключение речевых движков; режим закладок; варианты полнотекстового поиска.
     
    Как сжимать словари в формат .dz для использования в GoldenDict :: DictZip 1.12.1 (latest) :: Оболочка DictUI
     
    Ссылки на готовые сборки
     
    Ссылки на словари для GoldenDict

  • Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 11:34 26-04-2009 | Исправлено: Maz, 11:48 23-02-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    Так вот, идея в том, чтоб по стрингу article проходить только один раз регуляркой, например такой:

    Для этого надо написать такую регулярку, чтобы захватила сразу все вхождения. Функции IndexOf()/IndexIn() ищут только первое совпадение. Смотрите по тексту программы после блока с .replace() как идёт последовательная обработка для линков для другие статьи и скриптов.

    Цитата:
    Далее, этот лист итерируется и обрабатывается по switch case, к примеру

    Не годится, ибо оператор switch работает только с целыми величинами, никак не со строковыми.

    Цитата:
    В содержимое <script></script> вообще лезть не надо.

    Если не править атрибут "src", GD вообще не сможет подгрузить скрипт, просто не найдёт его.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 09:58 07-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    Для этого надо написать такую регулярку, чтобы захватила сразу все вхождения.

    Та регулярка, которую я привёл в предыдущем посте, захватит весь нужный контент, работая как пре-фильтр, наполнив массив всеми соответствующими тегами. А уже во время итерации применяются более комплексные регулярки. Но применяются они только к элементам массива.

    Цитата:
    Не годится, ибо оператор switch работает только с целыми величинами, никак не со строковыми.
    Ну тогда по старинке, через If IndexOf Else.

    Цитата:
    Если не править атрибут "src", GD вообще не сможет подгрузить скрипт, просто не найдёт его.

    Тут надо понимать, что подобный скрипт делает. А делает он как раз то, в чём мы ему пытаемся помочь, т.е. подгружает динамически внешний скрипт. ID он вычисляет по уже подключенному css. Т.е., если симулировать этот алгоритм в браузере, то скрпт подгрузится без всяких ухищрений, просчитав путь до CSS и прописав его до скрипта методом document.write.

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 11:34 07-11-2016
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    Та регулярка, которую я привёл в предыдущем посте, захватит весь нужный контент, работая как пре-фильтр, наполнив массив всеми соответствующими тегами.

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

    Цитата:
    Тут надо понимать, что подобный скрипт делает. А делает он как раз то, в чём мы ему пытаемся помочь, т.е. подгружает динамически внешний скрипт. ID он вычисляет по уже подключенному css.

    А что вы будете делать с простым скриптом типа <script src="some_script.js"></script>?

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 11:55 07-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    Ну попробуйте сами в отладчике посмотреть, что у вас получится, если не верите.  

    ОК. Я просто использовал обычный синтаксис. Для стринга будет так:

    Код:
    "(<\\s*(a(?:rea)?|link|script|img)\\s+[^>]*>)"

    Цитата:
    А что вы будете делать с простым скриптом типа <script src="some_script.js"></script>

    Так я о том и говорю. <script src="some_script.js"> попадёт в массив для обработки. А <script>.*</script> надо исключать. Отличить их просто - у инлайн тега <script> нет и не может быть атрибута src.
     
    З.Ы. Для гарантии можно сделать так "<script>\\s*\\S.*</script>" (для фильтра).

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 12:26 07-11-2016 | Исправлено: Romul81, 12:32 07-11-2016
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    ОК. Я просто использовал обычный синтаксис. Для стринга будет так:

    Да я не про то. Я о том, что поиск останавливается после нахождения вхождения, а это происходит на первом же линке. До остальных дело просто не дойдёт.

    Цитата:
    Так я о том и говорю. <script src="some_script.js"> попадёт в массив для обработки. А <script>.*</script> надо исключать.

    И чем это поможет, если у проблемного скрипта атрибут "src" вполне себе присутствует? Только модифицируется другим скриптом после загрузки. А инлайновые скрипты и так никто не трогает.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 12:54 07-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    Я о том, что поиск останавливается после нахождения вхождения, а это происходит на первом же линке. До остальных дело просто не дойдёт.  

    Поэтому я и говорил, что нужен метод, возвращающий массив всех совпадений. Аналог str.match(regexp) с флагом g в JavaScript.

    Цитата:
    И чем это поможет, если у проблемного скрипта атрибут "src" вполне себе присутствует? Только модифицируется другим скриптом после загрузки.

    У проблемного скрипта конструкция "<script src=" находится внутри инлайн скрипта <script>.*</script>, который я и предлагаю исключать. Т.е. article сначала проверяется на наличие <script>.*</script>, а последующая обработка для обычных <script src= удостоверяется по позиции, к примеру, или ещё как, что этот тег не пересекается с <script>.*</script>.
     
    Добавлено:

    Цитата:
    И чем это поможет, если у проблемного скрипта атрибут "src" вполне себе присутствует? Только модифицируется другим скриптом после загрузки.

    А если имелось в виду, что src в динамическом скрипте после загрузки отработает неверно и не найдёт нужный путь - то это проблема уже самого скрипта. Значит, он был написан неверно. Он должен сам вычислять путь по CSS, который к тому времени уже подключен.

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 13:30 07-11-2016
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    Поэтому я и говорил, что нужен метод, возвращающий массив всех совпадений.

    Такого штатного метода нету. Собственно, и особого смысла в нём нет, если можно всё проверять в цикле.

    Цитата:
    У проблемного скрипта конструкция "<script src=" находится внутри инлайн скрипта <script>.*</script>, который я и предлагаю исключать. Т.е. article сначала проверяется на наличие <script>.*</script>, а последующая обработка для обычных <script src= удостоверяется по позиции, к примеру, или ещё как, что этот тег не пересекается с <script>.*</script>.

    То есть надо найти тот самый </script>, который соответствует начальному <script>, а не находится внутри самого скрипта. Не самая тривиальная задача.
     
    PS. Немножко лирики на тему модификации больших программ.

    Цитата:
        "Маркетолог спрашивает программиста: в чём сложность поддержки большого проекта?
     
        Программист: ну представь, что ты писатель и поддерживаешь проект “Война и мир”. У тебя ТЗ — написать главу как Наташа Ростова гуляла под дождём по парку. Ты пишешь “шёл дождь”, сохраняешь, вылетает сообщение об ошибке “Наташа Ростова умерла, продолжение невозможно”. Почему умерла? Начинаешь разбираться. Выясняется, что у Пьера Безухова скользкие туфли, он упал, его пистолет ударился о землю и выстрелил в столб, а пуля от столба срикошетила в Наташу. Что делать? Зарядить пистолет холостыми? Поменять туфли? Решили убрать столб. Получаем сообщение “Поручик Ржевский умер.” Выясняется, что он в следующей главе облокачивается о столб, которого уже нет..."
     
        rol_foster: Сегодня полдня искали ошибку, из-за которой, образно говоря, у Наташи при прогулке с Пьером падают трусы. Одна из функций программы делает то, что делать не должна. Откатили на вчера - трусы на месте. Перелопатили весь код обновления, там вообще ни трусов, ни Наташи, ни даже Ржевского, тупо красят дом Болконских. Чуть ли не пошагово разбираем - все нормально. Но трусы падают. И, чтобы найти причину, придется перелопатить весь код, а это недели две минимум.
        В общем, начальник задумчиво посмотрел на девушку и волевым решением выдал Наташе подтяжки.


    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 13:52 07-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Такого штатного метода нету. Собственно, и особого смысла в нём нет, если можно всё проверять в цикле.

    ОК. Тогда надо думать над альтернативами. Но крутить по десять раз один и тот же стринг - это не дело.

    Цитата:
    То есть надо найти тот самый </script>, который соответствует начальному <script>, а не находится внутри самого скрипта. Не самая тривиальная задача.

    Логично. Именно так и думает браузер, закрывая скрипт сразу при нахождении </script>. Именно поэтому внутри <script>.*</script> такого закрывающего тега нет. Он пишется <\/script> либо ещё как (через плюс и т.п.).

    Цитата:
    PS. Немножко лирики на тему модификации больших программ.

    Я, кстати, в маркетинге работаю ))

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 14:25 07-11-2016
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Для посмотреть - код здесь, тестовый экзешник здесь.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:06 07-11-2016
    ddddddima

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У кого то есть DictUI?
    Хочу словари пожать, а с командной строкой долго придется игратся).

    Всего записей: 1209 | Зарегистр. 20-11-2007 | Отправлено: 21:47 07-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    WOW! Не поверите, я после курения QString и QRegExp именно этот вариант с pos и хотел предложить! Тем более, что он у вас уже использовался в // word cross links.
    Пока детально не разбирался, но похоже, что именно то, что я имел в виду. По регуляркам надо будет смотреть очень тщательно (по жадности в частности).
     
    Экзешник пока не тестировал - надо будет скомплировать тестовый словарь со всякими такими приблудами и потестить. Спасибо! В течение пары дней отпишусь.

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 21:47 07-11-2016
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ddddddima

    Цитата:
    У кого то есть DictUI?

    Тута. Dictzip лучше взять отсюда.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 22:13 07-11-2016
    ewild

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    а с командной строкой долго придется игратся).

     
    ddddddima
     
    DictUI не нужен, с моей скромной точки зрения.
     
    Играться особо не придется.
     
    Например, код ниже (из .bat/.cmd в произвольном месте) пожмет сразу все словари (рекурсивно, во всех подпапках, начиная от исходной папки словарей).

    Код:
    @echo off
     
    ::dictzip.exe --help>dictzip.txt
    ::Dictzip 1.12.1-Win32-1.0-Tvangeste
    ::Usage: dictzip [options] name
    ::-d --decompress      decompress
    ::-f --force           force overwrite of output file
    ::-h --help            give this help
    ::-k --keep            do not delete original file
    ::-l --list            list compressed file contents
    ::-L --license         display software license
    ::-c --stdout          write to stdout (decompression only)
    ::-t --test            test compressed file integrity
    ::-v --verbose         verbose mode
    ::-V --version         display version number
     
    SET DICz=x:\ваш\путь\к\dictzip.exe
    SET DSLf=y:\ваш\путь\к\словарям\GoldenDict\content
    @echo Compress DSL Dictionaries with Dictzip 1.12.1
    for /f "tokens=*" %%i in ('dir /b /s %DSLf%\*.dsl') do %DICz%\dictzip.exe "%%i"

     
    Код ниже (из .bat/.cmd из папки конкретного словаря) пожмет данный словарь (с принудительной заменой ранее сжатой версии, если таковая имеется).

    Код:
    @echo off
     
    ::dictzip.exe --help>dictzip.txt
    ::Dictzip 1.12.1-Win32-1.0-Tvangeste
    ::Usage: dictzip [options] name
    ::-d --decompress      decompress
    ::-f --force           force overwrite of output file
    ::-h --help            give this help
    ::-k --keep            do not delete original file
    ::-l --list            list compressed file contents
    ::-L --license         display software license
    ::-c --stdout          write to stdout (decompression only)
    ::-t --test            test compressed file integrity
    ::-v --verbose         verbose mode
    ::-V --version         display version number
     
    SET DICz=x:\ваш\путь\к\dictzip.exe
    @echo Compress DSL Dictionary with Dictzip 1.12.1
    @echo on
    %DICz%\dictzip.exe -f *.dsl

     
    Код ниже (из .bat/.cmd из папки конкретного словаря) разожмет данный словарь (при необходимости подправить что-то в данном словаре).

    Код:
    @echo off
     
    ::dictzip.exe --help>dictzip.txt
    ::Dictzip 1.12.1-Win32-1.0-Tvangeste
    ::Usage: dictzip [options] name
    ::-d --decompress      decompress
    ::-f --force           force overwrite of output file
    ::-h --help            give this help
    ::-k --keep            do not delete original file
    ::-l --list            list compressed file contents
    ::-L --license         display software license
    ::-c --stdout          write to stdout (decompression only)
    ::-t --test            test compressed file integrity
    ::-v --verbose         verbose mode
    ::-V --version         display version number
     
    SET DICz=x:\ваш\путь\к\dictzip.exe
    @echo Decompress DSL Dictionary with Dictzip 1.12.1
    @echo on
    %DICz%\dictzip.exe -d *.dz

    Всего записей: 1195 | Зарегистр. 13-08-2005 | Отправлено: 01:03 08-11-2016 | Исправлено: ewild, 02:16 08-11-2016
    ddddddima

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    ewild
    Спасибо

    Всего записей: 1209 | Зарегистр. 20-11-2007 | Отправлено: 01:50 08-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    Не годится, ибо оператор switch работает только с целыми величинами, никак не со строковыми.  

    А если так:

    Код:
    int firstCharCode;
     
    if( !linkType.isEmpty())
     
    firstCharCode = linkType.at( 0 ).toUpper().toLatin1().toInt()
     
    switch( firstCharCode )
    {
    case 65:
        // A;
    case 73:
        // I (img);
    case 76:
        // L (link);
    case 83:
        // S (script)
    }

    ? Но вопрос, лучше ли это, является, скорее риторическим.

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 12:05 08-11-2016
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    ? Но вопрос, лучше ли это, является, скорее риторическим.

    Лучше с точки зрения эффективности, хуже с точки зрения читаемости кода. Учитывая мизерность выигрыша по первому параметру, стоит отдать предпочтение второму.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 12:56 08-11-2016
    logmaster



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, найти морфологический словарь для эсперанто. Понимаю что это Hunspell словарь, но как его к GoldenDict приспособить?

    Всего записей: 647 | Зарегистр. 22-04-2002 | Отправлено: 00:04 10-11-2016 | Исправлено: logmaster, 00:04 10-11-2016
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    logmaster> Помогите, пожалуйста, найти морфологический словарь для эсперанто.  Понимаю что это Hunspell словарь...
     
    Myspell’овский.  Он так, обычно, и называется — myspell-eo.  Думаю, в поставке вашей операционной системы он есть.  Ну у меня, по крайней мере, так.
     
    > как его приспособить
     
    Никаких особых приспособлений не надо, сабж с ними умеет работать «из коробки».

    ----------
    Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:13 10-11-2016
    logmaster



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG
    В поставке Windows, естественно, myspell-eo нет, как нет вообще Hunspell словарей.
     Большое спасибо за линк на Debian - распаковал, нашел eo.aff и eo.dic.  
    Вроде стало куда лучше, чем без них
    А что там делают eo_XX.aff и eo_XX.dic? Goldendict не говорит, что словарей два.
    ---
    Понял, XX - это Simlink.

    Всего записей: 647 | Зарегистр. 22-04-2002 | Отправлено: 02:54 10-11-2016 | Исправлено: logmaster, 04:57 10-11-2016
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
     
    Простите за задержку с ответом. Просмотрел код функции filterResource и сделал кое-какие правки (срок хранения месяц).
     
    Вкратце. Изменил основную регулярку allLinksRe, иначе, inlineScriptRe могла бы не захватить тег.
    Перетрусил, также остальные регулярки. Не пугайтесь конструкций типа (?:(?!\ssrc\s*=)[^>])*\ssrc\s*= - это сделано для того, чтоб предотвратить откат в жадных регулярках. Плюс бонусом мы гарантированно захватываем первое вхождение src (если их по какой-то причине больше).
    В закавыченных регулярках поменял нумерацию групп - одну группу выделил для захвата кавычки. Раньше регулярка могла найти такое атрибут="значение'. Сейчас кавычки должны быть одинаковыми.
     
    Есть ещё куда оптимизировать )). Например в "сдвоенных" заменах есть смысл выполнять вторую, только если не сработала первая. Потому как практически все значения атрибутов закавычены, вторая регулярка будет отрабатывать впустую. Гляньте, как я изменил секцию замен для "link" - сначала stylesRe и если не находится, тогда stylesRe2. Правда, не знаю, правильно ли это в плане синтаксиса. Если сочтёте полезным, может остальные "сдвоенные" замены сделаете по тому же принципу?

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 15:23 12-11-2016 | Исправлено: Romul81, 15:23 12-11-2016
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249

    Компьютерный форум Ru.Board » Компьютеры » Программы » GoldenDict (Часть 1)
    Maz (23-02-2017 11:53): GoldenDict (Часть 2)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru