如何在ApostropheCMS的Nunjucks文件中通过apostrophe-workflow获取当前区域设置
解决ApostropheCMS workflow语言下拉菜单的当前语言显示问题
别担心,刚开始接触ApostropheCMS和workflow模块的时候有疑问太正常啦!我来帮你搞定这个语言下拉菜单的问题~
你需要的当前语言信息其实可以直接从apos.workflow提供的变量里获取,修改后的代码如下:
<ul class="navbar-nav nav-flex-icons"> <a class="nav-link dropdown-item" href="#" id="lang-dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="flag-icon flag-icon-{{ apos.workflow.currentLocalization.workflowLocale.split('-')[1] | lower }}"></span> {{ apos.workflow.currentLocalization.label }} </a> <div class="dropdown-menu" aria-labelledby="lang-dropdown"> {% for localization in apos.workflow.localizations() %} {% if localization.workflowLocale != apos.workflow.currentLocalization.workflowLocale %} <a class="dropdown-item" href="{{ localization._url | build({ workflowLocale: localization.workflowLocale }) }}"> <span class="flag-icon flag-icon-{{localization.workflowLocale.split('-')[1] | lower}}"></span> {{ localization.label }} </a> {% endif %} {% endfor %} </div> </ul>
关键说明:
当前语言按钮显示:
apos.workflow.currentLocalization是workflow模块在模板中自动提供的变量,它包含当前页面的本地化完整信息,比如label(友好的语言名称,比如"English"或"Français")和workflowLocale(语言代码,比如en-US)。- 用它来渲染按钮上的国旗和语言名称,和下拉选项的样式保持一致,体验更统一。
排除当前语言的下拉项:
- 在循环判断里,直接对比每个本地化项的
workflowLocale和当前的apos.workflow.currentLocalization.workflowLocale,这样就能确保下拉列表里只显示非当前语言的选项。
- 在循环判断里,直接对比每个本地化项的
如果你的项目里currentLocalization有特殊情况无法使用,也可以用apos.i18n.locale来获取当前语言代码(比如en-US),不过前者更贴合workflow的本地化数据结构,推荐优先使用。
内容的提问来源于stack exchange,提问作者captain hak
相关产品推荐
相关产品推荐

