i18next不能直接运行时调用Google Cloud Translation API,应通过Node脚本预生成翻译文件(如en.json→zh.json),再由i18next加载;需用服务账号认证、正确解析嵌套key、过滤占位符,并配合CDN缓存与fallback机制确保性能与可靠性。

怎么把 i18next 和 Google Cloud Translation API 连起来用
直接连 Google 的翻译 API 做运行时翻译不现实——它不支持批量请求、有严格配额、返回格式和 i18next 的 resources 结构不匹配,而且每次渲染都调 API 会卡死页面。真正可行的路径是:用 API 预生成翻译文件,再交给 i18next 加载。
关键动作是写一个脚本,读取源语言 JSON(比如 en.json),调用 translateText 批量翻译成目标语言,存为 zh.json、ja.json 等,最后放进 public/locales/ 目录供前端加载。
- 必须用服务账号密钥 +
GOOGLE_APPLICATION_CREDENTIALS环境变量认证,不能用浏览器端密钥(会暴露) - Google API 返回的译文在
data.translations[].translatedText,不是顶层字段,容易漏解析 - 要手动处理嵌套 key:i18next 支持点号路径(
form.submit.label),但 Google 只认扁平字符串,得递归展开再合并 - 避免翻译占位符如
{{count}}或 HTML 标签,否则译文可能被破坏;建议先过滤或加白名单
为什么不能在 React 组件里实时调用 DeepL API 翻译文案
DeepL 的免费版限制每秒 1 次请求,且明确禁止在客户端直连(X-DeepL-Auth-Key 会暴露)。即使你绕过限制,在 useEffect 里对每个 t('button.save') 单独发起请求,结果是:首屏加载慢、并发触发 403、无法 fallback 到本地语言包。
正确做法是把 DeepL 当作构建时工具链一环:用 Node 脚本批量拉取翻译,生成静态 JSON 文件,和代码一起部署。这样既合规,又保证 SSR 和离线可用。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
- DeepL 的
glossary_id参数能保证术语一致性,但必须提前创建术语库并绑定到请求中 - 它的
split_sentences=0参数可禁用自动断句,适合翻译带换行或 Markdown 的长文本 - 响应里的
translations[0].text是最终译文,别错读成translations[0].detected_source_language
i18next 初始化时如何安全加载远程翻译资源而不阻塞渲染
别在 i18n.init() 的 backend.loadPath 里写死 URL,比如 /locales/{{lng}}/{{ns}}.json——这会让首次加载等网络,白屏时间变长。应该用 fallbackLng: 'en' + load: 'languageOnly',先加载本地 en.json 渲染界面,再异步拉取目标语言包。
-
backend.allowMultiLoading: true开启后,i18next 才会合并多个命名空间(common、form)的请求 - CDN 缓存
/locales/zh/common.json要设Cache-Control: public, max-age=604800,避免重复拉取 - 如果后端返回 404(比如某语言缺
dashboard.json),i18next 默认静默失败;需监听missingKey事件做降级或上报
Vue I18n v9 在 Composition API 里怎么避免翻译 key 错拼导致 silent fallback
useI18n().t('user.profile.name') 写成 'user.profil.name' 不会报错,只会显示空字符串或 key 本身——因为 Vue I18n 默认 missingWarn: false。开发阶段必须打开警告,并配合 TypeScript 类型守卫。
- 在
createI18n配置里设missingWarn: true(仅开发环境),让控制台输出缺失 key - 用
defineI18nSchema声明 JSON 结构,TypeScript 就能校验t('menu.home')是否真实存在 - VS Code 插件
i18n-ally可高亮未使用/未定义的 key,但它依赖locales/**.json文件结构,目录名不能随意改
翻译服务集成最难的不是调接口,而是让机器译文对齐人工校对流程。所有自动生成的 zh.json 必须进翻译管理平台(如 Lokalise、Crowdin)走 review 流程,否则上线后才发现 “submit” 被翻成“提交按钮”而不是“提交”,就得发 hotfix。


















