import type { DocsearchPluginOptions } from '@vuepress/plugin-docsearch' import type { SearchPluginOptions } from '@vuepress/plugin-search' import type { App } from 'vuepress/core' import { deepMerge } from '@pengzhanbo/utils' import { resolvedAppLocales } from './resolveLocaleOptions.js' // `en-US` is used by default const defaultDocsearchLocales: NonNullable = { 'zh-CN': { placeholder: '搜索文档', translations: { button: { buttonText: '搜索文档', buttonAriaLabel: '搜索文档', }, modal: { searchBox: { resetButtonTitle: '清除查询条件', resetButtonAriaLabel: '清除查询条件', cancelButtonText: '取消', cancelButtonAriaLabel: '取消', }, startScreen: { recentSearchesTitle: '搜索历史', noRecentSearchesText: '没有搜索历史', saveRecentSearchButtonTitle: '保存至搜索历史', removeRecentSearchButtonTitle: '从搜索历史中移除', favoriteSearchesTitle: '收藏', removeFavoriteSearchButtonTitle: '从收藏中移除', }, errorScreen: { titleText: '无法获取结果', helpText: '你可能需要检查你的网络连接', }, footer: { selectText: '选择', navigateText: '切换', closeText: '关闭', searchByText: '搜索提供者', }, noResultsScreen: { noResultsText: '无法找到相关结果', suggestedQueryText: '你可以尝试查询', reportMissingResultsText: '你认为该查询应该有结果?', reportMissingResultsLinkText: '点击反馈', }, }, }, }, } const defaultSearchLocales: NonNullable = { 'zh-CN': { placeholder: '搜索' }, 'en-US': { placeholder: 'Search' }, } export function resolvedDocsearchOption(app: App, options: DocsearchPluginOptions): DocsearchPluginOptions { options.locales ??= {} const locales = resolvedAppLocales(app) Object.keys(locales).forEach((locale) => { const lang = locales[locale]?.lang || 'en-US' if (defaultDocsearchLocales[lang]) { options.locales![locale] = deepMerge( {}, defaultDocsearchLocales[lang], options.locales![locale] || {}, ) } }) return options } export function resolvedSearchOptions(app: App, options: SearchPluginOptions = {}): SearchPluginOptions { options.locales ??= {} const locales = resolvedAppLocales(app) Object.keys(locales).forEach((locale) => { const lang = locales[locale]?.lang || 'en-US' if (defaultSearchLocales[lang]) { options.locales![locale] = deepMerge( {}, defaultSearchLocales[lang], options.locales![locale] || {}, ) } }) return options }