🌐 Complete Russian translations to 100% (#11956)

Complete ru.po from 1460 to 2275 keys (100%),
add words.ru.txt catalog, fix two dropped %s
placeholders and normalize board/layout/shortcut
terms. Documents Russian conventions in the
translations memory.

AI-assisted-by: muse-spark-1.3-contributor
This commit is contained in:
Andrey Antukh 2026-10-14 09:58:09 +02:00 committed by GitHub
parent 0c0336da42
commit 4023642acb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 3802 additions and 20 deletions

View File

@ -47,7 +47,6 @@ high-coverage support reference, never the base.
- Preserve verbatim: `%s`/`%d`, `{var}`/`{{...}}`, markdown `[text](%s)`, HTML tags, `\n` positions, brand names (Penpot), key names (Ctrl/Shift/Alt), technical terms (SVG, CSS, HSV, RGB).
## Catalan (ca) conventions
- Normative IEC/Termcat Catalan. Address the user in VOSALTRES (2nd person plural): "Deseu", "Creeu", "Ja teniu un compte?". Buttons/menus use short imperatives ("Crea", "Mou", "Restaura").
- Established glossary (reuse exactly, do not re-coin): layer=capa, board=tauler, stroke=traç, fill=Emplenat, blur=Difuminat, shadow=Ombra, clipboard=porta-retalls, delete=Elimina, rename=Canvia el nom, shortcut=drecera, grid=graella (keep "grid" where the file already does, e.g. grid-layout editing), plugins/extensions UI=extensions, layout=Disposició, gradient=Degradat, wireframing kept as loanword.
- Ela geminada uses the middle dot: Cancel·la, paral·lel, al·lega.
@ -55,6 +54,20 @@ high-coverage support reference, never the base.
- Shortcut/action names (`shortcuts.*`) are noun/infinitive labels, not sentences. Error strings are direct, no hedging.
- Same English source in different contexts may legitimately differ (verb "Copia" vs noun "Còpia"; "Desactivat" vs "Deshabilitada" agreeing with "drecera"). Normalize only true duplicates.
## Russian (ru) conventions
- Formal address with capital ВЫ ("Вы уверены…", "Вы собираетесь…"). Buttons/menus use infinitives ("Создать", "Удалить", "Дублировать"), never imperatives.
- Established glossary (reuse exactly, do not re-coin): layer=слой, board=доска (EN `board` is NEVER кадр — normalized in lote1: toolbar/viewer/shape-menu/header-menu/export-frames/undo/num-of-frames), path/draw tool=контур, stroke=обводка, fill=заливка, blur=размытие, shadow=тень, grid=сетка, clipboard=буфер обмена, shortcuts=сочетания клавиш (normalized in lote1: title/show-shortcuts/not-found), plugin=плагин, layout=макет (`labels.layout` fixed in lote1), gradient=градиент, token=токен, set=набор, theme=тема, file=файл, project=проект, team=команда, library=библиотека, component=компонент.
- No external RU style guide applies verbatim (Mozilla ru guide is marketing-only, GNOME glossary unmaintained, Adobe uses монтажная область for artboard but `ru.po` majority already says доска — keep доска for consistency).
- `words.ru.txt` `[function]` DELIBERATELY omits 1-letter words (в/с/к/о/у/а/и) and ending-colliding particles (на/по/не/ли/же/бы/его/их/те/или…): Russian inflects (проект→проекта, запросили=запрос+или), so listing them flags every inflected noun/verb. Never "complete" that list; put tripped valid words in `[ok]`.
- Never abbreviate т. д. / т. е. in `ru.po`: the lone т/д tokens poison the glue detector's frequency map and flag short words (тон→т+он). Write и так далее out.
- Tokens-domain glossary (lote2, reuse): alias=алиас, remap=переназначить, viewport=вьюпорт, set=набор, theme=тема, spread (shadow)=распространение, margins=внешние отступы, paddings=внутренние отступы, gaps=промежутки, type identifiers stay in English (Line Height, Font Size, innerShadow/dropShadow, none/Uppercase/Lowercase/Capitalize, thin/light/regular/bold/Italic).
- Editor-domain glossary (lote3, reuse): variant=вариант, property=свойство, guide=направляющая, board guide=направляющая доски, MCP server=MCP-сервер, size preset=пресет размера, border-radius section=скругление, path handler=маркер, canvas=холст, render=рендер/рендеринг, plugin (never extensión)=плагин.
- Avoid standalone те (those) in phrasing ("те же" → "такие же"): one lone те validates те+мы splits and flags every темы. Same poisoning class as т. д.
- `words.ru.txt` `[function]` also omits пока (dropped in lote4): with standalone за anywhere in the file, пока+за flags показа. Rare-typo detection loss accepted.
- Billing-domain glossary (lote4, reuse): plan names follow shipped `ru.po`, NOT es: Enterprise=Корпоративный, Professional=Профессиональный, Unlimited=Безлимитный, trial=пробный; subscription=подписка, storage=хранилище, seat editors=редакторы, viewer role=наблюдатель, amounts as `175 $/мес.` / `10 ГБ`; access token=токен доступа, MCP key=MCP-ключ (regenerate=перевыпустить), markdown `[text|target:self](%s)` kept verbatim.
- Closing-domain glossary (lote5, reuse): shortcut noun everywhere=сочетание (shortcuts section titles are noun/infinitive labels, never ярлыки); node=узел, segment=сегмент, measurements=размеры; WebGL unavailable flow uses гайд/руководство по неполадкам + рендеринг WebGL выключен/включён; `ru.po` reached 2275/2275 keys (100%) with 0 fuzzy, 0 untranslated per `msgfmt --statistics`.
## QA before commit
- Run `node ./scripts/translations.js check -l <locale>` from `frontend/` (no default locale: pass `-l` explicitly): 0 errors required; review warnings by hand. Word lists live in `frontend/scripts/check-translations/words.<locale>.txt` (`[elision]` `[function]` `[common]` `[ok]` `[brands]`); new valid words that trip the gate go to `[ok]`; `check --self-test` covers the detector rules. Without a catalog only the universal checks run. `#, fuzzy` entries are skipped (known-pending, owned elsewhere).

View File

@ -0,0 +1,352 @@
# Word catalog for check-translations.js (Russian).
# Comment lines start with #. Blank lines are ignored.
# [function] short function words; a token starting with one of
# these is likely missing a space (ивкладка style).
# [common] ordinary words used to judge the other half of a split.
# [ok] correct words the splitter would flag; never report
# these. Add new valid words here when the gate trips.
# [brands] extra locale-specific brands/terms kept as-is.
# [elision] letters elided with an apostrophe (Russian has none).
#
# NOTE (Russian): Russian inflects (проект -> проекта, файл -> файла),
# so one-letter words (в, с, к, о, у, а, и) and common endings/particles
# (на, по, не, ли, же, бы, его, их, ...) are DELIBERATELY absent from
# [function]: listing them flags every inflected noun as a glued word.
# The gate still catches placeholder/plural/punctuation errors plus
# long content-word glues (review warnings).
[elision]
[function]
без
для
как
что
чтобы
чтоб
если
когда
хотя
пусть
даже
лишь
только
тоже
также
уже
ведь
вот
между
через
перед
после
возле
вокруг
вдоль
внутри
вне
кроме
мимо
около
против
среди
сверху
снизу
слева
справа
вы
мы
он
она
оно
они
меня
тебя
себя
нас
вас
это
этот
эта
эти
тот
та
здесь
там
тут
где
куда
откуда
почему
зачем
сколько
какой
какая
какое
какие
[common]
создать
удалить
удаление
удалён
добавить
сохранить
сохранён
открыть
закрыть
изменить
выбрать
выбрано
показать
скрыть
переместить
перемещён
копировать
вставить
отменить
вернуть
дублировать
обновить
загрузить
загрузка
скачать
найти
искать
поиск
поделиться
пригласить
приглашение
приглашения
покинуть
восстановить
восстановлены
закрепить
открепить
опубликовать
настроить
настройки
отправить
получить
проверить
использовать
перейти
продолжить
начать
выйти
войти
файл
файлы
файлов
файла
проект
проекты
проектов
проекта
команда
команды
участник
участники
участников
библиотека
библиотеки
библиотек
компонент
компоненты
цвет
цвета
цветов
слой
слои
слоёв
доска
доски
досок
кадр
кадры
контур
обводка
заливка
размытие
тень
тени
сетка
сетки
макет
градиент
шрифт
шрифты
шрифтов
текст
текста
изображение
комментарий
комментарии
уведомление
уведомления
пароль
почта
почту
аккаунт
профиль
роль
доступ
ошибка
ошибки
версия
история
экспорт
импорт
тема
темы
набор
наборы
токен
токены
токенов
панель
окно
вкладка
кнопка
поле
список
таблица
строка
столбец
строки
высота
ширина
размер
имя
название
описание
время
дата
право
права
владелец
администратор
редактор
наблюдатель
гость
новый
новая
новые
общий
общая
последний
следующий
предыдущий
выбранное
непрозрачность
выравнивание
выровнять
направляющие
линейки
пиксельный
масштаб
приблизить
отдалить
группировать
разгруппировать
маска
узел
узлы
фигура
фигуры
элемент
элементы
свойства
стиль
эффект
ссылка
ссылку
вектор
растр
код
плагин
вебхук
шаблон
шаблоны
черновик
корзина
папка
область
холст
фон
граница
угол
центр
край
верх
низ
право
лево
горизонталь
вертикаль
сверху
снизу
слева
справа
внутрь
наружу
сплошной
пунктирный
точечный
круг
квадрат
треугольник
стрелка
эллипс
прямоугольник
многоугольник
звезда
кривая
путь
[ok]
автосохранение
автовысота
автоширина
медиафайл
цветовой
командой
чтобы
чтоб
какой
какая
какое
какие
какого
каких
каком
какую
горизонтально
вертикально
какой-либо
адресата
последний
последняя
последнее
последние
последней
последнего
последнем
последнюю
доступна
автомакета
запросили
верхняя
верхнее
верхние
верхнего
верхней
верхнем
верхнюю
библиотекой
автоверсии
подорганизации
прочитать
просмотреть
[brands]

File diff suppressed because it is too large Load Diff