51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
import { localeDefinitions } from '@modrinth/omorphia-dev/locales/index.js'
|
|
import { createPlugin } from '@vintl/vintl/plugin'
|
|
import { plugin as Omorphia } from 'omorphia'
|
|
import DefaultTheme from 'vitepress/theme'
|
|
import { createVNode } from 'vue'
|
|
import DemoContainer from './DemoContainer.vue'
|
|
import LanguageSwitcher from './LanguageSwitcher.vue'
|
|
|
|
import './compat.scss'
|
|
import './style.scss'
|
|
|
|
/** @type {import('vitepress').Theme} */
|
|
export default {
|
|
...DefaultTheme,
|
|
enhanceApp(ctx) {
|
|
ctx.app.use(Omorphia)
|
|
ctx.app.component('DemoContainer', DemoContainer)
|
|
ctx.app.use(
|
|
createPlugin({
|
|
controllerOpts: {
|
|
locales: Object.keys(localeDefinitions).map((tag) => ({ tag })),
|
|
listen: {
|
|
async localeload(event) {
|
|
const locale = event.locale.tag
|
|
if (!Object.hasOwn(localeDefinitions, locale)) {
|
|
throw new Error(`Unknown locale: ${locale}`)
|
|
}
|
|
|
|
try {
|
|
const { messages } = await localeDefinitions[locale].importFunction()
|
|
event.addMessages(messages)
|
|
} catch (err) {
|
|
console.error(`Failed to load locale: ${locale}`, err)
|
|
}
|
|
},
|
|
},
|
|
defaultMessageOrder: ['locale', 'descriptor'],
|
|
},
|
|
globalMixin: false,
|
|
})
|
|
)
|
|
},
|
|
Layout() {
|
|
return createVNode(DefaultTheme.Layout, null, {
|
|
'sidebar-nav-before'() {
|
|
return createVNode(LanguageSwitcher)
|
|
},
|
|
})
|
|
},
|
|
}
|