This commit is contained in:
2026-02-03 01:45:22 +04:00
parent f53016aeda
commit b2ab5905d0
18 changed files with 18214 additions and 671 deletions

274
src/i18n/languages/ru.ts Normal file
View File

@@ -0,0 +1,274 @@
import Key from "@i18n/i18nKey";
import type { Translation } from "@i18n/translation";
export const ru: Translation = {
// Загрузка
[Key.loading]: "ЗАГРУЗКА",
// Навигация
[Key.home]: "Главная",
[Key.archive]: "Архив",
[Key.about]: "О сайте",
[Key.search]: "Поиск",
// Посты
[Key.tags]: "Теги",
[Key.categories]: "Категории",
[Key.series]: "Серии",
[Key.posts]: "Посты",
[Key.recentPosts]: "Недавние посты",
[Key.postList]: "Список постов",
[Key.statistics]: "Статистика",
[Key.tableOfContents]: "Содержание",
// Статистика страницы
[Key.pageViews]: "Просмотры",
[Key.visitors]: "Посетители",
[Key.statsLoading]: "Загрузка статистики...",
[Key.statsError]: "Статистика недоступна",
// Объявление
[Key.announcement]: "Объявление",
[Key.announcementClose]: "Закрыть",
[Key.comments]: "Комментарии",
[Key.untitled]: "Без названия",
[Key.uncategorized]: "Без категории",
[Key.noTags]: "Нет тегов",
[Key.wordCount]: "слово",
[Key.wordsCount]: "слов",
[Key.minuteCount]: "минута",
[Key.minutesCount]: "минут",
[Key.postCount]: "пост",
[Key.postsCount]: "постов",
[Key.themeColor]: "Цвет темы",
[Key.lightMode]: "Светлая",
[Key.darkMode]: "Тёмная",
[Key.systemMode]: "Системная",
[Key.wallpaperMode]: "Режим обоев",
[Key.wallpaperFullscreen]: "Полноэкранный",
[Key.wallpaperBanner]: "Баннер",
[Key.wallpaperNone]: "Нет",
[Key.more]: "Ещё",
[Key.backTo]: "Назад к",
[Key.author]: "Автор",
[Key.publishedAt]: "Опубликовано",
[Key.license]: "Лицензия",
// Страница 404
[Key.notFound]: "404",
[Key.notFoundTitle]: "Страница не найдена",
[Key.notFoundDescription]: "Извините, запрашиваемая страница не существует или была перемещена.",
[Key.backToHome]: "Вернуться на главную",
// Страница проектов
[Key.projects]: "Проекты",
[Key.projectsSubtitle]: "Мое портфолио проектов",
[Key.projectsAll]: "Все",
[Key.projectsWeb]: "Веб-приложения",
[Key.projectsMobile]: "Мобильные приложения",
[Key.projectsDesktop]: "Десктопные приложения",
[Key.projectsOther]: "Другое",
[Key.projectTechStack]: "Технологический стек",
[Key.projectLiveDemo]: "Живая демонстрация",
[Key.projectSourceCode]: "Исходный код",
[Key.projectDescription]: "Описание проекта",
[Key.projectStatus]: "Статус",
[Key.projectStatusCompleted]: "Завершён",
[Key.projectStatusInProgress]: "В разработке",
[Key.projectStatusPlanned]: "Запланирован",
[Key.projectsTotal]: "Всего проектов",
[Key.projectsCompleted]: "Завершённых",
[Key.projectsInProgress]: "В разработке",
[Key.projectsTechStack]: "Статистика технологий",
[Key.projectsFeatured]: "Рекомендуемые проекты",
[Key.projectsPlanned]: "Запланированных",
[Key.projectsDemo]: "Живая демонстрация",
[Key.projectsSource]: "Исходный код",
// Страница навыков
[Key.skills]: "Навыки",
[Key.skillsSubtitle]: "Мои технические навыки и экспертиза",
[Key.skillsAI]: "AI разработка",
[Key.skillsBackend]: "Backend разработка",
[Key.skillsClient]: "Client разработка",
[Key.skillsFrontend]: "Frontend разработка",
[Key.skillsDatabase]: "База данных",
[Key.skillsEngines]: "Движки",
[Key.skillsTools]: "Инструменты разработки",
[Key.skillsOthers]: "Другие навыки",
[Key.skillLevel]: "Уровень владения",
[Key.skillLevelBeginner]: "Начинающий",
[Key.skillLevelIntermediate]: "Средний",
[Key.skillLevelAdvanced]: "Продвинутый",
[Key.skillLevelExpert]: "Эксперт",
[Key.skillExperience]: "Опыт",
[Key.skillYears]: "лет",
[Key.skillMonths]: "месяцев",
[Key.skillsTotal]: "Всего навыков",
[Key.skillsExpert]: "Экспертный уровень",
[Key.skillsAdvanced]: "Продвинутый",
[Key.skillsIntermediate]: "Средний",
[Key.skillsBeginner]: "Начинающий",
[Key.skillsAdvancedTitle]: "Профессиональные навыки",
[Key.skillsProjects]: "Связанные проекты",
[Key.skillsDistribution]: "Распределение навыков",
[Key.skillsByLevel]: "Распределение по уровню",
[Key.skillsByCategory]: "Распределение по категориям",
// Страница временной шкалы
[Key.timeline]: "История",//"Временная шкала",
[Key.timelineSubtitle]: "Мой путь развития и важные вехи",
[Key.timelineEducation]: "Образование",
[Key.timelineWork]: "Опыт работы",
[Key.timelineProject]: "Опыт проектов",
[Key.timelineAchievement]: "Достижения",
[Key.timelinePresent]: "Настоящее время",
[Key.timelineLocation]: "Местоположение",
[Key.timelineDescription]: "Подробное описание",
[Key.timelineMonths]: "месяцев",
[Key.timelineYears]: "лет",
[Key.timelineTotal]: "Всего",
[Key.timelineProjects]: "Проектов",
[Key.timelineExperience]: "Опыт работы",
[Key.timelineCurrent]: "Текущий статус",
[Key.timelineHistory]: "История",
[Key.timelineAchievements]: "Достижения",
[Key.timelineStatistics]: "Статистика",
[Key.timelineByType]: "Группировка по типу",
[Key.timelineWorkExperience]: "Опыт работы",
[Key.timelineTotalExperience]: "Общий опыт работы",
[Key.timelineWorkPositions]: "Рабочих позиций",
[Key.timelineCurrentRole]: "Текущий статус",
[Key.timelineEmployed]: "Трудоустроен",
[Key.timelineAvailable]: "Доступен",
// Страница дневника
[Key.diary]: "Дневник",
[Key.diarySubtitle]: "Делитесь жизнью в любое время, в любом месте",
[Key.diaryCount]: "записей в дневнике",
[Key.diaryImage]: "Изображение",
[Key.diaryReply]: "Ответить",
[Key.diaryTips]: "Показаны только последние 30 записей дневника",
[Key.diaryMinutesAgo]: "минут назад",
[Key.diaryHoursAgo]: "часов назад",
[Key.diaryDaysAgo]: "дней назад",
// Страница альбомов
[Key.albums]: "Портфолио", //"Альбомы",
[Key.albumsSubtitle]: "Записывайте прекрасные моменты жизни",
[Key.albumsEmpty]: "Нет содержимого",
[Key.albumsEmptyDesc]: "Альбомы ещё не созданы. Добавьте прекрасные воспоминания!",
[Key.albumsBackToList]: "Вернуться к альбомам",
[Key.albumsPhotoCount]: "фото",
[Key.albumsPhotosCount]: "фото",
// Страница аниме
[Key.anime]: "Аниме",
[Key.animeTitle]: "Мой список аниме",
[Key.animeSubtitle]: "Записываю свой путь в аниме",
[Key.animeList]: "Список аниме",
[Key.animeTotal]: "Всего",
[Key.animeWatching]: "Смотрю",
[Key.animeCompleted]: "Завершено",
[Key.animeAvgRating]: "Средний рейтинг",
[Key.animeStatusWatching]: "Смотрю",
[Key.animeStatusCompleted]: "Завершено",
[Key.animeStatusPlanned]: "Запланировано",
[Key.animeYear]: "Год",
[Key.animeStudio]: "Студия",
[Key.animeEmpty]: "Нет данных об аниме",
[Key.animeEmptyBangumi]: "Пожалуйста, проверьте настройки Bangumi или сетевое подключение",
// Страница друзей
[Key.friends]: "Друзья",
// Страница RSS
[Key.rss]: "RSS лента",
[Key.rssDescription]: "Подпишитесь, чтобы получать последние обновления",
[Key.rssSubtitle]: "Подпишитесь через RSS, чтобы сразу получать последние статьи и обновления",
[Key.rssLink]: "RSS ссылка",
[Key.rssCopyToReader]: "Скопировать ссылку в ваш RSS-ридер",
[Key.rssCopyLink]: "Скопировать ссылку",
[Key.rssLatestPosts]: "Последние посты",
[Key.rssWhatIsRSS]: "Что такое RSS?",
[Key.rssWhatIsRSSDescription]: "RSS (Really Simple Syndication) — это стандартный формат для публикации часто обновляемого контента. С RSS вы можете:",
[Key.rssBenefit1]: "Своевременно получать последний контент сайта без ручного посещения",
[Key.rssBenefit2]: "Управлять подписками на несколько сайтов в одном месте",
[Key.rssBenefit3]: "Избегать пропуска важных обновлений и статей",
[Key.rssBenefit4]: "Наслаждаться чистым чтением без рекламы",
[Key.rssHowToUse]: "Рекомендуется использовать Feedly, Inoreader или другие RSS-ридеры для подписки на этот сайт.",
[Key.rssCopied]: "RSS ссылка скопирована в буфер обмена!",
[Key.rssCopyFailed]: "Копирование не удалось, пожалуйста, скопируйте ссылку вручную",
// Страница Atom
[Key.atom]: "Atom лента",
[Key.atomDescription]: "Подпишитесь, чтобы получать последние обновления",
[Key.atomSubtitle]: "Подпишитесь через Atom, чтобы сразу получать последние статьи и обновления",
[Key.atomLink]: "Atom ссылка",
[Key.atomCopyToReader]: "Скопировать ссылку в ваш Atom-ридер",
[Key.atomCopyLink]: "Скопировать ссылку",
[Key.atomLatestPosts]: "Последние посты",
[Key.atomWhatIsAtom]: "Что такое Atom?",
[Key.atomWhatIsAtomDescription]: "Atom (Atom Syndication Format) — это XML-стандарт для описания лент и их элементов. С Atom вы можете:",
[Key.atomBenefit1]: "Своевременно получать последний контент сайта без ручного посещения",
[Key.atomBenefit2]: "Управлять подписками на несколько сайтов в одном месте",
[Key.atomBenefit3]: "Избегать пропуска важных обновлений и статей",
[Key.atomBenefit4]: "Наслаждаться чистым чтением без рекламы",
[Key.atomHowToUse]: "Рекомендуется использовать Feedly, Inoreader или другие Atom-ридеры для подписки на этот сайт.",
[Key.atomCopied]: "Atom ссылка скопирована в буфер обмена!",
[Key.atomCopyFailed]: "Копирование не удалось, пожалуйста, скопируйте ссылку вручную",
// Защита паролем
[Key.passwordProtected]: "Защищено паролем",
[Key.passwordProtectedTitle]: "Этот контент защищён паролем",
[Key.passwordProtectedDescription]: "Пожалуйста, введите пароль для просмотра защищённого контента",
[Key.passwordPlaceholder]: "Введите пароль",
[Key.passwordUnlock]: "Разблокировать",
[Key.passwordUnlocking]: "Разблокировка...",
[Key.passwordIncorrect]: "Неверный пароль, попробуйте снова",
[Key.passwordDecryptError]: "Расшифровка не удалась, пожалуйста, проверьте правильность пароля",
[Key.passwordRequired]: "Пожалуйста, введите пароль",
[Key.passwordVerifying]: "Проверка...",
[Key.passwordDecryptFailed]: "Расшифровка не удалась, пожалуйста, проверьте пароль",
[Key.passwordDecryptRetry]: "Расшифровка не удалась, попробуйте снова",
[Key.passwordUnlockButton]: "Разблокировать",
[Key.copyFailed]: "Копирование не удалось:",
[Key.syntaxHighlightFailed]: "Подсветка синтаксиса не удалась:",
[Key.autoSyntaxHighlightFailed]: "Автоматическая подсветка синтаксиса также не удалась:",
[Key.decryptionError]: "Произошла ошибка при расшифровке:",
// Карточка времени последнего изменения
[Key.lastModifiedPrefix]: "Время с последнего редактирования: ",
[Key.lastModifiedOutdated]: "Некоторый контент может быть устаревшим",
[Key.year]: "год",
[Key.month]: "месяц",
[Key.day]: "день",
[Key.hour]: "час",
[Key.minute]: "минута",
[Key.second]: "секунда",
// Музыкальный проигрыватель
[Key.playlist]: "Плейлист",
[Key.musicEmptyPlaylist]: "Локальный плейлист пуст",
[Key.musicNoSongsAvailable]: "В плейлисте нет доступных песен",
[Key.musicPlayFailed]: "Не удалось воспроизвести \"{0}\", пробую следующую...",
[Key.musicAutoplayBlocked]: "Автовоспроизведение заблокировано",
[Key.musicMetingFailed]: "Не удалось получить плейлист Meting",
[Key.musicUnknownArtist]: "Неизвестный исполнитель",
[Key.musicUnknownTrack]: "Неизвестный трек",
[Key.musicSwitchToLocal]: "Переключиться на локальный режим",
[Key.musicSwitchToMeting]: "Переключиться на режим Meting",
[Key.musicProgress]: "Прогресс",
[Key.musicCollapse]: "Свернуть проигрыватель",
[Key.musicVolume]: "Громкость",
[Key.musicExpand]: "Развернуть музыкальный проигрыватель",
};

View File

@@ -2,6 +2,7 @@ import { getResolvedSiteLang } from "@utils/language";
import { en } from "./languages/en";
import { ja } from "./languages/ja";
import { zh } from "./languages/zh";
import { ru } from "./languages/ru";
import type I18nKey from "./i18nKey";
@@ -20,6 +21,8 @@ const map: { [key: string]: Translation } = {
zh_cn: zh,
ja: ja,
ja_jp: ja,
ru: ru,
ru_ru: ru,
};
export function getTranslation(lang: string): Translation {