Magnolia自定义内容应用及导航菜单未加载对应语言内容排查
问题分析与可能原因
你在Sites应用中配置了本地化,通过/locale/路径能正常显示翻译内容,但自定义内容应用和导航菜单栏始终默认显示英文,即便页面已配置翻译后的导航标题,结合你提供的代码,可能的原因如下:
1. 自定义内容未获取本地化版本
你的代码中使用cmsfn.contentByPath("/", "articles")和cmsfn.contentByPath("/alqasemi/articles")直接获取内容节点,但没有指定本地化上下文。默认情况下,这类方法会拉取站点的默认语言版本,而非当前请求对应的本地化版本。
需要修改内容获取逻辑,确保传入当前请求的本地化参数,比如:
[#assign articles = cmsfn.contentByPath("/", "articles", locale)]
(注:locale需为当前请求上下文的本地化对象,可通过Sites内置上下文变量获取)
2. 导航菜单本地化配置未生效
- 检查导航项的本地化绑定:确认每个导航条目是否关联了对应语言的页面版本,而非仅修改标题文本。部分Sites系统中,导航菜单需要单独配置本地化条目,不能直接复用默认语言的导航结构。
- 验证导航渲染逻辑:如果导航是自定义模板渲染的,需确保渲染时调用的是当前locale对应的导航标题字段,而非硬编码或默认语言字段。
3. 日期格式化未适配本地化规则
代码中${article.publish_date?string.MMMM}直接使用默认日期格式,未关联当前locale的日期本地化配置。不同语言的月份名称(如MMMM格式)依赖本地化格式化器,否则会显示默认英文的月份名称。
修改为本地化日期格式化:
${article.publish_date?string("MMMM", locale)}
4. I18n资源文件存在问题
虽然代码中使用了i18n.get()方法,但需确认:
- 对应语言的资源文件(如
messages_zh_CN.properties)是否存在且路径正确。 - 资源文件中的键名与代码完全匹配(注意大小写和拼写:比如代码里的
footer.viewAlqaswmiNews疑似拼写错误,可能实际资源文件中是footer.viewAlqasemiNews)。 - 当前请求的locale是否正确传递到
i18n对象中,确保它能加载对应语言的资源。
5. 自定义应用未继承站点本地化上下文
自定义内容应用可能没有继承主站点的本地化上下文,导致默认使用英文。需要检查:
- 自定义应用的请求处理逻辑是否正确获取并传递当前locale参数。
- 模板渲染时,是否将locale变量注入到Freemarker的上下文环境中。
内容的提问来源于stack exchange,提问作者Patriot
相关产品推荐
相关产品推荐

