mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
5a8722ff07
接入无 URL 前缀的 zh-CN/en,顶栏与外观设置可切换语言;选择写入 cookie 后刷新生效。
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { cookies, headers } from 'next/headers';
|
|
import { getRequestConfig } from 'next-intl/server';
|
|
import {
|
|
defaultLocale,
|
|
isAppLocale,
|
|
localeCookieName,
|
|
normalizeLocale,
|
|
pickLocaleFromAcceptLanguage,
|
|
type AppLocale,
|
|
} from './config';
|
|
|
|
async function resolveRequestLocale(): Promise<AppLocale> {
|
|
try {
|
|
const cookieStore = await cookies();
|
|
const cookieLocale = cookieStore.get(localeCookieName)?.value;
|
|
if (isAppLocale(cookieLocale)) {
|
|
return cookieLocale;
|
|
}
|
|
if (cookieLocale) {
|
|
return normalizeLocale(cookieLocale);
|
|
}
|
|
} catch {
|
|
// Static export / non-request contexts cannot read cookies.
|
|
}
|
|
|
|
try {
|
|
const headerStore = await headers();
|
|
const acceptLanguage = headerStore.get('accept-language');
|
|
return pickLocaleFromAcceptLanguage(acceptLanguage);
|
|
} catch {
|
|
// Static export build time.
|
|
}
|
|
|
|
return defaultLocale;
|
|
}
|
|
|
|
export default getRequestConfig(async () => {
|
|
const locale = await resolveRequestLocale();
|
|
const messages = (await import(`../messages/${locale}.json`)).default;
|
|
return {
|
|
locale,
|
|
messages,
|
|
};
|
|
});
|