多语言优化
This commit is contained in:
8
src/i18n/global.d.ts
vendored
Normal file
8
src/i18n/global.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import type enMessages from "@/i18n/messages/en.json"
|
||||
|
||||
declare module "next-intl" {
|
||||
interface AppConfig {
|
||||
Locale: "en" | "zh-CN" | "zh-TW"
|
||||
Messages: typeof enMessages
|
||||
}
|
||||
}
|
||||
34
src/i18n/messages.ts
Normal file
34
src/i18n/messages.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import type { AbstractIntlMessages } from "next-intl"
|
||||
import enMessages from "@/i18n/messages/en.json"
|
||||
import type { AppLocale } from "@/lib/types"
|
||||
|
||||
const MESSAGE_CACHE = new Map<AppLocale, AbstractIntlMessages>([
|
||||
["en", enMessages],
|
||||
])
|
||||
|
||||
async function loadMessages(locale: AppLocale): Promise<AbstractIntlMessages> {
|
||||
switch (locale) {
|
||||
case "zh_cn":
|
||||
return (await import("@/i18n/messages/zh-CN.json")).default
|
||||
case "zh_tw":
|
||||
return (await import("@/i18n/messages/zh-TW.json")).default
|
||||
case "en":
|
||||
default:
|
||||
return enMessages
|
||||
}
|
||||
}
|
||||
|
||||
export function getFallbackMessages(): AbstractIntlMessages {
|
||||
return enMessages
|
||||
}
|
||||
|
||||
export async function getMessagesForLocale(
|
||||
locale: AppLocale
|
||||
): Promise<AbstractIntlMessages> {
|
||||
const cached = MESSAGE_CACHE.get(locale)
|
||||
if (cached) return cached
|
||||
|
||||
const messages = await loadMessages(locale)
|
||||
MESSAGE_CACHE.set(locale, messages)
|
||||
return messages
|
||||
}
|
||||
Reference in New Issue
Block a user