config.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. import { createRequire } from 'module'
  2. import { defineAdditionalConfig, type DefaultTheme } from 'vitepress'
  3. const require = createRequire(import.meta.url)
  4. const pkg = require('vitepress/package.json')
  5. export default defineAdditionalConfig({
  6. lang: 'ru-RU',
  7. description: 'Генератор статических сайтов на основе Vite и Vue.',
  8. themeConfig: {
  9. nav: nav(),
  10. search: { options: searchOptions() },
  11. sidebar: {
  12. '/ru/guide/': { base: '/ru/guide/', items: sidebarGuide() },
  13. '/ru/reference/': { base: '/ru/reference/', items: sidebarReference() }
  14. },
  15. editLink: {
  16. pattern: 'https://github.com/vuejs/vitepress/edit/main/docs/:path',
  17. text: 'Редактировать страницу'
  18. },
  19. footer: {
  20. message: 'Опубликовано под лицензией MIT.',
  21. copyright: '© 2019 – настоящее время, Эван Ю'
  22. },
  23. outline: { label: 'Содержание страницы' },
  24. docFooter: {
  25. prev: 'Предыдущая страница',
  26. next: 'Следующая страница'
  27. },
  28. lastUpdated: {
  29. text: 'Обновлено'
  30. },
  31. notFound: {
  32. title: 'СТРАНИЦА НЕ НАЙДЕНА',
  33. quote:
  34. 'Но если ты не изменишь направление и продолжишь искать, ты можешь оказаться там, куда направляешься.',
  35. linkLabel: 'перейти на главную',
  36. linkText: 'Отведи меня домой'
  37. },
  38. darkModeSwitchLabel: 'Оформление',
  39. lightModeSwitchTitle: 'Переключить на светлую тему',
  40. darkModeSwitchTitle: 'Переключить на тёмную тему',
  41. sidebarMenuLabel: 'Меню',
  42. returnToTopLabel: 'Вернуться к началу',
  43. langMenuLabel: 'Изменить язык',
  44. skipToContentLabel: 'Перейти к содержимому'
  45. }
  46. })
  47. function nav(): DefaultTheme.NavItem[] {
  48. return [
  49. {
  50. text: 'Руководство',
  51. link: '/ru/guide/what-is-vitepress',
  52. activeMatch: '/ru/guide/'
  53. },
  54. {
  55. text: 'Справочник',
  56. link: '/ru/reference/site-config',
  57. activeMatch: '/ru/reference/'
  58. },
  59. {
  60. text: pkg.version,
  61. items: [
  62. {
  63. text: 'Изменения',
  64. link: 'https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md'
  65. },
  66. {
  67. text: 'Вклад',
  68. link: 'https://github.com/vuejs/vitepress/blob/main/.github/contributing.md'
  69. }
  70. ]
  71. }
  72. ]
  73. }
  74. function sidebarGuide(): DefaultTheme.SidebarItem[] {
  75. return [
  76. {
  77. text: 'Введение',
  78. collapsed: false,
  79. items: [
  80. { text: 'Что такое VitePress?', link: 'what-is-vitepress' },
  81. { text: 'Первые шаги', link: 'getting-started' },
  82. { text: 'Маршрутизация', link: 'routing' },
  83. { text: 'Развёртывание', link: 'deploy' }
  84. ]
  85. },
  86. {
  87. text: 'Написание',
  88. collapsed: false,
  89. items: [
  90. { text: 'Расширения Markdown', link: 'markdown' },
  91. { text: 'Обработка ресурсов', link: 'asset-handling' },
  92. { text: 'Метаданные', link: 'frontmatter' },
  93. { text: 'Использование Vue в Markdown', link: 'using-vue' },
  94. { text: 'Интернационализация', link: 'i18n' }
  95. ]
  96. },
  97. {
  98. text: 'Настройка',
  99. collapsed: false,
  100. items: [
  101. { text: 'Пользовательская тема', link: 'custom-theme' },
  102. {
  103. text: 'Расширение темы по умолчанию',
  104. link: 'extending-default-theme'
  105. },
  106. {
  107. text: 'Загрузка данных в режиме реального времени',
  108. link: 'data-loading'
  109. },
  110. { text: 'Совместимость с SSR', link: 'ssr-compat' },
  111. { text: 'Подключение к CMS', link: 'cms' }
  112. ]
  113. },
  114. {
  115. text: 'Экспериментально',
  116. collapsed: false,
  117. items: [
  118. { text: 'Режим MPA', link: 'mpa-mode' },
  119. { text: 'Генерация карты сайта', link: 'sitemap-generation' }
  120. ]
  121. },
  122. { text: 'Конфигурация и API', base: '/ru/reference/', link: 'site-config' }
  123. ]
  124. }
  125. function sidebarReference(): DefaultTheme.SidebarItem[] {
  126. return [
  127. {
  128. text: 'Справочник',
  129. items: [
  130. { text: 'Конфигурация сайта', link: 'site-config' },
  131. { text: 'Конфигурация метаданных', link: 'frontmatter-config' },
  132. { text: 'Runtime API', link: 'runtime-api' },
  133. { text: 'Командная строка', link: 'cli' },
  134. {
  135. text: 'Тема по умолчанию',
  136. base: '/ru/reference/default-theme-',
  137. items: [
  138. { text: 'Обзор', link: 'config' },
  139. { text: 'Навигация', link: 'nav' },
  140. { text: 'Сайдбар', link: 'sidebar' },
  141. { text: 'Главная страница', link: 'home-page' },
  142. { text: 'Футер', link: 'footer' },
  143. { text: 'Макет', link: 'layout' },
  144. { text: 'Значки', link: 'badge' },
  145. { text: 'Страница команды', link: 'team-page' },
  146. {
  147. text: 'Предыдущая и следующая страницы',
  148. link: 'prev-next-links'
  149. },
  150. { text: 'Ссылка для редактирования', link: 'edit-link' },
  151. { text: 'Последнее обновление', link: 'last-updated' },
  152. { text: 'Поиск', link: 'search' },
  153. { text: 'Carbon Ads (реклама)', link: 'carbon-ads' }
  154. ]
  155. }
  156. ]
  157. }
  158. ]
  159. }
  160. function searchOptions(): Partial<DefaultTheme.AlgoliaSearchOptions> {
  161. return {
  162. placeholder: 'Поиск в документации',
  163. translations: {
  164. button: {
  165. buttonText: 'Поиск',
  166. buttonAriaLabel: 'Поиск'
  167. },
  168. modal: {
  169. searchBox: {
  170. resetButtonTitle: 'Сбросить поиск',
  171. resetButtonAriaLabel: 'Сбросить поиск',
  172. cancelButtonText: 'Отменить поиск',
  173. cancelButtonAriaLabel: 'Отменить поиск'
  174. },
  175. startScreen: {
  176. recentSearchesTitle: 'История поиска',
  177. noRecentSearchesText: 'Нет истории поиска',
  178. saveRecentSearchButtonTitle: 'Сохранить в истории поиска',
  179. removeRecentSearchButtonTitle: 'Удалить из истории поиска',
  180. favoriteSearchesTitle: 'Избранное',
  181. removeFavoriteSearchButtonTitle: 'Удалить из избранного'
  182. },
  183. errorScreen: {
  184. titleText: 'Невозможно получить результаты',
  185. helpText: 'Вам может потребоваться проверить подключение к Интернету'
  186. },
  187. footer: {
  188. selectText: 'выбрать',
  189. navigateText: 'перейти',
  190. closeText: 'закрыть',
  191. searchByText: 'поставщик поиска'
  192. },
  193. noResultsScreen: {
  194. noResultsText: 'Нет результатов для',
  195. suggestedQueryText: 'Вы можете попытаться узнать',
  196. reportMissingResultsText:
  197. 'Считаете, что поиск даёт ложные результаты?',
  198. reportMissingResultsLinkText: 'Нажмите на кнопку «Обратная связь»'
  199. }
  200. }
  201. }
  202. }
  203. }