This is because you loop through all but the current locales. With the code below you first create an array of all the locales you want the language switch to include, and then loop through it. With this technique you can define the order of the output manually or exclude locales from the loop. {# Configure and loop through selected site locales #} {% set locales = { 'en': 'English', 'hu': 'Hungarian' } %} {% for localeId, localeName in locales %} {# Check if localeId equals the requested page locale #} {% if localeId == craft.locale %} {% set current = true %} {% endif %} {# Is this an entry page? #} {% if entry is defined %} {# Find the current entry in the other locale #} {% set localeEntry = craft.entries.id(entry.id).locale(localeId).first() %} {# Make sure that the entry's actually localized to this locale #} {% if localeEntry.locale == localeId %} {# Output a link to it #} <a href="{{ localeEntry.getUrl() }}" class="nav-link{{ current ? ' current' }}">{{ localeName }}</a> {% else %} {# Output a link to the hompage #} <a href="{{ craft.config.siteUrl[localeId] }}" class="nav-link{{ current ? ' current' }}">{{ localeName }}</a> {% endif %} {# Not an entry page #} {% else %} {# Output the same path with the locale's base URL (`siteUrl`) #} <a href="{{ craft.config.siteUrl[localeId] ~ craft.request.getPath() }}" class="nav-link{{ current ? ' current' }}">{{ localeName }}</a> {% endif %} {% endfor %}