diff --git a/web/src/assets/locales/ru.json b/web/src/assets/locales/ru.json
index 0967ef424..9df7e78f6 100644
--- a/web/src/assets/locales/ru.json
+++ b/web/src/assets/locales/ru.json
@@ -1 +1,245 @@
-{}
+{
+ "back": "Назад",
+ "color_scheme_dark": "Использовать светлую тему",
+ "color_scheme_light": "Использовать тёмную тему",
+ "docs": "Документация",
+ "documentation_for": "Документация о \"{topic}\"",
+ "login": "Вход",
+ "logout": "Выйти",
+ "not_found": {
+ "back_home": "Вернуться на главную",
+ "not_found": "Ошибка 404. Проверьте что ввели адрес правильно :-/"
+ },
+ "password": "Пароль",
+ "pipeline_feed": "Состояние конвейеров",
+ "repo": {
+ "activity": "Активность",
+ "add": "Подключить репозиторий",
+ "branches": "Ветви",
+ "deploy_pipeline": {
+ "enter_target": "Целевая среда развертывания",
+ "title": "Вызвать событие развертывания для текущего конвейера #{pipelineId}",
+ "trigger": "Развернуть",
+ "variables": {
+ "add": "Добавить переменную",
+ "desc": "Укажите дополнительные переменные для использования в конвейере. Переменные с одинаковыми именами будут перезаписаны.",
+ "name": "Имя переменой",
+ "title": "Дополнительные переменные для конвейера",
+ "value": "Значение переменой"
+ }
+ },
+ "enable": {
+ "enable": "Подключить",
+ "enabled": "Уже подключен",
+ "list_reloaded": "Обновить список репозиториев",
+ "reload": "Обновить репозитории",
+ "success": "Репозиторий подключен"
+ },
+ "manual_pipeline": {
+ "select_branch": "Выберите ветвь",
+ "title": "Запустить конвейер вручную",
+ "trigger": "Запустить конвейер",
+ "variables": {
+ "add": "Добавить переменную",
+ "desc": "Укажите дополнительные переменные для использования в конвейере. Переменные с одинаковыми именами будут перезаписаны.",
+ "name": "Имя переменой",
+ "title": "Дополнительные переменные для конвейера",
+ "value": "Значение переменой"
+ }
+ },
+ "not_allowed": "У вас нет прав для доступа к этому репозиторию",
+ "open_in_forge": "Открыть репозиторий в системе контроля версий",
+ "pipeline": {
+ "actions": {
+ "cancel": "Отменить",
+ "cancel_success": "Конвейер отменён",
+ "canceled": "Этот шаг был пропущен.",
+ "log_auto_scroll": "Автоматически пролистывать вниз",
+ "log_auto_scroll_off": "Отключить автоматические пролистывание",
+ "log_download": "Скачать",
+ "restart": "Перезапустить",
+ "restart_success": "Конвейер перезапущен"
+ },
+ "config": "Конфигурация",
+ "created": "Создано",
+ "execution_error": "Ошибка выполнения",
+ "exit_code": "Код завершения {exitCode}",
+ "files": "Изменённые файлы ({files})",
+ "loading": "Загрузка…",
+ "log_download_error": "Произошла ошибка при скачивании файла журнала",
+ "no_files": "Никакие файлы не были изменены.",
+ "no_pipeline_steps": "Нет доступных шагов конвеера!",
+ "no_pipelines": "Ни один конвеер ещё не запущен.",
+ "pipeline": "Конвейер №{pipelineId}",
+ "pipelines_for": "Конвееры для ветви \"{branch}\"",
+ "protected": {
+ "approve": "Подтвердить",
+ "awaits": "Конвейер ожидает подтверждения от одного из разработчиков!",
+ "decline": "Отклонить"
+ },
+ "step_not_started": "Этот шаг ещё не запущен.",
+ "tasks": "Задачи"
+ },
+ "settings": {
+ "actions": {
+ "actions": "Действия",
+ "delete": {
+ "confirm": "Все данные будут потеряны после этого действия!!!\n\nВы действительно хотите продолжить?",
+ "delete": "Удалить репозиторий",
+ "success": "Репозиторий удалён"
+ },
+ "disable": {
+ "disable": "Отключить репозиторий",
+ "success": "Репозиторий отключен"
+ },
+ "repair": {
+ "repair": "Восстановить репозиторий",
+ "success": "Репозиторий восстановлен"
+ }
+ },
+ "badge": {
+ "badge": "Бейдж",
+ "branch": "Ветвь",
+ "type": "Синтаксис",
+ "type_html": "HTML",
+ "type_markdown": "Markdown",
+ "type_url": "URL"
+ },
+ "crons": {
+ "add": "Добавить задание Cron",
+ "branch": {
+ "placeholder": "Ветвь (если пусто, используется ветвь по умолчанию)",
+ "title": "Ветвь"
+ },
+ "created": "Задача cron создана",
+ "crons": "Задания Cron",
+ "delete": "Удалить задачу cron",
+ "deleted": "Задача cron удалена",
+ "desc": "Задания Cron можно использовать для регулярного запуска конвейеров.",
+ "edit": "Редактировать задачу cron",
+ "name": {
+ "name": "Имя",
+ "placeholder": "Имя задачи cron"
+ },
+ "next_exec": "Следующий запуск",
+ "none": "Пока нет ни одной задачи cron.",
+ "not_executed_yet": "Ещё не запущено",
+ "run": "Запустить сейчас",
+ "save": "Сохранить задачу cron",
+ "saved": "Задача cron сохранена",
+ "schedule": {
+ "placeholder": "Расписание",
+ "title": "Расписание (по UTC)"
+ },
+ "show": "Показать задания Cron"
+ },
+ "general": {
+ "allow_pr": {
+ "allow": "Разрешить запросы на слияние",
+ "desc": "Конвейеры смогут запускаться для запросов на слияние."
+ },
+ "cancel_prev": {
+ "cancel": "Принудительно завершить все предыдущие конвейеры",
+ "desc": "Позволяет отменить уже отложенные и запущенные конвейеры того же события и контекста перед запуском нового конвейера."
+ },
+ "general": "Главное",
+ "pipeline_path": {
+ "default": "По умолчанию: .woodpecker/*.yml -> .woodpecker.yml -> .drone.yml",
+ "desc": "Путь к конфигурации вашего конвейера (например: мой/путь/). При указании директории путь должен заканчиваться символом /.",
+ "path": "Конфигурация конвейера"
+ },
+ "project": "Настройки проекта",
+ "protected": {
+ "desc": "Каждый конвейер должен быть проверен до того как он будет выполнен.",
+ "protected": "Защищён"
+ },
+ "save": "Сохранить настройки",
+ "success": "Настройки репозитория обновлены",
+ "timeout": {
+ "minutes": "минуты",
+ "timeout": "Время ожидания"
+ },
+ "trusted": {
+ "desc": "Доверенные конвейеры получат доступ к дополнительным возможностям. Например конвейер сможет выполнять монтирование томов.",
+ "trusted": "Доверенный"
+ },
+ "visibility": {
+ "internal": {
+ "desc": "Только пользователи, вошедшие в систему, смогут видеть этот проект.",
+ "internal": "Внутренний"
+ },
+ "private": {
+ "desc": "Только вы и другие владельцы этого репозитория смогут видеть его.",
+ "private": "Приватный"
+ },
+ "public": {
+ "desc": "Любой незарегистрированный пользователь сможет увидеть этот проект.",
+ "public": "Публичный"
+ },
+ "visibility": "Видимость проекта"
+ }
+ },
+ "not_allowed": "У вас нет права доступа к настройкам этого репозитория",
+ "registries": {
+ "add": "Добавить реестр",
+ "address": {
+ "address": "Адрес",
+ "placeholder": "Адрес реестра (например: docker.io)"
+ },
+ "created": "Данные для доступа к реестру добавлены",
+ "creds": "Учётные данные для авторизации в реестре",
+ "delete": "Удалить реестр",
+ "deleted": "Данные для доступа к реестру удалены",
+ "desc": "Можно добавить учетные данные для доступа к реестру, чтобы использовать приветные образы из этого реестра в конвейере.",
+ "edit": "Изменить реестр",
+ "none": "Пока тут нет учётных данных для доступа к реестрам.",
+ "registries": "Реестры с образами",
+ "save": "Сохранить реестр",
+ "saved": "Данные для доступа к реестру сохранены",
+ "show": "Показать реестры"
+ },
+ "secrets": {
+ "add": "Создать секрет",
+ "created": "Секрет создан",
+ "delete": "Удалить секрет",
+ "deleted": "Секрет успешно удалён",
+ "desc": "Секреты могут быть переданы отдельным этапам конвейера во время выполнения в качестве переменных окружения.",
+ "edit": "Изменить секрет",
+ "events": {
+ "events": "Доступен для следующих событий",
+ "pr_warning": "Пожалуйста, будьте осторожны с этой опцией, так как злоумышленник может отправить вредоносный запрос для того чтобы раскрыть ваши секреты."
+ },
+ "images": {
+ "desc": "Список названий образов, для которых доступен этот секрет, перечисленный через запятую. Оставьте поле пустым, чтобы разрешить все образы.",
+ "images": "Доступен только для этих образов"
+ },
+ "name": "Название",
+ "none": "Пока тут нет секретов.",
+ "plugins_only": "Доступен только для расширений",
+ "save": "Сохранить секрет",
+ "saved": "Секрет успешно сохранён",
+ "secrets": "Секреты",
+ "show": "Показать секрет",
+ "value": "Значение"
+ },
+ "settings": "Настройки"
+ },
+ "user_none": "Эта организация / пользователь не имеет ни одного проекта."
+ },
+ "repos": "Репозитории",
+ "repositories": "Репозитории",
+ "search": "Поиск…",
+ "time": {
+ "days_short": "д.",
+ "hours_short": "ч.",
+ "min_short": "мин.",
+ "not_started": "не запускался ни разу",
+ "sec_short": "сек.",
+ "tmpl": "D MMM, YYYY, HH:mm z",
+ "weeks_short": "нед."
+ },
+ "unknown_error": "Произошла неизвестная ошибка",
+ "url": "URL",
+ "username": "Имя пользователя",
+ "welcome": "Добро пожаловать в Woodpecker"
+}