如何让i18next强制从S3后端重新获取翻译资源?
如何重新触发i18next从S3拉取翻译资源?
我当前使用以下代码配置i18next,让应用启动时从S3服务器获取翻译资源:
import { default as i18n } from 'i18next' import ChainedBackend from 'i18next-chained-backend' import HttpApi from 'i18next-http-backend' import resourcesToBackend from 'i18next-resources-to-backend' import { initReactI18next } from 'react-i18next' i18n.use(initReactI18next).use(ChainedBackend).init({ backend: { backends: [HttpApi, resourcesToBackend(bundledResources)], backendOptions: [ { loadPath: (languages: string[], namespaces: string[]) => { const [lng] = languages const [ns] = namespaces return `${API_S3}locales/${lng}/${ns}.json` }, }, { /* options for local files */ }, ], }, })
请问是否可以定期或通过调用函数(例如再次运行i18n.init)重新触发该S3服务器的资源拉取操作?
可行方案
1. 使用i18n.reloadResources()方法
这是官方推荐的重新加载资源的方式,无需再次调用init。直接调用该方法即可触发从S3重新拉取翻译资源:
// 重新加载当前语言的所有命名空间 i18n.reloadResources() // 或指定特定语言与命名空间 i18n.reloadResources(['en', 'zh'], ['common', 'auth'])
调用后,i18next会重新执行ChainedBackend的加载流程:优先通过HttpApi从S3拉取资源,失败时 fallback 到本地资源。
2. 实现定期拉取
如果需要定时触发资源更新,可结合setInterval调用reloadResources:
// 每30分钟重新加载一次资源 setInterval(() => { i18n.reloadResources() }, 30 * 60 * 1000)
3. 避免再次调用i18n.init()
再次执行init会重置i18next实例状态,可能引发React组件的i18n上下文混乱等潜在问题,官方不推荐用这种方式重新加载资源。
内容的提问来源于stack exchange,提问作者lmasneri
相关产品推荐
相关产品推荐

