Skip to content

Синхронизация английского перевода с актуальным русским источником#164

Open
Dmitriy83 wants to merge 2 commits intovbondarevsky:masterfrom
Dmitriy83:feature/sync-english-translation-with-russian
Open

Синхронизация английского перевода с актуальным русским источником#164
Dmitriy83 wants to merge 2 commits intovbondarevsky:masterfrom
Dmitriy83:feature/sync-english-translation-with-russian

Conversation

@Dmitriy83
Copy link
Copy Markdown

Что сделано

Английский перевод (src/en/) полностью пересобран из текущего русского источника (src/ru/). Исторический ручной перевод (PR #79, 2021) с тех пор сильно отстал — за это время в RU добавились методы, изменились сигнатуры, переехали серверы тестов и т.д. Этот PR закрывает разрыв.

Подход: не ручной перевод, а воспроизводимый pipeline на основе EDT LanguageTool (зависимый проект перевода). Все переводческие решения зафиксированы в словаре, post-build скрипты закрывают пробелы автогенерации, отдельный verifier охраняет публичный API от обратно-несовместимых изменений.

Как был сгенерирован EN

Pipeline и словарь живут в отдельной репе: https://github.com/Dmitriy83/httpconnector-translations

Ключевые компоненты:

  • dictionaries_en/ — зависимый проект перевода EDT (~1200 CamelCase + ~600 single-word записей)
  • scripts/pipeline/postbuild_patch.py — fixes остатков автогенерации (неправильные алиасы платформенных функций, регистр HTTP-методов, поля платформенных объектов с обратным порядком слов и т.д.)
  • scripts/pipeline/verify_api.py + api_schema.json — контракт публичного API (42 экспорта), сверяется на каждой пересборке
  • CLAUDE.md — детальная техническая документация

Совместимость публичного API

Все 42 экспортируемых метода КоннекторHTTP (имена, параметры, дефолты, поля возвращаемых структур) совместимы с историческим переводом. verify_api.py проходит без ошибок.

Единственная намеренная несовместимость: StrStartsWith (обёртка для СтрНачинаетсяС) больше не экспортируется — после фикса EDT-валидатора используется напрямую StrStartWith. В schema помечено "upstream_removed": true.

Вопрос к владельцу: где хранить словарь?

Сейчас словарь живёт в отдельной репе. Возможные варианты:

  • (a) Оставить как есть — словарь и pipeline в Dmitriy83/httpconnector-translations, я буду присылать PR с обновлённым src/en/ при изменениях в RU.
  • (b) Перенести в эту репу, например в dependent_translations/en/ — удобнее, если ты сам хочешь регенерировать EN из EDT при правках RU. Нужен EDT 2026.1+ с плагином LanguageTool.
  • (c) Как-то иначе — открыт к предложениям.

Если (b) — могу подготовить отдельный PR с переносом.

Известные падения тестов

12 из 70 тестов падают, все по причинам тестовой среды, а не перевода:

  • 9 — TLS-терминирующий прокси перед connectorhttp.ru возвращает http:// в JSON-теле ответа (тесты ждут https://).
  • 2 — текст исключения EN-платформы 1С отличается от RU: Test_Timeout ("Internet error: Timed out" вместо "Timeout exceeded"), Test_CorrectExceptionInMethodAsJson (EN-платформа в сообщении JSON deserialization тело ответа не возвращает).
  • 1connectorhttp.ru/redirect-to?url=https%3A%2F%2Fya.ru&status_code=301 сейчас отвечает 400 (Test_PostAndRedirect).

Те же тесты в RU-проекте, как я понимаю, ловят то же самое.

Dmitry Zhikharev and others added 2 commits April 26, 2026 11:34
The English translation in src/en/ had drifted significantly behind the
Russian source. The original EN was hand-written in 2021 (PR vbondarevsky#79) and
got partial updates since, but many additions to the RU side never made
it to EN — module rename, new exported methods, NewParameters fields,
test data processor attributes, the entire "Translate configuration"
docstring.

This PR replaces src/en/ with a fresh regeneration from the current
src/ru/ via EDT's dependent translation builder, post-processed by a
dictionary + scripts that reproduce the style of the historical hand
translation. Tooling and reproducibility steps live in a separate
public repo: https://github.com/Dmitriy83/httpconnector-translations

Highlights of what changed:

Module-header docstring (CommonModule.HTTPConnector):
  - Copyright 2017-2021 -> 2017-2023
  - Version: 2.3.1 -> 2.6.0
  - First-line comment "Connector: handy HTTP-client for 1C:Enterprise 8 platform"
    now matches the current RU wording.

Public API contract preserved (verified by api_schema.json + verify_api.py):
  - 42 exported methods, parameter names/defaults, and return-structure
    field names match the original 2021 hand translation. Verified
    automatically on every rebuild.
  - Single deliberate breaking change: StrStartsWith() wrapper is gone.
    Upstream RU source no longer wraps it; consumers must call the
    platform's StrStartWith() directly.

Quality gates passed:
  - 0 residual Cyrillic identifiers in code (CODE) and doc comments (DOC)
  - 0 EDT validator errors after whitelisting two known false-positives
    (StrStartWith — EDT's platform dict ships the wrong alias; and
    Cyrillic-mirror modules used by EDT's translation tooling)
  - API schema drift: clean
  - Module-header literal drift (year/version): clean

Pipeline highlights (full reproducibility steps in the translations repo):
  1. EDT clean + LanguageTool translate RU -> dependent EN project
  2. Cleanup orphan module directories left by dict renames
  3. Module-header drift check (year/version literals in the .trans
     Description= blob — EDT freezes these and never auto-refreshes)
  4. postbuild_patch.py — fix EDT residuals (platform aliases, HTTP
     verb literal case, Var_Key -> Key_, JSONDateWritingVariant
     enum path, etc.)
  5. check_translated.py — residual Cyrillic detector
  6. verify_api.py — API contract check
  7. EDT validator with whitelist
  8. Export to XML (10 files in src/en/)

Diff size (10 files, +2357 / -2022 lines) is large because the full
configuration was retranslated end-to-end.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The translation pipeline's camelcase dictionary contained an override
utf8=UTF8 (introduced for TextEncoding.UTF8) that over-applied to the
URL string literal in the test, rewriting /encoding/utf8 to /encoding/UTF8.
The connectorhttp.ru server treats path components case-sensitively, so
the response body did not contain the expected Russian sample text and
the StrFind assertion returned 0 instead of 3931.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@leemuar
Copy link
Copy Markdown
Collaborator

leemuar commented Apr 26, 2026

Связано с #97

@leemuar
Copy link
Copy Markdown
Collaborator

leemuar commented Apr 27, 2026

@Dmitriy83 колоссальная работа! Спасибо!

Я за то, чтобы все было тут, в этом репозитории.

Предлагаю начать с правки тестов и тестовой среды, я это сделаю в ближайшее время.
Дальше заберу текущий английский перевод в основную ветку
Затем обсудим как нужные для перевода материалы держать в этом репозитории. Я пока мало знаком с LanguageTool, надо погрузиться и понять что и как там

@Dmitriy83
Copy link
Copy Markdown
Author

Dmitriy83 commented Apr 27, 2026

@leemuar договорились. По поводу LT: если вы с ним не работали ранее, то, возможно, стоит созвониться на 15-30 мин. (зум, гугл мит, или просто можно в чате где-то текстом), я кратко покажу. Документация по нему не самая исчерпывающая, к сожалению. Я также не эксперт в работе с этим инструментом, особенно в переводе модели. Но, наверное, смогу немного сократить время входа.

Кроме того, нужно учитывать, что текущий перевод был выполнен не голым LT, а связкой LT (со словарем) + скриптовая постобработка. По объему подмен в коде LT отрабатывает примерно 99%, postbuild_patch.py доделывает оставшиеся специфические случаи, где словарь LT дает неправильный результат (неверные алиасы платформенных функций, регистр HTTP-методов в литералах, поля платформенных объектов с обратным порядком слов и т.п.). Весь пайплайн перевода работает хорошо с использованием агента ИИ (я использую Клод код). Именно он отвечал за написание скриптов постобработки и конечную верификацию дифа в пайплайне перевода.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants