Skip to content

Английский как нейтральный язык в заданиях + ресинхрон локалей en/es - #373

Merged
fey merged 3 commits into
mainfrom
fix/neutral-english-in-exercises
Aug 4, 2026
Merged

Английский как нейтральный язык в заданиях + ресинхрон локалей en/es#373
fey merged 3 commits into
mainfrom
fix/neutral-english-in-exercises

Conversation

@fey

@fey fey commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Зачем

Файлы решения и теста в CB — общие на все локали. Из-за этого русская строка внутри них ломала нерусские локали: тест сверял русский оригинал, а задание на es/en велело студенту вывести переведённый текст. Плюс условия в en/es у части уроков остались от прежней версии курса на мотивах «Игры престолов», тогда как решения и тесты давно переписаны.

Оба дефекта делают упражнения непроходимыми вне ru. Примеры:

урок тест ждёт а es велело
25-strings/20-string-concatenation https://github.com/hexlet/exercises-python Winter came for the House of Frey.
40-define-functions/100-define-function Hello, World! из say_hello() Winter is coming из print_motto()
10-basics/20-comments # TODO: добавить функцию приветствия комментарий You know nothing, Jon Snow!

Что сделано

Три коммита, по типу правки:

  1. Английский как нейтральный в заданиях. Печатаемые и проверяемые строки, а также комментарии-подсказки в общем коде переведены на английский; в условиях всех трёх локалей код-примеры приведены к тому же тексту. Проза осталась на языке локали. Строки совпадают с теми, что уже приняты в exercises-php, чтобы одинаковые уроки не расходились между языками.

  2. Ресинхрон устаревших условий с текущего ru — 18 уроков.

  3. Добавлены отсутствующие локали трёх упражнений. У 45-logic/15-bool-strings не было ни en, ни es; у 50-loops/80-for-in-range и 50-loops/90-debug не было es. Без EXERCISE.md и data.yml такой урок не переносится на Хекслет вообще.

Как определялся список устаревших

Критерий: тест сверяет строку, которая есть в ru-условии и отсутствует в es-условии. Сравнение по объёму или по структуре даёт ложные срабатывания в обе стороны — переведённый комментарий внутри код-примера выглядит как расхождение, хотя это правильное поведение, а на текстовых блоках такое сравнение слепо вовсе.

Уроки с уже актуальным переводом намеренно не тронуты: 25-strings/30-encoding, 40-define-functions/200-default-parameters, 350-modules, 400-packages, 45-logic/25-logical-operators.

Попутно

В en/EXERCISE.md у 45-logic/28-logical-negation перевод утверждал is_palindrome('hut') # true и is_palindrome('Argument') # true — буквальный перевод русских «шалаш» и «Довод», которые палиндромы, тогда как английские слова ими не являются. Заменено на level/Racecar/radar. Испанская версия там корректна.

Проверка

pytest по всем 69 упражнениям зелёный. Кириллицы в файлах кода не осталось (было 20), в es-локали не осталось ни в одном .md. Негативная проверка: на сломанном решении тест падает.

Что осталось за рамками

  • Теория (README.md) на es по-прежнему русская у 67 уроков, и у трёх уроков её нет вовсе — это отдельный ресинхрон теории.
  • Кириллица осталась в 4 файлах en-теории: 70-slices, 90-multiline-strings, 150-return, 200-default-parameters.

🤖 Generated with Claude Code

fey added 3 commits August 4, 2026 22:57
Файлы решения и теста в CB — общие на все локали, поэтому русская строка внутри
них ломает нерусские локали: тест сверял русский оригинал, а задание на es/en
велело студенту вывести переведённый текст.

Печатаемые и проверяемые строки, а также комментарии-подсказки переведены на
английский; в условиях всех трёх локалей код-примеры приведены к тому же тексту.
Проза осталась на языке локали. Английские строки совпадают с теми, что уже
приняты в exercises-php, чтобы одинаковые уроки не расходились между языками.

Проверено: pytest по всем 69 упражнениям зелёный.
Условия в en/es остались от прежней версии курса на мотивах «Игры престолов»,
тогда как решения и тесты давно переписаны. Из-за этого упражнения были
непроходимы вне ru: например, тест ждал вывод
`https://github.com/hexlet/exercises-python`, а испанское условие велело вывести
`Winter came for the House of Frey.`; в `100-define-function` тест вызывал
`say_hello()`, а условие описывало `print_motto()`.

Условия переведены заново с текущего ru. Затронуто 18 уроков, определённых по
критерию «тест сверяет строку, которая есть в ru-условии и отсутствует в
es-условии» — этот критерий, в отличие от сравнения объёма или структуры, не даёт
ложных срабатываний на переведённых комментариях внутри код-примеров.

Уроки с уже актуальным переводом не тронуты: 30-encoding, 200-default-parameters,
350-modules, 400-packages, 45-logic/25-logical-operators.
У 45-logic/15-bool-strings не было ни en, ни es; у 50-loops/80-for-in-range и
50-loops/90-debug не было es. Без EXERCISE.md и data.yml эти уроки не переносятся
на Хекслет вообще — синхронизатор падает на отсутствующем файле.

Добавлены EXERCISE.md и data.yml. Теория (README.md) этих трёх уроков остаётся
только на ru — это отдельная работа по ресинхрону теории.

Попутно: в en/EXERCISE.md у 45-logic/28-logical-negation перевод утверждал
`is_palindrome('hut') # true` и `is_palindrome('Argument') # true` — буквальный
перевод русских «шалаш» и «Довод», которые палиндромы, тогда как английские слова
ими не являются. Заменено на level/Racecar/radar. Испанская версия там корректна.
@fey
fey merged commit 75fbe74 into main Aug 4, 2026
2 checks passed
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.

1 participant