-
-
Notifications
You must be signed in to change notification settings - Fork 6.3k
/
Copy pathi18n.tsx
44 lines (35 loc) · 1.39 KB
/
i18n.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { importLocale } from '@node-core/website-i18n';
import defaultMessages from '@node-core/website-i18n/locales/en.json';
import { getRequestConfig } from 'next-intl/server';
import { availableLocaleCodes, defaultLocale } from '@/next.locales.mjs';
import deepMerge from './util/deepMerge';
// Loads the Application Locales/Translations Dynamically
const loadLocaleDictionary = async (locale: string) => {
if (locale === defaultLocale.code) {
return defaultMessages;
}
if (availableLocaleCodes.includes(locale)) {
// Other languages don't really require HMR as they
// will never be development languages so we can load them dynamically
const messages = await importLocale(locale);
// Use default messages as fallback
return deepMerge(defaultMessages, messages);
}
throw new Error(`Unsupported locale: ${locale}`);
};
// Provides `next-intl` configuration for RSC/SSR
export default getRequestConfig(async ({ requestLocale }) => {
// This typically corresponds to the `[locale]` segment
let locale = await requestLocale;
// Ensure that the incoming locale is valid
if (!locale || !availableLocaleCodes.includes(locale)) {
locale = defaultLocale.code;
}
return {
locale,
// This is the dictionary of messages to be loaded
messages: await loadLocaleDictionary(locale),
// We always define the App timezone as UTC
timeZone: 'Etc/UTC',
};
});