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自动插入。
解决方案
检查宏安全配置
- 进入系统后台系统 → 宏 → 签名与安全性,测试环境可临时启用「允许解析未签名宏」;生产环境需确保宏签名有效,或使用
|(hash)@跳过校验 - 确认当前用户(admin)拥有宏解析权限,宏中的
(user)admin标记与当前操作用户匹配
- 进入系统后台系统 → 宏 → 签名与安全性,测试环境可临时启用「允许解析未签名宏」;生产环境需确保宏签名有效,或使用
使用带上下文的宏解析器
本地化字符串本身不会自动解析宏,需先获取本地化内容,再结合当前文档上下文解析:// 获取本地化文本 string localizedContent = ResHelper.GetString("SOS.SocialSharing.Email.Body"); // 初始化带文档上下文的解析器 MacroResolver resolver = MacroResolver.GetInstance(); resolver.SetNamedSourceData("DocumentContext", DocumentContext.CurrentDocument); // 执行宏解析 string finalContent = resolver.Resolve(localizedContent);修正宏格式
若要跳过哈希校验,需将宏中的哈希值替换为@,格式如下:{% DocumentContext.CurrentDocument.AbsoluteURL |(user)admin|(hash)@%}注意上下文有效性
确保DocumentContext.CurrentDocument在当前请求上下文中存在(比如在前台页面调用,后台无文档上下文的场景下该对象为空)
内容的提问来源于stack exchange,提问作者rory
相关产品推荐
相关产品推荐

