2023-02-17 09:21:02 +00:00
|
|
|
import { generateHydrationScript, renderToString } from 'solid-js/web'
|
2023-03-30 01:22:39 +00:00
|
|
|
import { escapeInject, dangerouslySkipEscape } from 'vite-plugin-ssr/server'
|
2023-02-17 09:21:02 +00:00
|
|
|
import { App } from '../components/App'
|
|
|
|
import { initRouter } from '../stores/router'
|
|
|
|
import type { PageContext } from './types'
|
|
|
|
import { MetaProvider, renderTags } from '@solidjs/meta'
|
2023-10-18 10:56:41 +00:00
|
|
|
import i18next from 'i18next'
|
2023-02-17 09:21:02 +00:00
|
|
|
import ru from '../../public/locales/ru/translation.json'
|
|
|
|
import en from '../../public/locales/en/translation.json'
|
|
|
|
import type { Language } from '../context/localize'
|
2023-10-18 10:56:41 +00:00
|
|
|
import ICU from 'i18next-icu'
|
2023-02-17 09:21:02 +00:00
|
|
|
|
2023-07-31 20:19:08 +00:00
|
|
|
export const passToClient = ['pageProps', 'lng', 'documentProps', 'is404']
|
2023-02-17 09:21:02 +00:00
|
|
|
|
|
|
|
const metaTags = []
|
|
|
|
|
|
|
|
const getLng = (pageContext: PageContext): Language => {
|
|
|
|
const { urlParsed, cookies } = pageContext
|
|
|
|
|
|
|
|
if (urlParsed.search.lng) {
|
|
|
|
return urlParsed.search.lng === 'en' ? 'en' : 'ru'
|
|
|
|
}
|
|
|
|
|
|
|
|
if (cookies?.lng === 'en') {
|
|
|
|
return 'en'
|
|
|
|
}
|
|
|
|
|
|
|
|
return 'ru'
|
|
|
|
}
|
|
|
|
|
|
|
|
export const render = async (pageContext: PageContext) => {
|
|
|
|
const lng = getLng(pageContext)
|
|
|
|
|
|
|
|
if (!i18next.isInitialized) {
|
2023-05-01 18:32:32 +00:00
|
|
|
// eslint-disable-next-line import/no-named-as-default-member
|
2023-10-18 10:56:41 +00:00
|
|
|
await i18next.use(ICU).init({
|
2023-02-17 09:21:02 +00:00
|
|
|
// debug: true,
|
|
|
|
supportedLngs: ['ru', 'en'],
|
|
|
|
fallbackLng: lng,
|
|
|
|
initImmediate: false,
|
|
|
|
lng,
|
|
|
|
resources: {
|
|
|
|
ru: { translation: ru },
|
|
|
|
en: { translation: en }
|
|
|
|
}
|
|
|
|
})
|
|
|
|
} else if (i18next.language !== lng) {
|
2023-10-18 10:56:41 +00:00
|
|
|
await i18next.changeLanguage(lng)
|
2023-02-17 09:21:02 +00:00
|
|
|
}
|
|
|
|
|
2023-07-31 20:19:08 +00:00
|
|
|
if (pageContext.is404) {
|
|
|
|
initRouter('/404')
|
|
|
|
} else {
|
|
|
|
initRouter(pageContext.urlParsed.pathname, pageContext.urlParsed.search)
|
|
|
|
}
|
2023-02-17 09:21:02 +00:00
|
|
|
|
|
|
|
pageContext.lng = lng
|
|
|
|
|
|
|
|
const rootContent = renderToString(() => (
|
|
|
|
<MetaProvider tags={metaTags}>
|
|
|
|
<App {...pageContext.pageProps} />
|
|
|
|
</MetaProvider>
|
|
|
|
))
|
|
|
|
|
|
|
|
return escapeInject`<!DOCTYPE html>
|
|
|
|
<html lang="${lng}">
|
|
|
|
<head>
|
|
|
|
${dangerouslySkipEscape(renderTags(metaTags))}
|
|
|
|
${dangerouslySkipEscape(generateHydrationScript())}
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="root">${dangerouslySkipEscape(rootContent)}</div>
|
|
|
|
</body>
|
|
|
|
</html>`
|
|
|
|
}
|