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

如何在Mailgun的Handlebars实现中无需额外助手进行if字符串比较

基于Mailgun Handlebars实现多语言模板(字符串参数版)

由于Mailgun不支持自定义Handlebars助手,我们可以完全依靠其内置的lookup、hash和or助手实现需求,无需拆分布尔参数,同时保证缺失/不支持语言时默认显示英文。

方案1:单文本快速实现

这是最简洁的写法,直接通过内置助手完成语言匹配与兜底:

{{or (lookup (hash
  sv="Hej"
  de="Hallo"
  fr="Bonjour"
  es="Hola"
) language) "Hello"}}
  • 逻辑说明:
    1. hash 创建一个键为语言代码、值为对应文本的映射对象
    2. lookup 根据传入的language字符串参数,从映射对象中取出对应文本
    3. or 助手优先返回前面的有效值;若language缺失、或不在映射列表中(返回undefined),则自动使用后面的英文默认文本

方案2:多文本/复杂内容复用实现

如果模板中有多处多语言内容,可将语言映射封装为可复用的inline模板,避免重复代码:

{{#*inline "i18nBundle"}}
{{or (lookup (hash
  sv=(hash
    greeting="Hej"
    welcomeMsg="Välkommen till vår tjänst"
    ctaButton="Klicka här för att fortsätta"
  )
  de=(hash
    greeting="Hallo"
    welcomeMsg="Willkommen bei unserem Service"
    ctaButton="Klicken Sie hier, um fortzufahren"
  )
) language) (hash
  greeting="Hello"
  welcomeMsg="Welcome to our service"
  ctaButton="Click here to continue"
)}}
{{/inline}}

<!-- 模板中调用示例 -->
<h1>{{lookup (> i18nBundle) "greeting"}}</h1>
<p>{{lookup (> i18nBundle) "welcomeMsg"}}</p>
<a href="/signup">{{lookup (> i18nBundle) "ctaButton"}}</a>
  • 逻辑说明:
    1. 定义i18nBundle inline模板,包含各语言的完整文本集合,同时预设英文默认集合
    2. 调用i18nBundle后,会根据language参数返回对应语言的文本对象;若语言不支持,直接返回英文对象
    3. 用lookup从返回的对象中取出具体字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:32:04