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

Kentico 13:如何解析本地化资源字符串中的宏

Kentico本地化资源字符串嵌入宏无法解析问题

我尝试在Kentico本地化模块的资源字符串中嵌入宏,但始终无法成功解析。已重新签名所有宏,也试过将哈希替换为@符号以跳过校验,测试代码如下:

var bodyText = MacroResolver.Resolve(ResHelper.GetString("SOS.SocialSharing.Email.Body"));
var test = ResHelper.LocalizeString("{$SOS.SocialSharing.Email.Body$}");
var test2 = MacroResolver.Resolve("{$SOS.SocialSharing.Email.Body$}");

但所有方法返回结果均未解析宏,输出仍为:

Hello,
please share this link {% DocumentContext.CurrentDocument.AbsoluteURL |(user)admin|(hash)myhash%} with your friends

注:资源字符串中的哈希由Kentico自动插入。


解决方案

  1. 检查宏安全配置

    • 进入系统后台系统 → 宏 → 签名与安全性,测试环境可临时启用「允许解析未签名宏」;生产环境需确保宏签名有效,或使用|(hash)@跳过校验
    • 确认当前用户(admin)拥有宏解析权限,宏中的(user)admin标记与当前操作用户匹配
  2. 使用带上下文的宏解析器
    本地化字符串本身不会自动解析宏,需先获取本地化内容,再结合当前文档上下文解析:

    // 获取本地化文本
    string localizedContent = ResHelper.GetString("SOS.SocialSharing.Email.Body");
    // 初始化带文档上下文的解析器
    MacroResolver resolver = MacroResolver.GetInstance();
    resolver.SetNamedSourceData("DocumentContext", DocumentContext.CurrentDocument);
    // 执行宏解析
    string finalContent = resolver.Resolve(localizedContent);
    
  3. 修正宏格式
    若要跳过哈希校验,需将宏中的哈希值替换为@,格式如下:

    {% DocumentContext.CurrentDocument.AbsoluteURL |(user)admin|(hash)@%}
    
  4. 注意上下文有效性
    确保DocumentContext.CurrentDocument在当前请求上下文中存在(比如在前台页面调用,后台无文档上下文的场景下该对象为空)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:52:39