UNPKG

@nuxtjs/i18n

Version:

Internationalization for Nuxt

39 lines (38 loc) 1.83 kB
import { deepCopy } from "@intlify/shared"; import { defineCachedEventHandler, defineCachedFunction } from "nitropack/runtime"; import { createError, defineEventHandler, getRouterParam } from "h3"; import { initializeI18nContext, tryUseI18nContext, useI18nContext } from "../context.js"; import { getMergedMessages } from "../utils/messages.js"; const _messagesHandler = defineEventHandler(async (event) => { const locale = getRouterParam(event, "locale"); if (!locale) { throw createError({ status: 400, message: "Locale not specified." }); } const ctx = useI18nContext(event); if (ctx.localeConfigs && locale in ctx.localeConfigs === false) { throw createError({ status: 404, message: `Locale '${locale}' not found.` }); } const messages = await getMergedMessages(locale, ctx.localeConfigs?.[locale]?.fallbacks ?? []); deepCopy(messages, ctx.messages); return ctx.messages; }); const _cachedMessageLoader = defineCachedFunction(_messagesHandler, { name: "i18n:messages-internal", maxAge: !__I18N_CACHE__ ? -1 : 60 * 60 * 24, getKey: (event) => [getRouterParam(event, "locale") ?? "null", getRouterParam(event, "hash") ?? "null"].join("-"), async shouldBypassCache(event) { const locale = getRouterParam(event, "locale"); if (locale == null) { return false; } const ctx = tryUseI18nContext(event) || await initializeI18nContext(event); return !ctx.localeConfigs?.[locale]?.cacheable; } }); const _messagesHandlerCached = defineCachedEventHandler(_cachedMessageLoader, { name: "i18n:messages", maxAge: !__I18N_CACHE__ ? -1 : __I18N_HTTP_CACHE_DURATION__, swr: false, getKey: (event) => [getRouterParam(event, "locale") ?? "null", getRouterParam(event, "hash") ?? "null"].join("-") }); export default import.meta.dev ? _messagesHandler : _messagesHandlerCached;