mirror of
https://github.com/cfngc4594/monaco-editor-lsp-next.git
synced 2025-05-21 09:11:46 +00:00
feat: activate config.ts to control settings
This commit is contained in:
parent
06b6032436
commit
983c66bdbb
@ -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';
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user