From f07bffe83876ff2399062627459161a94bcbd285 Mon Sep 17 00:00:00 2001 From: Storozhenko Evgeny Date: Sat, 12 Sep 2026 17:11:03 +0000 Subject: [PATCH] =?UTF-8?q?openspec(localize-i18n-ru):=20propose=20?= =?UTF-8?q?=E2=80=94=20=D1=80=D1=83=D1=81=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?UI=20(i18n/ru.toml)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../changes/localize-i18n-ru/.openspec.yaml | 2 + openspec/changes/localize-i18n-ru/design.md | 25 ++++++++++++ openspec/changes/localize-i18n-ru/proposal.md | 23 +++++++++++ .../localize-i18n-ru/specs/i18n/spec.md | 39 +++++++++++++++++++ openspec/changes/localize-i18n-ru/tasks.md | 10 +++++ 5 files changed, 99 insertions(+) create mode 100644 openspec/changes/localize-i18n-ru/.openspec.yaml create mode 100644 openspec/changes/localize-i18n-ru/design.md create mode 100644 openspec/changes/localize-i18n-ru/proposal.md create mode 100644 openspec/changes/localize-i18n-ru/specs/i18n/spec.md create mode 100644 openspec/changes/localize-i18n-ru/tasks.md diff --git a/openspec/changes/localize-i18n-ru/.openspec.yaml b/openspec/changes/localize-i18n-ru/.openspec.yaml new file mode 100644 index 0000000..2b596d1 --- /dev/null +++ b/openspec/changes/localize-i18n-ru/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-09-12 diff --git a/openspec/changes/localize-i18n-ru/design.md b/openspec/changes/localize-i18n-ru/design.md new file mode 100644 index 0000000..86c410c --- /dev/null +++ b/openspec/changes/localize-i18n-ru/design.md @@ -0,0 +1,25 @@ +## Context + +Проект dedinit.ru — Hugo Extended 0.165, тема rDedInit (форк PaperMod), язык ru-ru. Сейчас `i18n/` отсутствует, UI-строки темы отображаются английскими дефолтами PaperMod. См. proposal.md — Why. + +## Goals / Non-Goals + +**Goals:** +- Создать `i18n/ru.toml` с переводами всех ключей, используемых шаблонами rDedInit. +- Русский UI без изменения разметки и контента. + +**Non-Goals:** +- Не переводим содержимое контента (посты). +- Не добавляем мультиязычность (en/ru переключатель) — вне рамок задачи. + +## Decisions + +- **Формат TOML** (Hugo i18n) — стандарт Hugo, `ru.toml` рядом с другими локалями. +- **Источник ключей**: извлечены из `themes/rDedInit/layouts/` — `home`, `next_page`, `prev_page`, `read_time`, `words`, `toc`, `code_copy`, `code_copied`, `edit_post`, `translations`; дополнительно стандартные ключи PaperMod (`search`, `page_not_found`, `archives`, `tags`, `categories`, `posted_on`, `continue_reading`, `min_read`, `newer`, `older`, `page`, `of`, `read_more`, `translations` и др.) для полноты — отсутствующий ключ Hugo просто не находит и ничего не ломает (fallback). +- **Структура строки**: `[ключ]\nother = "перевод"` — Hugo i18n-формат (other — для языков без gender/plural). +- **Проверка**: `make build` + grep в public/ на русские строки («Читать далее», «Теги», «Содержание»). + +## Risks / Trade-offs + +- [Перевод строки, которую тема не использует] → Не навредит: Hugo игнорирует неиспользуемые ключи; лишние ключи просто расширяют словарь (fallback при будущих фичах темы). +- [Ключ использован темой, но перевод терминологически неточен] → Быстрый фикс: правим одну строку в ru.toml; git-история позволит откатить. \ No newline at end of file diff --git a/openspec/changes/localize-i18n-ru/proposal.md b/openspec/changes/localize-i18n-ru/proposal.md new file mode 100644 index 0000000..f0f6db7 --- /dev/null +++ b/openspec/changes/localize-i18n-ru/proposal.md @@ -0,0 +1,23 @@ +## Why + +Сайт dedinit.ru — русскоязычный блог (язык ru-ru), но в теме rDedInit (форк PaperMod) отсутствует файл `i18n/ru.toml`, из-за чего интерфейсные строки (кнопки, навигация, время чтения) показываются на английском по умолчанию. Это выглядит неаккуратно для русскоязычной аудитории. + +## What Changes + +- Создать `i18n/ru.toml` с русскими переводами всех UI-ключей темы rDedInit (PaperMod). +- Перевести строки: Home → «Главная», Read time → «Время чтения», Words → «слов», Table of Contents → «Содержание», Code copy → «Копировать код», Code copied → «Скопировано», Edit post → «Редактировать пост», Next → «Следующая», Prev → «Предыдущая», Translations → «Переводы», Search → «Поиск» (и др. стандартные ключи PaperMod). +- Поведение сайта, разметка, контент — не меняются; это чисто интернационализация UI. + +## Capabilities + +### New Capabilities +- `i18n`: русская локализация интерфейса темы (ключи-переводы UI). Новая способность проекта «русская локализация UI». + +### Modified Capabilities +Отсутствуют — существующих spec в `openspec/specs/` не затронуто (site-rss не меняется). + +## Impact + +- Затронутые файлы: `i18n/ru.toml` (новый). +- Не затрагивает: контент, шаблоны, деплой, RSS. +- Откат (rollback): удалить `i18n/ru.toml` (или `git revert`) — сайт вернётся к английским строкам по умолчанию, как сейчас. \ No newline at end of file diff --git a/openspec/changes/localize-i18n-ru/specs/i18n/spec.md b/openspec/changes/localize-i18n-ru/specs/i18n/spec.md new file mode 100644 index 0000000..b040647 --- /dev/null +++ b/openspec/changes/localize-i18n-ru/specs/i18n/spec.md @@ -0,0 +1,39 @@ +## Purpose + +Обеспечивает русскоязычный интерфейс сайта dedinit.ru: все UI-строки темы (навигация, время чтения, код, пагинация) отображаются на русском языке для аудитории ru-ru. + +## ADDED Requirements + +### Requirement: Русские UI-строки в i18n/ru.toml +Система SHALL предоставлять файл `i18n/ru.toml`, содержащий русские переводы всех ключей интерфейса, используемых темой rDedInit (PaperMod): `home`, `next_page`, `prev_page`, `read_time`, `words`, `toc`, `code_copy`, `code_copied`, `edit_post`, `translations`, `search`, `page_not_found` и стандартные ключи PaperMod. + +#### Scenario: Главная страница +- **WHEN** пользователь открывает главную страницу сайта +- **THEN** строка навигации «Home» отображается как «Главная» + +#### Scenario: Время чтения статьи +- **WHEN** пользователь открывает статью с временем чтения +- **THEN** строка «X min read» отображается как «X мин чтения» (или эквивалент на русском) + +#### Scenario: Оглавление +- **WHEN** статья содержит оглавление +- **THEN** заголовок оглавления отображается как «Содержание», а не «Table of Contents» + +#### Scenario: Кнопки копирования кода +- **WHEN** пользователь наводит на блок кода +- **THEN** подсказка отображается как «Копировать код»; после копирования — «Скопировано» + +#### Scenario: Пагинация +- **WHEN** пользователь видит пагинацию списка постов +- **THEN** ссылки отображаются как «Следующая» / «Предыдущая», а не «Next» / «Prev» + +#### Scenario: Отсутствующий ключ +- **WHEN** в теме используется ключ, отсутствующий в `i18n/ru.toml` +- **THEN** сайт продолжает работать, отображая ключ по умолчанию из темы (Hugo fallback) — поведение не ломается + +### Requirement: Фолбэк на английский при отсутствии перевода +Система SHALL сохранять работоспособность сайта при отсутствии какого-либо ключа: Hugo отображает строку по умолчанию темы (английскую), сайт не падает и не ломает разметку. + +#### Scenario: Нет ключа в ru.toml +- **WHEN** в ru.toml отсутствует конкретный ключ +- **THEN** Hugo использует значение по умолчанию из темы (английское) и сборка проходит без ошибок \ No newline at end of file diff --git a/openspec/changes/localize-i18n-ru/tasks.md b/openspec/changes/localize-i18n-ru/tasks.md new file mode 100644 index 0000000..c265209 --- /dev/null +++ b/openspec/changes/localize-i18n-ru/tasks.md @@ -0,0 +1,10 @@ +## 1. Локализация + +- [ ] 1.1 Создать каталог `i18n/` и файл `i18n/ru.toml` с переводами всех ключей темы (home, next_page, prev_page, read_time, words, toc, code_copy, code_copied, edit_post, translations) и стандартных ключей PaperMod (search, page_not_found, archives, tags, categories, posted_on, continue_reading, min_read, newer, older, read_more и др.) — проверить `ls i18n/ru.toml` +- [ ] 1.2 Собрать сайт: `make build` — сборка проходит без ошибок (exit 0) + +## 2. Проверка + +- [ ] 2.1 Проверить в собранном public/ русские строки: `grep -r "Читать далее" public/ | head` и `grep -r "Содержание" public/ | head` — обе строки присутствуют в HTML +- [ ] 2.2 Проверить пагинацию: `grep -r "Следующая" public/ | head` и `grep -r "Предыдущая" public/ | head` — присутствуют +- [ ] 2.3 Закоммитить `i18n/ru.toml` и запушить в gitverse (origin main) \ No newline at end of file