Creation:2026-08-24Last update:2026-08-24
将此文档参考到您的 AI 助手ChatGPTClaudeDeepSeekGoogle AI modeGeminiPerplexityMistralGrok
使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
版本历史
- "初始化文档"v9.4.02026/8/24
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本编辑此文档
如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接Copy
复制文档 Markdown 到剪贴板
intlayer Elysia 插件文档
Elysia 的 intlayer 插件会检测用户的 locale,并向路由上下文注入一个 intlayer 对象。它同时支持在请求上下文中使用全局翻译函数。
用法
src/index.ts
复制代码
复制代码到剪贴板
该插件通过 全局derive注册其上下文,Elysia 会将其类型标注为Partial<{ intlayer: IntlayerContext }>。对于在.use(intlayer())之后注册的路由,该值在运行时始终存在,因此请使用非空断言(intlayer!.t)或可选链,以满足strict模式下的 TypeScript。
同样的 helper 也以独立导出的形式提供,因此你可以在不解构路由上下文的情况下调用它们:
src/index.ts
复制代码
复制代码到剪贴板
描述
该插件执行以下任务:
- Locale 检测:它先从 storage(cookie、header)读取客户端显式设置的 locale,然后回退到从
Accept-Language请求头协商得到的 locale。 - 上下文注入:它向 Elysia 路由上下文添加一个
intlayer属性(参见下方的“路由上下文”表格)。 - 上下文管理:它使用
AsyncLocalStorage管理异步上下文,使全局 Intlayer 函数(t、getIntlayer、getDictionary)无需传递上下文对象即可访问该请求特定的 locale。 - 字典准备:它在创建插件时调用
prepareIntlayer,因此字典会在应用启动时构建。
路由上下文
显示表格的所有内容
在弹窗中打开表格以清晰地查看所有数据
| 属性 | 类型 | 描述 |
|---|---|---|
locale | Locale | 本次请求要使用的 locale,locale_storage 优先于 locale_detected。 |
locale_storage | Locale (可选) | 客户端通过 cookie 或 header 显式请求的 locale。 |
locale_detected | Locale | 从请求头协商得到的 locale。 |
defaultLocale | Locale | 在 intlayer.config.ts 中配置为 fallback 的 locale。 |
t | TranslateFunction | 翻译函数。 |
getIntlayer | typeof getIntlayer | 按 key 获取字典的函数。 |
getDictionary | typeof getDictionary | 处理字典对象的函数。 |
与基于 Node 的 Intlayer 插件不同,elysia-intlayer依赖AsyncLocalStorage而非cls-hooked,因为cls-hooked依赖于 Bun 未实现的async_hooks.createHook。
请求上下文会在响应被映射后释放,因此独立的 helper 永远不会针对已经结束的请求进行解析。当在插件处理的请求之外调用时,它们会回退到配置的默认 locale。
语言环境解析顺序
默认情况下,插件按以下顺序解析语言环境:
INTLAYER_LOCALEcookie。x-intlayer-locale请求头。Accept-Language请求头协商。- 配置的
defaultLocale。
bash
复制代码
复制代码到剪贴板
配置
该插件会读取你的 intlayer.config.ts 文件。你可以自定义用于 locale 检测的 cookie 和 header:
intlayer.config.ts
复制代码
复制代码到剪贴板
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
defaultLocale: Locales.ENGLISH,
},
routing: {
storage: [
{ type: "header", name: "my-locale-header" },
{ type: "cookie", name: "my-locale-cookie" },
],
},
};
export default config;
有关配置的更多信息,请访问配置文档。
