Skip to content

Instantly share code, notes, and snippets.

@piotrpog
Last active December 10, 2023 16:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save piotrpog/365b706b8fc193daf7577e7613b2b149 to your computer and use it in GitHub Desktop.
Save piotrpog/365b706b8fc193daf7577e7613b2b149 to your computer and use it in GitHub Desktop.
{# v3 #}
{# http://craftsnippets.com/articles/universal-language-switcher-for-craft-cms #}
{# logic #}
{% set currentElement = craft.app.urlManager.matchedElement %}
{% set sites = craft.app.sites.getGroupById(currentSite.groupId).getSites() %}
{% set switcherLinks = [] %}
{% for site in sites|filter(x => x.baseUrl is not empty) %}
{% set title = craft.app.i18n.getLocaleById(site.language).displayName %}
{% set url = site.getBaseUrl() %}
{% if currentElement %}
{% set otherLocaleElement = craft.app.elements.getElementById(currentElement.id, currentElement.className(), site.id) %}
{% if otherLocaleElement and otherLocaleElement.enabledForSite %}
{% set url = otherLocaleElement.url %}
{% endif %}
{% endif %}
{% set switcherLinks = switcherLinks|merge([{
url: url,
title: title,
countryCode: site.language|split('-')|last,
current: site.id == currentSite.id ? true : false,
language: site.language,
}]) %}
{% endfor %}
{# outputting html #}
{% if switcherLinks|length > 1 %}
{% tag 'nav' with {
'aria-label': 'Switch language'|t,
'aria-role': 'navigation',
} %}
{% tag 'ul' %}
{% for switcherLink in switcherLinks %}
{% tag 'li' with {
'class': switcherLink.current ? 'is-active',
} %}
{% tag 'a' with {
'href': switcherLink.url,
'hreflang': switcherLink.language,
'lang': switcherLink.language,
} %}
{% tag 'span' %}
{{ switcherLink.title }}
{% endtag %}
{% tag 'span' with {
'class': 'flag-icon flag-icon-' ~ switcherLink.countryCode,
} %}
{% endtag %}
{% endtag %}
{% endtag %}
{% endfor %}
{% endtag %}
{% endtag %}
{% endif %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment