Improve tree shaking and dynamic loading, fix translations in production build. Moved i18n settings to the application's side.

This commit is contained in:
giancarlo
2024-04-13 12:43:02 +08:00
parent 31a8d68809
commit 7f11905fc1
28 changed files with 277 additions and 288 deletions

View File

@@ -1,11 +1,16 @@
import { cookies, headers } from 'next/headers';
import {
getLanguageCookie,
initializeServerI18n,
parseAcceptLanguageHeader,
} from '@kit/i18n/server';
import {
I18N_COOKIE_NAME,
getI18nSettings,
languages,
} from '~/lib/i18n/i18n.settings';
import { i18nResolver } from './i18n.resolver';
/**
@@ -18,10 +23,22 @@ import { i18nResolver } from './i18n.resolver';
*/
export function createI18nServerInstance() {
const acceptLanguage = headers().get('accept-language');
const cookie = getLanguageCookie(cookies());
const cookie = cookies().get(I18N_COOKIE_NAME)?.value;
const language =
cookie ?? parseAcceptLanguageHeader(acceptLanguage)[0] ?? undefined;
let language =
cookie ??
parseAcceptLanguageHeader(acceptLanguage, languages)[0] ??
languages[0];
return initializeServerI18n(language, i18nResolver);
if (!languages.includes(language ?? '')) {
console.warn(
`Language "${language}" is not supported. Falling back to "${languages[0]}"`,
);
language = languages[0];
}
const settings = getI18nSettings(language);
return initializeServerI18n(settings, i18nResolver);
}