29 lines
948 B
TypeScript
29 lines
948 B
TypeScript
import { hasLocale } from 'next-intl';
|
|
import { getRequestConfig } from 'next-intl/server';
|
|
import { routing } from './routing';
|
|
|
|
async function loadTranslationType(type: string, locale: string) {
|
|
try {
|
|
return (await import(`./translations/${type}/${locale}.json`)).default;
|
|
} catch {
|
|
return (await import(`./translations/${type}/${routing.defaultLocale}.json`)).default;
|
|
}
|
|
}
|
|
|
|
async function loadMessages(locale: string) {
|
|
const resources = ['messages', 'pages', 'components', 'errors', 'form'].map((type) => {
|
|
return loadTranslationType(type, locale);
|
|
});
|
|
const loaded = await Promise.all(resources);
|
|
|
|
return Object.assign({}, ...loaded);
|
|
}
|
|
|
|
export default getRequestConfig(async ({ requestLocale }) => {
|
|
const requested = await requestLocale;
|
|
const locale = hasLocale(routing.locales, requested) ? requested : routing.defaultLocale;
|
|
const messages = await loadMessages(locale);
|
|
|
|
return { locale, messages };
|
|
});
|