---
title: "Language selection menu"
manual: "Frontend Localization Guide"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3translate:language-menu@main"
source: "LanguageMenu/Index.rst"
rendered: "2026-09-24T13:22:06+00:00"
---

# Language selection menu {#language-menu}

To properly navigate a multilingual web site you probably want
to have a language selection menu somewhere. This menu should
show an entry for each possible, with variation of aspect
depending on translation availability:

-   Translation exists
-   Translation exists - currently selected
-   Missing translation
-   Missing translation - currently selected

This kind of menu can be made by either using a
[LanguageMenuProcessor](https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/DataProcessing/LanguageMenuProcessor.html#LanguageMenuProcessor) on a
[FLUIDTEMPLATE](https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/ContentObjects/Fluidtemplate/Index.html#cobj-fluidtemplate) or using the
[HMENU content object](https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/ContentObjects/Hmenu/Index.html#cobj-hmenu) with special type
[language](https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/DataProcessing/MenuProcessor/Language.html#hmenu-special-language).

## LanguageMenuProcessor example {#language-menu-tmenu}

The [Introduction Package](https://extensions.typo3.org/extension/introduction) comes with a text-based rendering of the
language menu, located in the footer:

![Text-based language menu](../Images/ManualScreenshots/Frontend/LanguageMenuText.png)

This is the corresponding TypoScript code, that sets up a
`LanguageMenuProcessor` on the page level:

**EXT:site_package/Configuration/Sets/Main/setup.typoscript**

```typoscript
page = PAGE
page {
  10.dataProcessing {
    40 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
    40 {
      languages = <insert language-id> or "auto"
      as = languagenavigation
    }
  }
}
```

The value for `languages` is a list of comma-separated language
IDs (for example: `0,1,2`) or `auto` to load from
[site configuration](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/SiteHandling/Index.html#sitehandling).

The menu is then passed as a hierarchical array to
[Fluid](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Fluid/Index.html#fluid) in the variable `{languagenavigation}`.
The Fluid template iterates through the array and creates the language links:

**EXT:site_package/Resources/Private/Templates/SomeTemplate.html**

```html
<f:if condition="{languagenavigation}">
    <ul id="language_menu" class="language-menu">
        <f:for each="{languagenavigation}" as="item">
            <li class="{f:if(condition: item.active, then: 'active')} {f:if(condition: item.available, else: 'text-muted')}">
                <f:if condition="{item.available}">
                    <f:then>
                        <a href="{item.link}" hreflang="{item.hreflang}" title="{item.title}">
                            <span>{item.navigationTitle}</span>
                        </a>
                    </f:then>
                    <f:else>
                        <span>{item.navigationTitle}</span>
                    </f:else>
                </f:if>
            </li>
        </f:for>
    </ul>
</f:if>
```
