You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React项目中结合Phrase App实现i18next翻译资源动态刷新

实现方案

动态拉取后端翻译并实时生效

首先修改i18next初始化配置,移除固定的本地resources配置(也可以保留作为兜底):

i18n.use(initReactI18next).init({
    lng: 'fr',
    fallbackLng: 'fr',
    interpolation: {
        escapeValue: false
    }
})

然后封装翻译刷新方法,调用i18next内置API直接替换运行时的翻译资源:

import axios from 'axios'
import i18n from 'i18next'

// lang参数为要刷新的语言,默认取当前正在使用的语言
const refreshTranslations = async (lang = i18n.language) => {
  try {
    // 请求后端接口获取对应语言的最新翻译JSON
    const res = await axios.get(`/your/translation/api?lang=${lang}`)
    const latestTranslations = res.data
    // 全量替换当前语言的translation命名空间资源
    // 后两个参数分别代表覆盖已有资源、深度合并嵌套翻译,按需调整
    i18n.addResourceBundle(lang, 'translation', latestTranslations, true, true)
    // 触发重渲染,所有页面翻译会自动更新为最新版本
    i18n.changeLanguage(lang)
  } catch (e) {
    console.error('翻译资源更新失败', e)
  }
}

最后给触发按钮绑定方法即可:

function UpdateTranslationBtn() {
  return <button onClick={() => refreshTranslations()}>更新最新翻译</button>
}

无需对接后端直接对接Phrase App的方案

是可以实现的,操作逻辑如下:

  • 进入Phrase App后台开启「Translation Delivery」功能,配置要发布的翻译分支、开放的语言列表,将访问权限设置为公开
  • 配置完成后可以拿到每个语言翻译资源的专属CDN直链,前端直接请求该直链即可获取最新翻译,不需要经过自有后端中转
  • 在Phrase后台配置你前端站点的域名到CORS白名单,即可解决跨域问题

你之前用到的Phrase React库会弹登录框,是因为该库是面向内部翻译人员的在线校对编辑版本,生产环境使用上述CDN直拉的方式不会出现登录校验逻辑,符合需求。

内容的提问来源于stack exchange,提问作者Mael Geoffroy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:54:03