ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Better Auth i18n 插件如何按用户语言翻译认证错误消息

Better Auth i18n 插件如何按用户语言翻译认证错误消息 Better Auth i18n 插件如何按用户语言翻译认证错误消息【免费下载链接】better-authThe most comprehensive authentication framework项目地址: https://gitcode.com/GitHub_Trending/be/better-auth如果你的应用服务多语言用户登录失败、邮箱未验证等认证错误默认只会返回英文消息。Better Auth 的 i18n 插件better-auth/i18n可以按用户语言把这些错误消息翻译成对应语言的文案当认证接口返回错误时响应中会同时包含翻译后的message和原始的originalMessage。插件默认从请求的Accept-Language头检测语言也支持 cookie、会话字段和自定义回调四种检测策略并内置 22 种语言的完整翻译不需要从零写文案。本文的任务路径是安装插件 → 在 auth 配置中注册i18n插件 → 选择翻译来源和检测策略 → 用一次失败的登录请求验证错误消息确实被翻译。安装与注册插件先安装插件包插件文档 README 给出的安装命令npm install better-auth/i18n然后在你的betterAuth配置里把插件加入plugins数组。translations是唯一必填项结构为Record语言代码, Record错误码, 翻译文案import { betterAuth } from better-auth import { i18n } from better-auth/i18n export const auth betterAuth({ plugins: [ i18n({ translations: { fr: { USER_NOT_FOUND: Utilisateur non trouvé, INVALID_EMAIL_OR_PASSWORD: Email ou mot de passe invalide, INVALID_PASSWORD: Mot de passe invalide, }, de: { USER_NOT_FOUND: Benutzer nicht gefunden, INVALID_EMAIL_OR_PASSWORD: Ungültige E-Mail oder Passwort, INVALID_PASSWORD: Ungültiges Passwort, }, }, }), ], })Better Auth 本身就提供英文错误消息所以translations里只需提供英文以外语言的翻译英文不需要你重复提供。使用内置翻译推荐主路径包内置了 22 种语言的现成翻译从better-auth/i18n导入locales即可使用。完整语言代码列表见 i18n 插件文档ar、bn、de、en、es、fa、fr、hi、id、it、ja、ko、nl、pl、pt、ru、sv、th、tr、uk、vi、zh。全量启用内置语言import { betterAuth } from better-auth import { i18n, locales } from better-auth/i18n export const auth betterAuth({ plugins: [ i18n({ translations: locales }), ], })只想保留部分语言以减小体积时按语言代码取用import { i18n, locales } from better-auth/i18n export const auth betterAuth({ plugins: [ i18n({ translations: { en: locales.en, fr: locales.fr, }, }), ], })两种定制方式都属于可选分支只改写个别消息展开内置语言后覆盖指定错误码例如法语的USER_NOT_FOUND改为Membre introuvable其余文案不变。新增自定义语言定义一个TranslationDictionary类型对象与内置语言合并进translations。各语言的错误码覆盖范围可以参考 fr.ts 这类内置语言文件它列出了该语言实际提供翻译的完整错误码集合例如USER_NOT_FOUND、INVALID_EMAIL、SESSION_EXPIRED、VALIDATION_ERROR等。配置语言检测策略detection选项接收按优先级排列的检测策略数组第一个能拿到有效语言的策略生效。可用策略有四个策略行为header读取Accept-LanguageHTTP 头默认策略cookie从 cookie 读取语言代码cookie 名由localeCookie配置默认localesession从已登录用户的存储字段读取语言偏好字段名由userLocaleField配置默认localecallback调用getLocale(ctx)自定义函数返回语言代码或nulli18n({ translations: { /* ... */ }, detection: [cookie, header, session], // Priority order })几个值得注意的检测细节均来自插件文档与测试header策略会解析 quality value。请求头Accept-Language: fr-CA, fr;q0.9, en;q0.8会先尝试fr-CA映射到基础语言fr再依次尝试fr、en只有出现在translations中的语言才会被采用命不中则继续尝试下一个。完整区域代码会取基础语言fr-CA会被解析为fr。session 策略需要先给 user 表加字段并在插件里指明字段名export const auth betterAuth({ user: { additionalFields: { locale: { type: string, required: false }, }, }, plugins: [ i18n({ translations: { /* ... */ }, detection: [session, header], userLocaleField: locale, // Default is locale }), ], })callback 策略接收完整端点上下文返回值必须是translations里存在的语言代码否则视为未命中i18n({ translations: { /* ... */ }, detection: [callback, header], getLocale: (ctx) { // Custom logic: use query param, custom header, etc. if (!ctx.request) return null; const url new URL(ctx.request.url); return url.searchParams.get(lang); }, })注意ctx.request在非 HTTP 调用时可能是undefined自定义函数里要做空值判断。验证错误消息确实被翻译插件文档给出的错误响应格式是验证的核心判据。当发生错误且存在对应翻译时响应体同时包含code、翻译后的message和原始英文originalMessage以下为文档示例{ code: INVALID_EMAIL_OR_PASSWORD, message: Email ou mot de passe invalide, originalMessage: Invalid email or password }项目测试 i18n.test.ts 展示了真实的触发与断言方式调用auth.api.signInEmail传入不存在的邮箱和错误密码并在请求头带上Accept-Language: fr然后检查返回的 JSONbody.code为INVALID_EMAIL_OR_PASSWORDbody.message为Email ou mot de passe invalidebody.originalMessage为Invalid email or password。同样的用例在测试里还覆盖了两种边界Accept-Language: de时message变为Ungültige E-Mail oder Passwort带 quality value 的es;q0.9, fr;q0.8, en;q0.7西班牙语不在翻译字典中会落到法语翻译。你可以照这个方式对自己部署的 auth 实例发一次失败登录请求观察响应中的message与originalMessage是否符合预期。回退行为与限制配置完成后以下回退规则决定拿不到翻译时发生什么来自 i18n 插件文档的 Fallback Behavior 一节检测到的语言里缺少某个错误码的翻译时保留该错误码的内置英文消息检测到的语言不在translations字典中时回退到defaultLocale默认en可用同名选项修改所有策略都没检测到语言时同样回退到defaultLocale非错误响应永远不会被这个插件修改——它只拦截 API 错误并重写消息。翻译依赖错误码可用的完整错误码清单见 Error Codes Reference。另外注意translations为空时插件会直接抛错translations object is empty. At least one locale must be provided.至少要提供一个语言。【免费下载链接】better-authThe most comprehensive authentication framework项目地址: https://gitcode.com/GitHub_Trending/be/better-auth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表