指南
服务器端翻译
在服务器端进行翻译并作为响应返回。
您可以在服务器端进行翻译并作为响应返回。nuxt i18n 模块选项中定义的区域消息被集成,因此您只需配置区域探测器即可。
此功能为实验性, 从 v8 RC8 开始支持。
定义区域探测器
对于服务器端翻译,您需要定义一个区域探测器。
Nuxt i18n 导出 defineI18nLocaleDetector
可组合函数来定义它。
以下是如何定义一个使用查询、Cookie 和头部检测区域的探测器的示例:
localeDetector.ts
// 基于查询、Cookie、头部进行检测
export default defineI18nLocaleDetector((event, config) => {
// 尝试从查询中获取区域
const query = tryQueryLocale(event, { lang: '' }) // 使用 `lang` 选项禁用区域默认值
if (query) {
return query.toString()
}
// 尝试从 Cookie 中获取区域
const cookie = tryCookieLocale(event, { lang: '', name: 'i18n_locale' }) // 使用 `lang` 选项禁用区域默认值
if (cookie) {
return cookie.toString()
}
// 尝试从头部 (`accept-header`) 中获取区域
const header = tryHeaderLocale(event, { lang: '' }) // 使用 `lang` 选项禁用区域默认值
if (header) {
return header.toString()
}
// 如果到此为止无法解析区域,将使用传递给函数的区域配置中的 `defaultLocale` 值进行解析
return config.defaultLocale
})
区域探测器函数用于在服务器端检测区域。它在服务器上的每个请求中被调用。
定义区域探测器时,您需要将探测器路径传递给 experimental.localeDetector
选项。
以下是在 Nuxt 应用程序中直接定义的区域探测器配置的示例:
nuxt.config.ts
export default defineNuxtConfig({
i18n: {
experimental: {
localeDetector: './localeDetector.ts'
}
}
})
有关由 defineI18nLocaleDetector
定义的区域探测器函数的详细信息,请参见 这里。
useTranslation
在 eventHandler 中
要在服务器端进行翻译,您需要调用 useTranslation
。
示例:
// 您需要定义 `async` 事件处理程序
export default defineEventHandler(async event => {
// 调用 `useTranslation`,因此它返回翻译函数
const t = await useTranslation(event)
return {
// 使用区域消息的键调用翻译函数,
// 翻译函数有一些重载
hello: t('hello')
}
})
对于翻译函数的键,您可以指定在 nuxt.config 中的 nuxt-i18n 选项内设置的区域消息,或者在 i18n.config 消息中加载的区域。