i18n字符串中间嵌入变量失败,寻求有效实现方案
解决i18n翻译文本中的变量替换问题
你之前的做法无效,是因为i18n库不会解析翻译文案里的框架模板语法(比如{{totalParticipation}}),需要用i18n方案本身提供的变量替换机制来实现,以下是主流i18n库的通用解决方式:
1. 修改翻译文案的占位符格式
不要在翻译文案中写框架模板语法,改用i18n库支持的占位符,比如{{count}}这类格式(不同库占位符语法可能略有差异,以你使用的库文档为准):
// 示例翻译文件(如en.json) { "counter.description": "This promotion is limited to {{count}} participants" }
2. 在调用翻译函数时传入变量
调用i18n的翻译函数(你代码里的__函数)时,第二个参数传入包含变量的对象,将占位符替换为实际值:
// 适配你的模板写法 {{ __("counter.description", { count: totalParticipation }) }}
如果是其他框架或i18n库,逻辑完全一致:
- React + react-i18next:
{t('counter.description', { count: totalParticipation })} - 原生JS场景:
i18next.t('counter.description', { count: totalParticipation })
核心逻辑是:翻译文案只负责定义带占位符的模板,变量传递和替换由i18n库完成,而非依赖框架的模板语法解析。
内容的提问来源于stack exchange,提问作者Jean Mary
相关产品推荐
相关产品推荐

