From 983c66bdbb3d738ea990ab0b5634eb5bcbc217de Mon Sep 17 00:00:00 2001 From: fly6516 Date: Mon, 14 Apr 2025 10:40:22 +0800 Subject: [PATCH] feat: activate config.ts to control settings --- src/i18n/config.ts | 7 ++++--- src/i18n/request.ts | 5 +++-- src/services/locale.ts | 9 +++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 0b33a2c..00491dc 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -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'; \ No newline at end of file +export const defaultLocale: Locale = 'en'; diff --git a/src/i18n/request.ts b/src/i18n/request.ts index b708036..f047224 100644 --- a/src/i18n/request.ts +++ b/src/i18n/request.ts @@ -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; } diff --git a/src/services/locale.ts b/src/services/locale.ts index 6d205ce..6c005d9 100644 --- a/src/services/locale.ts +++ b/src/services/locale.ts @@ -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 { 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 { 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 { } // 最终兜底(含白名单过滤) - return SUPPORTED_LOCALES.has('en') ? 'en' : Array.from(SUPPORTED_LOCALES)[0]; + return locales.has(defaultLocale) ? defaultLocale : Array.from(locales)[0]; }