Files
webmail/i18n/request.ts
raudraidoandClaude Sonnet 5.5 ae7f794d2f feat: add Estonian (et) locale
Complete Estonian translation (every key in en), wired into the locale list, the message loaders, the language switcher (with an Estonian flag drawn in the Twemoji style, since Twemoji's set is not used for it) and the locale-count test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 18:19:29 +03:00

122 lines
3.9 KiB
TypeScript

import { getRequestConfig } from 'next-intl/server';
import { headers } from 'next/headers';
import { mergeMessages } from './merge-messages';
import { localeFromAcceptLanguage } from './locale-matcher';
import { routing, type Locale } from './routing';
import { IS_LITE } from '@/lib/lite';
export default getRequestConfig(async ({ requestLocale }) => {
let locale = await requestLocale;
if (!locale || !routing.locales.includes(locale as Locale)) {
if (IS_LITE) {
// Static export: there is no request to sniff; every localized page pins
// its locale via setRequestLocale, so this only covers the root layout.
locale = routing.defaultLocale;
} else {
const accept = (await headers()).get('accept-language');
locale = localeFromAcceptLanguage(accept, routing.locales) ?? routing.defaultLocale;
}
}
// Use static imports for better compatibility
let messages;
switch (locale) {
case 'ar':
messages = (await import('../locales/ar/common.json')).default;
break;
case 'ca':
messages = (await import('../locales/ca/common.json')).default;
break;
case 'cs':
messages = (await import('../locales/cs/common.json')).default;
break;
case 'da':
messages = (await import('../locales/da/common.json')).default;
break;
case 'de':
messages = (await import('../locales/de/common.json')).default;
break;
case 'es':
messages = (await import('../locales/es/common.json')).default;
break;
case 'he':
messages = (await import('../locales/he/common.json')).default;
break;
case 'et':
messages = (await import('../locales/et/common.json')).default;
break;
case 'fa':
messages = (await import('../locales/fa/common.json')).default;
break;
case 'fr':
messages = (await import('../locales/fr/common.json')).default;
break;
case 'hu':
messages = (await import('../locales/hu/common.json')).default;
break;
case 'it':
messages = (await import('../locales/it/common.json')).default;
break;
case 'ja':
messages = (await import('../locales/ja/common.json')).default;
break;
case 'ko':
messages = (await import('../locales/ko/common.json')).default;
break;
case 'lv':
messages = (await import('../locales/lv/common.json')).default;
break;
case 'mn':
messages = (await import('../locales/mn/common.json')).default;
break;
case 'nb':
messages = (await import('../locales/nb/common.json')).default;
break;
case 'nl':
messages = (await import('../locales/nl/common.json')).default;
break;
case 'pl':
messages = (await import('../locales/pl/common.json')).default;
break;
case 'pt':
messages = (await import('../locales/pt/common.json')).default;
break;
case 'ro':
messages = (await import('../locales/ro/common.json')).default;
break;
case 'ru':
messages = (await import('../locales/ru/common.json')).default;
break;
case 'sk':
messages = (await import('../locales/sk/common.json')).default;
break;
case 'tr':
messages = (await import('../locales/tr/common.json')).default;
break;
case 'uk':
messages = (await import('../locales/uk/common.json')).default;
break;
case 'zh':
messages = (await import('../locales/zh/common.json')).default;
break;
case 'zh-TW':
messages = (await import('../locales/zh-TW/common.json')).default;
break;
default:
messages = (await import('../locales/en/common.json')).default;
}
if (locale !== 'en') {
const enBase = (await import('../locales/en/common.json')).default as Record<string, unknown>;
messages = mergeMessages(enBase, messages as Record<string, unknown>);
}
return {
locale,
messages,
timeZone: 'Europe/Paris',
now: new Date()
};
});