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';
export const defaultLocale: Locale = 'en';

View File

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

View File

@ -1,8 +1,9 @@
// services/locale.ts // services/locale.ts
import { cookies, headers } from 'next/headers'; 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 * Accept-Language RFC 7231
@ -29,7 +30,7 @@ export async function getUserLocale(): Promise<string> {
try { try {
// 优先从 Cookie 获取(带白名单校验) // 优先从 Cookie 获取(带白名单校验)
const cookieLocale = (await cookies()).get('NEXT_LOCALE')?.value; const cookieLocale = (await cookies()).get('NEXT_LOCALE')?.value;
if (cookieLocale && SUPPORTED_LOCALES.has(cookieLocale)) { if (cookieLocale && locales.has(cookieLocale)) {
return cookieLocale; return cookieLocale;
} }
@ -37,7 +38,7 @@ export async function getUserLocale(): Promise<string> {
const acceptLanguage = (await headers()).get('accept-language'); const acceptLanguage = (await headers()).get('accept-language');
if (acceptLanguage) { if (acceptLanguage) {
const parsedLocale = parseAcceptLanguage(acceptLanguage); const parsedLocale = parseAcceptLanguage(acceptLanguage);
if (SUPPORTED_LOCALES.has(parsedLocale)) { if (locales.has(parsedLocale)) {
return 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];
} }