UNPKG

@neosjs/vitepress-theme

Version:

NeosJS VitePress theme

81 lines (80 loc) 2.98 kB
import { useData } from "../composables/data.mjs"; export function createTranslate(themeObject, defaultTranslations) { const { localeIndex } = useData(); function translate(key) { const keyPath = key.split("."); const isObject = themeObject && typeof themeObject === "object"; const locales = isObject && themeObject.locales?.[localeIndex.value]?.translations || null; const translations = isObject && themeObject.translations || null; let localeResult = locales; let translationResult = translations; let defaultResult = defaultTranslations; const lastKey = keyPath.pop(); for (const k of keyPath) { let fallbackResult = null; const foundInFallback = defaultResult?.[k]; if (foundInFallback) { fallbackResult = defaultResult = foundInFallback; } const foundInTranslation = translationResult?.[k]; if (foundInTranslation) { fallbackResult = translationResult = foundInTranslation; } const foundInLocale = localeResult?.[k]; if (foundInLocale) { fallbackResult = localeResult = foundInLocale; } if (!foundInFallback) { defaultResult = fallbackResult; } if (!foundInTranslation) { translationResult = fallbackResult; } if (!foundInLocale) { localeResult = fallbackResult; } } return localeResult?.[lastKey] ?? translationResult?.[lastKey] ?? defaultResult?.[lastKey] ?? ""; } return translate; } export function createSearchTranslate(defaultTranslations) { const { localeIndex, theme } = useData(); function translate(key) { const keyPath = key.split("."); const themeObject = theme.value.search?.options; const isObject = themeObject && typeof themeObject === "object"; const locales = isObject && themeObject.locales?.[localeIndex.value]?.translations || null; const translations = isObject && themeObject.translations || null; let localeResult = locales; let translationResult = translations; let defaultResult = defaultTranslations; const lastKey = keyPath.pop(); for (const k of keyPath) { let fallbackResult = null; const foundInFallback = defaultResult?.[k]; if (foundInFallback) { fallbackResult = defaultResult = foundInFallback; } const foundInTranslation = translationResult?.[k]; if (foundInTranslation) { fallbackResult = translationResult = foundInTranslation; } const foundInLocale = localeResult?.[k]; if (foundInLocale) { fallbackResult = localeResult = foundInLocale; } if (!foundInFallback) { defaultResult = fallbackResult; } if (!foundInTranslation) { translationResult = fallbackResult; } if (!foundInLocale) { localeResult = fallbackResult; } } return localeResult?.[lastKey] ?? translationResult?.[lastKey] ?? defaultResult?.[lastKey] ?? ""; } return translate; }