import { createRequire } from 'module' import { defineAdditionalConfig, type DefaultTheme } from 'vitepress' const require = createRequire(import.meta.url) const pkg = require('vitepress/package.json') export default defineAdditionalConfig({ description: 'Генератор статических сайтов на основе Vite и Vue.', themeConfig: { nav: nav(), search: { options: searchOptions() }, sidebar: { '/ru/guide/': { base: '/ru/guide/', items: sidebarGuide() }, '/ru/reference/': { base: '/ru/reference/', items: sidebarReference() } }, editLink: { pattern: 'https://github.com/vuejs/vitepress/edit/main/docs/:path', text: 'Редактировать страницу' }, footer: { message: 'Опубликовано под лицензией MIT.', copyright: '© 2019 – настоящее время, Эван Ю' }, outline: { label: 'Содержание страницы' }, docFooter: { prev: 'Предыдущая страница', next: 'Следующая страница' }, lastUpdated: { text: 'Обновлено' }, notFound: { title: 'СТРАНИЦА НЕ НАЙДЕНА', quote: 'Но если ты не изменишь направление и продолжишь искать, ты можешь оказаться там, куда направляешься.', linkLabel: 'перейти на главную', linkText: 'Отведи меня домой' }, darkModeSwitchLabel: 'Оформление', lightModeSwitchTitle: 'Переключить на светлую тему', darkModeSwitchTitle: 'Переключить на тёмную тему', sidebarMenuLabel: 'Меню', returnToTopLabel: 'Вернуться к началу', langMenuLabel: 'Изменить язык', skipToContentLabel: 'Перейти к содержимому' } }) function nav(): DefaultTheme.NavItem[] { return [ { text: 'Руководство', link: '/ru/guide/what-is-vitepress', activeMatch: '/ru/guide/' }, { text: 'Справочник', link: '/ru/reference/site-config', activeMatch: '/ru/reference/' }, { text: pkg.version, items: [ { text: '1.6.4', link: 'https://vuejs.github.io/vitepress/v1/ru/' }, { text: 'Изменения', link: 'https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md' }, { text: 'Вклад', link: 'https://github.com/vuejs/vitepress/blob/main/.github/contributing.md' } ] } ] } function sidebarGuide(): DefaultTheme.SidebarItem[] { return [ { text: 'Введение', collapsed: false, items: [ { text: 'Что такое VitePress?', link: 'what-is-vitepress' }, { text: 'Первые шаги', link: 'getting-started' }, { text: 'Маршрутизация', link: 'routing' }, { text: 'Развёртывание', link: 'deploy' } ] }, { text: 'Написание', collapsed: false, items: [ { text: 'Расширения Markdown', link: 'markdown' }, { text: 'Обработка ресурсов', link: 'asset-handling' }, { text: 'Метаданные', link: 'frontmatter' }, { text: 'Использование Vue в Markdown', link: 'using-vue' }, { text: 'Интернационализация', link: 'i18n' } ] }, { text: 'Настройка', collapsed: false, items: [ { text: 'Пользовательская тема', link: 'custom-theme' }, { text: 'Расширение темы по умолчанию', link: 'extending-default-theme' }, { text: 'Загрузка данных в режиме реального времени', link: 'data-loading' }, { text: 'Совместимость с SSR', link: 'ssr-compat' }, { text: 'Подключение к CMS', link: 'cms' } ] }, { text: 'Экспериментально', collapsed: false, items: [ { text: 'Режим MPA', link: 'mpa-mode' }, { text: 'Генерация карты сайта', link: 'sitemap-generation' } ] }, { text: 'Конфигурация и API', base: '/ru/reference/', link: 'site-config' } ] } function sidebarReference(): DefaultTheme.SidebarItem[] { return [ { text: 'Справочник', items: [ { text: 'Конфигурация сайта', link: 'site-config' }, { text: 'Конфигурация метаданных', link: 'frontmatter-config' }, { text: 'Runtime API', link: 'runtime-api' }, { text: 'Командная строка', link: 'cli' }, { text: 'Тема по умолчанию', base: '/ru/reference/default-theme-', items: [ { text: 'Обзор', link: 'config' }, { text: 'Навигация', link: 'nav' }, { text: 'Сайдбар', link: 'sidebar' }, { text: 'Главная страница', link: 'home-page' }, { text: 'Футер', link: 'footer' }, { text: 'Макет', link: 'layout' }, { text: 'Значки', link: 'badge' }, { text: 'Страница команды', link: 'team-page' }, { text: 'Предыдущая и следующая страницы', link: 'prev-next-links' }, { text: 'Ссылка для редактирования', link: 'edit-link' }, { text: 'Последнее обновление', link: 'last-updated' }, { text: 'Поиск', link: 'search' }, { text: 'Carbon Ads (реклама)', link: 'carbon-ads' } ] } ] } ] } function searchOptions(): Partial { return { translations: { button: { buttonText: 'Поиск', buttonAriaLabel: 'Поиск' }, modal: { searchBox: { clearButtonTitle: 'Очистить', clearButtonAriaLabel: 'Очистить запрос', closeButtonText: 'Закрыть', closeButtonAriaLabel: 'Закрыть', placeholderText: 'Поиск по документации или задайте вопрос Ask AI', placeholderTextAskAi: 'Задайте другой вопрос...', placeholderTextAskAiStreaming: 'Отвечаю...', searchInputLabel: 'Поиск', backToKeywordSearchButtonText: 'Назад к поиску по ключевым словам', backToKeywordSearchButtonAriaLabel: 'Назад к поиску по ключевым словам', newConversationPlaceholder: 'Задайте вопрос', conversationHistoryTitle: 'Моя история разговоров', startNewConversationText: 'Начать новый разговор', viewConversationHistoryText: 'История разговоров', threadDepthErrorPlaceholder: 'Достигнут лимит разговора' }, newConversation: { newConversationTitle: 'Чем могу помочь сегодня?', newConversationDescription: 'Я ищу по вашей документации, чтобы быстро помочь найти руководства по настройке, детали функций и советы по устранению неполадок.' }, footer: { selectText: 'Выбрать', submitQuestionText: 'Отправить вопрос', selectKeyAriaLabel: 'Клавиша Enter', navigateText: 'Навигация', navigateUpKeyAriaLabel: 'Стрелка вверх', navigateDownKeyAriaLabel: 'Стрелка вниз', closeText: 'Закрыть', backToSearchText: 'Назад к поиску', closeKeyAriaLabel: 'Клавиша Escape', poweredByText: 'При поддержке' }, errorScreen: { titleText: 'Не удалось получить результаты', helpText: 'Возможно, стоит проверить подключение к сети.' }, startScreen: { recentSearchesTitle: 'Недавние', noRecentSearchesText: 'Нет недавних поисков', saveRecentSearchButtonTitle: 'Сохранить этот поиск', removeRecentSearchButtonTitle: 'Удалить этот поиск из истории', favoriteSearchesTitle: 'Избранное', removeFavoriteSearchButtonTitle: 'Удалить этот поиск из избранного', recentConversationsTitle: 'Недавние разговоры', removeRecentConversationButtonTitle: 'Удалить этот разговор из истории' }, noResultsScreen: { noResultsText: 'Не найдено результатов для', suggestedQueryText: 'Попробуйте поискать', reportMissingResultsText: 'Считаете, что по этому запросу должны быть результаты?', reportMissingResultsLinkText: 'Сообщите нам.' }, resultsScreen: { askAiPlaceholder: 'Спросить ИИ: ', noResultsAskAiPlaceholder: 'Не нашли в документации? Попросите Ask AI помочь: ' }, askAiScreen: { disclaimerText: 'Ответы генерируются ИИ и могут содержать ошибки. Проверьте их.', relatedSourcesText: 'Связанные источники', thinkingText: 'Думаю...', copyButtonText: 'Копировать', copyButtonCopiedText: 'Скопировано!', copyButtonTitle: 'Копировать', likeButtonTitle: 'Нравится', dislikeButtonTitle: 'Не нравится', thanksForFeedbackText: 'Спасибо за отзыв!', preToolCallText: 'Ищу...', duringToolCallText: 'Ищу...', afterToolCallText: 'Искал', stoppedStreamingText: 'Вы остановили этот ответ', errorTitleText: 'Ошибка чата', threadDepthExceededMessage: 'Этот разговор закрыт, чтобы сохранить точность ответов.', startNewConversationButtonText: 'Начать новый разговор' } } }, askAi: { sidePanel: { button: { translations: { buttonText: 'Спросить ИИ', buttonAriaLabel: 'Спросить ИИ' } }, panel: { translations: { header: { title: 'Спросить ИИ', conversationHistoryTitle: 'Моя история разговоров', newConversationText: 'Начать новый разговор', viewConversationHistoryText: 'История разговоров' }, promptForm: { promptPlaceholderText: 'Задайте вопрос', promptAnsweringText: 'Отвечаю...', promptAskAnotherQuestionText: 'Задайте другой вопрос', promptDisclaimerText: 'Ответы генерируются ИИ и могут содержать ошибки.', promptLabelText: 'Нажмите Enter, чтобы отправить, или Shift+Enter для новой строки.', promptAriaLabelText: 'Ввод запроса' }, conversationScreen: { preToolCallText: 'Ищу...', searchingText: 'Ищу...', toolCallResultText: 'Искал', conversationDisclaimer: 'Ответы генерируются ИИ и могут содержать ошибки. Проверьте их.', reasoningText: 'Рассуждаю...', thinkingText: 'Думаю...', relatedSourcesText: 'Связанные источники', stoppedStreamingText: 'Вы остановили этот ответ', copyButtonText: 'Копировать', copyButtonCopiedText: 'Скопировано!', likeButtonTitle: 'Нравится', dislikeButtonTitle: 'Не нравится', thanksForFeedbackText: 'Спасибо за отзыв!', errorTitleText: 'Ошибка чата' }, newConversationScreen: { titleText: 'Чем могу помочь сегодня?', introductionText: 'Я ищу по вашей документации, чтобы быстро помочь найти руководства по настройке, детали функций и советы по устранению неполадок.' }, logo: { poweredByText: 'При поддержке' } } } } } } }