mkdocs-material/docs/setup/changing-the-language.md

209 lines
6.8 KiB
Markdown
Raw Permalink Normal View History

2020-07-17 01:15:59 +03:00
# Changing the language
Material for MkDocs supports internationalization (i18n) and provides
2023-05-02 12:30:22 +03:00
translations for template variables and labels in 60+ languages. Additionally,
2021-10-10 18:39:53 +03:00
the site search can be configured to use a language-specific stemmer, if
available.
2020-07-17 01:15:59 +03:00
## Configuration
### Site language
2023-09-14 20:09:18 +03:00
<!-- md:version 1.12.0 -->
<!-- md:default `en` -->
2020-07-17 01:15:59 +03:00
2021-10-10 18:39:53 +03:00
You can set the site language in `mkdocs.yml` with:
2020-07-17 01:15:59 +03:00
``` yaml
theme:
2022-04-02 15:04:30 +03:00
language: en # (1)!
2020-07-17 01:15:59 +03:00
```
2022-04-02 15:04:30 +03:00
1. 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.
2020-07-17 01:15:59 +03:00
The following languages are supported:
<!-- hooks/translations.py -->
2020-07-17 01:15:59 +03:00
2021-10-10 18:39:53 +03:00
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].
!!! tip "Translations missing? Help us out, it takes only 5 minutes"
Material for MkDocs relies on outside contributions for adding and updating
2023-09-21 15:53:33 +03:00
translations for the more than 60 languages it supports. If your language
shows that some translations are missing, click on the link to add them. If
your language is not in the list, click here to [add a new language].
2022-04-02 15:04:30 +03:00
[single language per document]: https://www.w3.org/International/questions/qa-html-language-declarations.en#attributes
[language selector]: #site-language-selector
[Unicode-aware slug function]: extensions/python-markdown.md#+toc.slugify
2023-01-29 22:41:55 +03:00
[add a new language]: https://github.com/squidfunk/mkdocs-material/issues/new?template=04-add-a-translation.yml&title=Add+translations+for+...
2020-07-17 01:15:59 +03:00
### Site language selector
2020-07-17 01:15:59 +03:00
2023-09-14 20:09:18 +03:00
<!-- md:version 7.0.0 -->
<!-- md:default none -->
2021-10-10 18:39:53 +03:00
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`.
``` yaml
extra:
alternate:
- name: English
2021-12-11 16:30:07 +03:00
link: /en/ # (1)!
lang: en
- name: Deutsch
2021-10-10 18:39:53 +03:00
link: /de/
lang: de
```
2021-10-10 18:39:53 +03:00
1. 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_url`][site_url] as
set in `mkdocs.yml` is prepended to the link.
2022-06-05 15:43:37 +03:00
The following properties are available for each alternate language:
2023-09-14 20:09:18 +03:00
<!-- md:option alternate.name -->
2023-09-14 20:09:18 +03:00
: <!-- md:default none --> <!-- md:flag required -->
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.
2023-09-14 20:09:18 +03:00
<!-- md:option alternate.link -->
2021-10-10 18:39:53 +03:00
2023-09-14 20:09:18 +03:00
: <!-- md:default none --> <!-- md:flag required -->
This property must be set to an absolute link, which might also point to
2021-10-10 18:39:53 +03:00
another domain or subdomain not necessarily generated with MkDocs.
2023-09-14 20:09:18 +03:00
<!-- md:option alternate.lang -->
2021-10-10 18:39:53 +03:00
2023-09-14 20:09:18 +03:00
: <!-- md:default none --> <!-- md:flag required -->
This property must contain an [ISO 639-1 language code] and is used for
2021-10-10 18:39:53 +03:00
the `hreflang` attribute of the link, improving discoverability via search
engines.
2020-07-17 01:15:59 +03:00
2021-10-10 20:22:13 +03:00
[![Language selector preview]][Language selector preview]
2021-10-10 18:39:53 +03:00
[site_url]: https://www.mkdocs.org/user-guide/configuration/#site_url
[ISO 639-1 language code]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
2021-10-10 20:22:13 +03:00
[Language selector preview]: ../assets/screenshots/language-selection.png
2024-02-24 08:46:13 +03:00
#### Stay on page
2023-12-08 12:29:59 +03:00
<!-- md:sponsors -->
<!-- md:version insiders-4.47.0 -->
<!-- md:flag experimental -->
[Insiders] improves the user experience 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:
=== "Insiders"
```
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/
```
=== "Material for MkDocs"
```
docs.example.com/en/ -> docs.example.com/de/
docs.example.com/en/foo/ -> docs.example.com/de/
docs.example.com/en/bar/ -> docs.example.com/de/
```
No configuration is necessary. We're working hard on improving multi-language
support in 2024, including making switching between languages even more seamless
in the future.
[Insiders]: ../insiders/index.md
### Directionality
2023-09-14 20:09:18 +03:00
<!-- md:version 2.5.0 -->
<!-- md:default computed -->
2020-07-17 01:15:59 +03:00
While many languages are read `ltr` (left-to-right), Material for MkDocs also
2021-10-10 18:39:53 +03:00
supports `rtl` (right-to-left) directionality which is deduced from the
2020-07-17 01:15:59 +03:00
selected language, but can also be set with:
``` yaml
theme:
direction: ltr
```
2020-12-21 19:38:58 +03:00
Click on a tile to change the directionality:
2020-07-17 01:15:59 +03:00
<div class="mdx-switch">
<button data-md-dir="ltr"><code>ltr</code></button>
<button data-md-dir="rtl"><code>rtl</code></button>
</div>
2020-07-17 01:15:59 +03:00
<script>
var buttons = document.querySelectorAll("button[data-md-dir]")
buttons.forEach(function(button) {
button.addEventListener("click", function() {
var attr = this.getAttribute("data-md-dir")
document.body.dir = attr
var name = document.querySelector("#__code_2 code span.l")
name.textContent = attr
2020-07-17 01:15:59 +03:00
})
})
</script>
## Customization
### Custom translations
2020-07-21 17:01:22 +03:00
If you want to customize some of the translations for a language, just follow
2021-10-10 18:39:53 +03:00
the guide on [theme extension] and create a new partial in the `overrides`
2021-10-10 20:22:13 +03:00
folder. Then, import the [translations] of the language as a fallback and only
2021-10-10 18:39:53 +03:00
adjust the ones you want to override:
2022-09-11 20:25:40 +03:00
=== ":octicons-file-code-16: `overrides/partials/languages/custom.html`"
2021-10-10 18:39:53 +03:00
``` html
2021-10-10 20:22:13 +03:00
<!-- Import translations for language and fallback -->
{% import "partials/languages/de.html" as language %}
2021-12-11 16:30:07 +03:00
{% import "partials/languages/en.html" as fallback %} <!-- (1)! -->
2021-10-10 20:22:13 +03:00
<!-- Define custom translations -->
2021-10-10 18:39:53 +03:00
{% macro override(key) %}{{ {
2021-12-11 16:30:07 +03:00
"source.file.date.created": "Erstellt am", <!-- (2)! -->
2021-10-27 23:24:09 +03:00
"source.file.date.updated": "Aktualisiert am"
2021-10-10 18:39:53 +03:00
}[key] }}{% endmacro %}
2021-10-10 18:39:53 +03:00
<!-- Re-export translations -->
2021-10-10 20:22:13 +03:00
{% macro t(key) %}{{
2022-08-04 13:15:19 +03:00
override(key) or language.t(key) or fallback.t(key)
2021-10-10 20:22:13 +03:00
}}{% endmacro %}
2021-10-10 18:39:53 +03:00
```
2021-10-10 20:22:13 +03:00
1. Note that `en` must always be used as a fallback language, as it's the
default theme language.
2. Check the [list of available languages], pick the translation you want
2021-10-10 18:39:53 +03:00
to override for your language and add them here.
2022-09-11 20:25:40 +03:00
=== ":octicons-file-code-16: `mkdocs.yml`"
2021-10-10 18:39:53 +03:00
``` yaml
theme:
language: custom
```
2021-10-10 18:39:53 +03:00
[theme extension]: ../customization.md#extending-the-theme
2023-09-20 15:03:28 +03:00
[translations]: https://github.com/squidfunk/mkdocs-material/blob/master/src/templates/partials/languages/
[list of available languages]: https://github.com/squidfunk/mkdocs-material/blob/master/src/templates/partials/languages/