Changing the language¶
Material for MkDocs supports internationalization (i18n) and provides translations for template variables and labels in 60+ languages. Additionally, the site search can be configured to use a language-specific stemmer, if available.
Configuration¶
Site language¶
1.12.0 en
You can set the site language in mkdocs.yml with:
-
HTML5 only allows to set a single language per document, which is why Material for MkDocs only supports setting a canonical language for the entire project, i.e. one per
mkdocs.yml.The easiest way to build a multi-language documentation is to create one project in a subfolder per language, and then use the language selector to interlink those projects.
The following languages are supported:
-
Afrikaans
af -
Albanian
sq -
Arabic
ar -
Armenian
hy -
Azerbaijani
az -
Bahasa Malaysia
ms -
Basque
eu -
Belarusian
be -
Bengali (Bangla)
bn -
Bulgarian
bg -
Burmese
my -
Catalan
ca -
Chinese (Simplified)
zh -
Chinese (Taiwanese)
zh-TW -
Chinese (Traditional)
zh-Hant -
Croatian
hr -
Czech
cs -
Danish
da -
Dutch
nl -
English
en -
Esperanto
eo -
Estonian
et -
Finnish
fi -
French
fr -
Galician
gl -
Georgian
ka -
German
de -
Greek
el -
Hebrew
he -
Hindi
hi -
Hungarian
hu -
Icelandic
is -
Indonesian
id -
Italian
it -
Japanese
ja -
Kannada
kn -
Korean
ko -
Kurdish (Soranรฎ)
ku-IQ -
Latvian
lv -
Lithuanian
lt -
Luxembourgish
lb -
Macedonian
mk -
Mongolian
mn -
Norwegian Bokmรฅl
nb -
Norwegian Nynorsk
nn -
Persian (Farsi)
fa -
Polish
pl -
Portuguese
pt -
Portuguese (Brasilian)
pt-BR -
Romanian
ro -
Russian
ru -
Sanskrit
sa -
Serbian
sr -
Serbo-Croatian
sh -
Sinhalese
si -
Slovak
sk -
Slovenian
sl -
Spanish
es -
Swedish
sv -
Tagalog
tl -
Tamil
ta -
Telugu
te -
Thai
th -
Turkish
tr -
Ukrainian
uk -
Urdu
ur -
Uzbek
uz -
Vietnamese
vi -
Welsh
cy
Note that some languages will produce unreadable anchor links due to the way the default slug function works. Consider using a Unicode-aware slug function.
Site language selector¶
If your documentation is available in multiple languages, a language selector pointing to those languages can be added to the header. Alternate languages can be defined via mkdocs.yml.
- Note that this must be an absolute link. If it includes a domain part, it's used as defined. Otherwise the domain part of the
site_urlas set inmkdocs.ymlis prepended to the link.
The following properties are available for each alternate language:
name-
This value of this property is used inside the language selector as the name of the language and must be set to a non-empty string.
link-
This property must be set to an absolute link, which might also point to another domain or subdomain not necessarily generated with MkDocs.
lang-
This property must contain an ISO 639-1 language code and is used for the
hreflangattribute of the link, improving discoverability via search engines.
Stay on page¶
When switching between languages, e.g., if language en and de contain a page with the same path name, the user will stay on the current page:
docs.example.com/en/ -> docs.example.com/de/
docs.example.com/en/foo/ -> docs.example.com/de/foo/
docs.example.com/en/bar/ -> docs.example.com/de/bar/
No configuration is necessary.
Directionality¶
While many languages are read ltr (left-to-right), Material for MkDocs also supports rtl (right-to-left) directionality which is deduced from the selected language, but can also be set with:
Click on a tile to change the directionality:
Customization¶
Custom translations¶
If you want to customize some of the translations for a language, just follow the guide on theme extension and create a new partial in the overrides folder. Then, import the translations of the language as a fallback and only adjust the ones you want to override:
<!-- Import translations for language and fallback -->
{% import "partials/languages/de.html" as language %}
{% import "partials/languages/en.html" as fallback %} <!-- (1)! -->
<!-- Define custom translations -->
{% macro override(key) %}{{ {
"source.file.date.created": "Erstellt am", <!-- (2)! -->
"source.file.date.updated": "Aktualisiert am"
}[key] }}{% endmacro %}
<!-- Re-export translations -->
{% macro t(key) %}{{
override(key) or language.t(key) or fallback.t(key)
}}{% endmacro %}
-
Note that
enmust always be used as a fallback language, as it's the default theme language. -
Check the list of available languages, pick the translation you want to override for your language and add them here.
