feat: activate config.ts to control settings

This commit is contained in:
fly6516 2025-04-14 10:40:22 +08:00
parent 06b6032436
commit 983c66bdbb
3 changed files with 12 additions and 9 deletions

View File

@ -1,4 +1,5 @@
export type Locale = (typeof locales)[number];
export const localesArray = ['en', 'zh'] as const;
export const locales = new Set(localesArray);
export type Locale = (typeof localesArray)[number];
export const locales = ['en', 'de'] as const;
export const defaultLocale: Locale = 'en';

View File

@ -1,5 +1,6 @@
import {getRequestConfig} from 'next-intl/server';
import {getUserLocale} from '@/services/locale';
import {defaultLocale} from '@/i18n/config';
export default getRequestConfig(async () => {
@ -8,7 +9,7 @@ export default getRequestConfig(async () => {
let locale = await getUserLocale();
if (!locale) {
locale = 'en';
locale = defaultLocale;
}
let messages;
@ -18,7 +19,7 @@ export default getRequestConfig(async () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (error) {
// 如果加载失败则回退到默认语言 'en'
locale = 'en';
locale = defaultLocale;
messages = (await import(`../../messages/en.json`)).default;
}

View File

@ -1,8 +1,9 @@
// services/locale.ts
import { cookies, headers } from 'next/headers';
import {locales, defaultLocale} from '@/i18n/config';
// 支持的语言白名单(可根据实际需求扩展)
const SUPPORTED_LOCALES = new Set(['en', 'zh', 'fr', 'de', 'ja']);
//const SUPPORTED_LOCALES = new Set(['en', 'zh', 'fr', 'de', 'ja']);
/**
* Accept-Language RFC 7231
@ -29,7 +30,7 @@ export async function getUserLocale(): Promise<string> {
try {
// 优先从 Cookie 获取(带白名单校验)
const cookieLocale = (await cookies()).get('NEXT_LOCALE')?.value;
if (cookieLocale && SUPPORTED_LOCALES.has(cookieLocale)) {
if (cookieLocale && locales.has(cookieLocale)) {
return cookieLocale;
}
@ -37,7 +38,7 @@ export async function getUserLocale(): Promise<string> {
const acceptLanguage = (await headers()).get('accept-language');
if (acceptLanguage) {
const parsedLocale = parseAcceptLanguage(acceptLanguage);
if (SUPPORTED_LOCALES.has(parsedLocale)) {
if (locales.has(parsedLocale)) {
return parsedLocale;
}
}
@ -46,5 +47,5 @@ export async function getUserLocale(): Promise<string> {
}
// 最终兜底(含白名单过滤)
return SUPPORTED_LOCALES.has('en') ? 'en' : Array.from(SUPPORTED_LOCALES)[0];
return locales.has(defaultLocale) ? defaultLocale : Array.from(locales)[0];
}