| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Contexts and engravers
Nous avons évoqué rapidement les contextes et graveurs dans les chapitres précédents ; examinons en détail ces concepts essentiels à la maîtrise de LilyPond.
| 3.3.1 Tout savoir sur les contextes | ||
| 3.3.2 Création d’un contexte | ||
| 3.3.3 Tout savoir sur les graveurs | ||
| 3.3.4 Modification des propriétés d’un contexte | ||
| 3.3.5 Ajout et suppression de graveurs |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Contexts explained
Imprimer de la musique impose d’ajouter un certain nombre d’éléments de notation. Par exemple, voici un fragment de partition, précédé du code qui l’engendre :
\relative { cis''4 cis2. | a4 a2. | }
Si le code est assez austère, dans la partition ont été ajoutés un chiffre de mesure, des barres de mesure, des altérations et une clef. Pour une bonne raison : LilyPond interprète le code. Il le compulse dans l’ordre chronologique, de même qu’on lit une partition de gauche à droite ; et pendant ce traitement, le logiciel garde en mémoire les limites des mesures, ou encore quelles hauteurs de note demandent des altérations accidentelles. Ces informations se présentent à plusieurs niveaux : ainsi, une altération n’a d’effet que sur une seule portée, tandis qu’une barre de mesure doit être synchronisée sur toute l’étendue verticale de la partition.
LilyPond regroupe ces règles et ces fragments d’information dans des
Contextes. Certains contextes sont les voix (contexte
Voice), les portées (contexte Staff), ou la partition dans
son ensemble (contexte Score). Ils sont ordonnés
hiérarchiquement : ainsi un contexte Staff peut contenir
plusieurs contextes Voice, et un contexte Score peut
contenir plusieurs contextes Staff.
Chaque contexte est chargé de faire appliquer certaines règles de
gravure, de créer certains objets, et de prendre en compte les
propriétés qui leur sont associées. Ainsi, le contexte Voice
peut faire intervenir une altération accidentelle, puis le contexte
Staff devra déterminer s’il faudra imprimer ou non cette dernière
dans la suite de la mesure.
Les barres de mesure, quant à elles, sont alignées verticalement grâce
au contexte Score par défaut. En revanche, dans une musique
polymétrique, par exemple mêlant une portée à 3/4 et une autre à 4/4,
les barres de mesures n’ont plus à être alignées : il faut alors
modifier les comportement par défaut des contextes Score et
Staff.
Dans une partition très simple, les contextes sont créés implicitement et peuvent être ignorés. Mais lorsqu’il s’agit de morceaux plus amples – entendons par là tout ce qui s’écrit sur plus d’une portée – il faut les créer explicitement pour être sûr d’obtenir toutes les portées nécessaires, et dans le bon ordre. Enfin, pour des morceaux impliquant une notation spéciale, modifier les contextes ou en créer de nouveaux devient extrêmement utile.
En plus des contextes Score, Staff et Voice sont
disponibles d’autres contextes intermédiaires entre les niveaux
partition et portée, chargés de gérer certains regroupement, tels que
PianoStaff ou ChoirStaff. Vous disposez aussi d’autres
contextes de portée ou de voix alternatifs, ainsi que des contextes
spécifiques pour les paroles, les percussions, les diagrammes pour
instruments frettés, la basse chiffrée, etc.
Le nom de chacun des contextes est formé d’un ou plusieurs mots aux
initiales en capitale et directement accolés les uns aux autres sans
ponctuation, comme par exemple GregorianTranscriptionStaff.
Manuel de notation : (notation)Tout savoir sur les contextes section ‘Tout savoir sur les contextes’ dans Manuel de notation.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Creating contexts
Il en va des contextes comme de toute hiérarchie : il faut un sommet –
le contexte Score en l’occurrence. La commande \score est
chargée de le créer, mais pour des partitions simples, il le sera
automatiquement. Le bloc \score contient donc une expression
musicale unique ainsi que, éventuellement, la définition des supports à
produire – \layout pour du visuel, \midi pour de
l’acoustique, ou bien les deux.
Lorsqu’une partition ne comporte qu’une voix et une seule portée, vous
pouvez laisser LilyPond créer automatiquement les contextes Voice
et Staff ; mais leur présence explicite devient indispensable dès
que la situation se complique. Le moyen le plus simple est d’utiliser
la commande \new. Elle doit intervenir avant une expression
musicale, ainsi :
\new type expression-musicale |
où type correspond au nom du contexte (tels Staff ou
Voice). Cette commande crée un nouveau contexte, puis
interprète l’expression-musicale contenue dans ledit
contexte.
Note : La commande \new Score ne devrait jamais servir en
début de partition, puisque le contexte premier que constitue
Score est créé automatiquement par l’interprétation de
l’expression-musicale contenue dans le bloc score. Les
adaptations affectant les propriétés des différents contextes et qui
s’appliqueront à l’ensemble de la partition trouvent leur place au sein
d’un bloc \layout, en suivant les préceptes énoncés au
chapitre Modification des propriétés d’un contexte.
Nous avons déjà vu au cours des chapitres précédents de nombreux
exemples où des contextes Staff ou Voice étaient créés au
besoin. Dans un but didactique, voici maintenant une application
complète et abondamment commentée :
\score { % start of single compound music expression << % start of simultaneous staves section \time 2/4 \new Staff { % create RH staff \key g \minor \clef "treble" \new Voice { % create voice for RH notes \relative { % start of RH notes d''4 ees16 c8. | d4 ees16 c8. | } % end of RH notes } % end of RH voice } % end of RH staff \new Staff << % create LH staff; needs two simultaneous voices \key g \minor \clef "bass" \new Voice { % create LH voice one \voiceOne \relative { % start of LH voice one notes g8 <bes d> ees, <g c> | g8 <bes d> ees, <g c> | } % end of LH voice one notes } % end of LH voice one \new Voice { % create LH voice two \voiceTwo \relative { % start of LH voice two notes g4 ees | g4 ees | } % end of LH voice two notes } % end of LH voice two >> % end of LH staff >> % end of simultaneous staves section } % end of single compound music expression
Notez que toute déclaration qui ouvre un bloc par une accolade,
{, ou un double chevron gauche, <<, est indentée de deux
espaces supplémentaires, et de deux autres pour sa marque de fermeture.
Bien que ceci ne soit pas obligatoire, nous vous invitons à adopter
cette pratique qui vous évitera nombre d’erreurs « accolades non
appariées ». La structure de la musique apparaît ainsi au premier coup
d’œil, et les défauts de parité sont plus facilement repérables. Vous
remarquerez que la portée MG est créée à l’aide d’un double chevron
gauche – nécessaire pour gérer ses deux voix – alors que la portée MD
ne contient qu’une seule expression musicale – il n’y a qu’une voix –
bornée par des accolades simples.
La commande \new peut aussi permettre de nommer le contexte créé,
et ainsi le distinguer des autres contextes déjà existants :
\new type = "UnNom" expression-musicale |
Vous noterez la distinction entre le nom du type de contexte,
Staff, Voice, etc. et le nom – une simple suite de
lettres au bon gré de l’utilisateur – permettant d’identifier une
instance particulière du type en question. Vous pouvez utiliser des
chiffres et espaces, à la stricte condition d’englober le tout dans des
guillemets ; l’identificateur suivant est tout à fait valide :
\new Staff = "MaPortee 1" expression-musicale.
Comme nous l’avons déjà vu dans le chapitre consacré aux paroles
(Voix et paroles), cet identifiant permettra ensuite de se
référer à ce contexte particulier.
Manuel de notation : (notation)Création et référencement d’un contexte section ‘Création et référencement d'un contexte’ dans Manuel de notation.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Engravers explained
Tout point qui compose une partition générée par LilyPond est produit par un graveur (engraver en anglais). Ainsi, il y en a un qui imprime les portées, un autre les têtes de note, un autre les hampes, un autre encore pour les ligatures, etc. LilyPond dispose de plus de 120 graveurs ! La plupart des partitions ne requièrent de s’intéresser qu’à quelques-uns seulement, et pour des partitions simples, vous n’aurez même pas à vous en préoccuper.
Les graveurs résident et opèrent au sein des contextes.
Les graveurs tels que le Metronome_mark_engraver, dont les effets
s’appliquent à la partition dans son intégralité, opèrent au sein du
contexte de plus haut niveau – le contexte Score.
Les graveurs Clef_engraver et Key_engraver seront logés
dans chacun des contextes Staff ; deux portées peuvent
requérir des clefs et des armures différentes.
Les graveurs Note_heads_engraver et Stem_engraver résident
dans chacun des contextes Voice, contexte du plus bas niveau.
Chaque graveur confectionne les objets spécifiquement associés à sa fonction et traite les propriétés attachées à cette fonction. Ces propriétés, tout comme celles relatives aux contextes, peuvent être modifiées afin d’influencer le comportement du graveur et par voie de conséquence le rendu des éléments dont il a la charge.
Les graveurs ont tous un nom composé, formé des différents mots
décrivant leur fonction. Seule l’initiale du premier mot est en
majuscule, et les mots qui le composent sont joints par un caractère
souligné. Ainsi, le Staff_symbol_engraver est chargé de créer
les lignes de la portée, et le Clef_engraver détermine la hauteur
de référence de la portée en dessinant le symbole de la clef.
Voici quelques-uns des graveurs les plus courants, ainsi que leur fonction. Vous noterez qu’il est facile d’en connaître la fonction à partir du nom, et vice versa.
| Graveur | Fonction |
|---|---|
| Accidental_engraver | Crée les altérations, y compris de précaution, accidentelles ou suggérées |
| Beam_engraver | Grave les ligatures (beams) |
| Clef_engraver | Grave les clefs |
| Completion_heads_engraver | Divise les notes qui dépassent de la mesure |
| Dynamic_engraver | Crée les soufflets et textes de nuance |
| Forbid_line_break_engraver | Empêche un saut de ligne si un élément musical est toujours actif |
| Key_engraver | Crée l’armure |
| Metronome_mark_engraver | Grave les indications métronomiques |
| Note_heads_engraver | Grave les têtes de note |
| Rest_engraver | Grave les silences |
| Staff_symbol_engraver | Grave les cinq lignes (par défaut) de la portée |
| Stem_engraver | Crée les hampes et les trémolos sur une hampe unique |
| Time_signature_engraver | Crée les métriques |
Nous verrons plus avant comment le résultat de LilyPond peut changer lorsqu’on modifie l’action des graveurs.
Référence des propriétés internes : (internals)Engravers and Performers section ‘Engravers and Performers’ dans Référence des propriétés internes.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Modifying context properties
Les contextes gèrent les différentes valeurs des nombreuses
propriétés qui leur sont attachées. Beaucoup d’entre elles
sont susceptibles d’être modifiées afin d’influer sur l’interprétation
de l’input et ainsi changer l’apparence du résultat. On les modifie
grâce à la commande \set, qui s’utilise ainsi :
\set ContexteNommé.propriétéNommée = #valeur |
où ContexteNommé est habituellement Score,
Staff ou Voice. S’il n’est pas mentionné, il sera
considéré comme étant Voice.
Les noms des propriétés de contexte sont composés de mots accolés sans trait d’union ni caractère souligné, et dont seul le premier n’aura pas d’initiale en majuscule. Voici quelques exemples de celles les plus communément utilisées.
| propriétéNommée | Type | Fonction | Exemple de valeur |
|---|---|---|---|
| extraNatural | Booléen | Si vrai, ajoute un bécarre avant une altération accidentelle | #t, #f |
| currentBarNumber | Entier | Détermine le numéro de la mesure en cours | 50 |
| doubleSlurs | Booléen | Si vrai, imprime les liaisons au-dessous et au-dessus des notes | #t, #f |
| instrumentName | Texte | Détermine le nom à afficher en début de portée | "Cello I" |
| fontSize | Réel | Augmente ou diminue la taille de la fonte | 2.4 |
| stanza | Texte | Détermine le texte à imprimer avant le début d’un couplet | "2" |
où un booléen correspond soit à vrai (#t pour True en
anglais) ou faux (#f pour False en anglais), un entier est
un nombre entier positif, un réel est un nombre décimal positif ou
négatif, et texte correspond à une suite de caractères encadrée par des
apostrophes doubles. Attention à la présence des signes dièse
(#) dans deux cas particuliers : ils sont partie intégrante
des valeurs booléennes et précèdent les t ou f, mais
doivent aussi précéder valeur dans le libellé de la commande
\set. Il faudra donc, dans le cas d’une valeur booléenne, ne pas
oublier de saisir deux signes dièse – par exemple ##t.
Avant de déterminer l’une de ces propriétés, nous devons savoir dans
quel contexte elle intervient. Si cela est bien souvent évident, il
peut arriver que cela tourne au cauchemar. Lorsque vous ne spécifiez
pas le bon contexte, aucun message d’erreur ne s’affiche et l’effet
attendu n’est pas au rendez-vous. Par exemple, le clefGlyph est
de manière incontestable membre du contexte Staff, puisque c’est
bien le glyphe de clef de la portée qui doit être changé.
Dans l’exemple suivant, la première portée affiche effectivement la
bonne clef, alors que ce n’est pas le cas pour la deuxième – qui porte
la clef de sol par défaut au lieu d’une clef de basse (clef de fa) –
dans la mesure où le contexte n’a pas été spécifié.
<< \new Staff \relative { \set Staff.clefGlyph = "clefs.C" c''4 c } \new Staff \relative { \set clefGlyph = "clefs.F" % Wrong! d'4 d } >>
Dans la mesure où le nom de contexte par défaut est Voice, la
deuxième commande \set a défini la propriété clefGlyph
dans le contexte de voix. Puisque LilyPond n’ira pas chercher une telle
propriété dans le contexte Voice, celle-ci ne sera pas
interprétée. Il ne s’agit pas d’une erreur, aucun message d’erreur ne
sera ni émis ni enregistré.
De la même manière, une faute d’orthographe dans le nom de la propriété
ne générera aucun message d’erreur et l’action escomptée ne se produira
pas. Vous pourriez déterminer par la commande \set n’importe
quelle « propriété », même fictive, à partir de n’importe quel nom et
dans n’importe lequel des contextes disponibles. Mais tant que ce nom
est inconnu de LilyPond, rien ne se passera. Certains éditeurs de texte
disposent d’une prise en charge spécifique aux fichiers source LilyPond,
à l’instar de LilyPondTool couplé à JEdit et qui documente les noms des
propriétés dans une infobulle lorsque vous les survolez à la souris, ou
les souligne différemment s’ils sont inconnus, comme ConTEXT. Dans le
cas où votre éditeur ne dispose pas de ces fonctionnalités, nous vous
recommandons de vérifier le nom des propriétés que vous manipulez dans
la Référence des propriétés internes – voir
(internals)Tunable context properties section ‘Tunable context properties’ dans Référence des propriétés internes, ou
(internals)Contexts section ‘Contexts’ dans Référence des propriétés internes.
La propriété clefGlyph ne sera prise en compte que si elle
est définie dans un contexte Staff ; d’autres propriétés
peuvent par contre être définies dans plusieurs contextes différents.
C’est le cas de la propriété extraNatural qui est définie par
défaut à ##t (vrai) pour toutes les portées. Si vous lui
attribuez la valeur ##f (faux) dans un contexte Staff
particulier, elle ne s’appliquera qu’aux altérations de la portée en
question ; si vous lui attribuez la valeur « faux » au niveau du
contexte Score, cela s’appliquera alors à toutes les portées.
Voici comment supprimer les bécarres supplémentaires pour une portée :
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Staff.extraNatural = ##f aeses'2 aes } >>
et pour toutes les portées :
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Score.extraNatural = ##f aeses'2 aes } >>
Autre exemple, si la propriété clefTransposition est déterminée
au niveau du contexte Score, elle modifiera la valeur de la
transposition en cours pour toutes les portées actives ; cette valeur
sera considérée comme étant la nouvelle valeur par défaut pour toutes
les portées à venir.
La commande opposée, \unset, efface la propriété du contexte ; la
plupart des propriétés reviennent de ce fait à leur valeur par défaut.
En règle générale, la commande \unset n’est pas nécessaire dès
lors que vous faites appel à une nouvelle commande \set pour
modifier le réglage.
Les commandes \set et \unset peuvent intervenir n’importe
où dans votre fichier source. Elles seront effectives dès leur
apparition et jusqu’à la fin de la partition, à moins d’être affectées
par un \unset ou un nouveau \set. À titre d’exemple, nous
allons jouer avec la taille des fontes, ce qui affecte entre autres la
grosseur des têtes de note. Les modifications s’appliquent toujours par
rapport à la valeur par défaut, non par rapport à la dernière valeur
définie.
\relative { c'4 d % make note heads smaller \set fontSize = #-4 e4 f | % make note heads larger \set fontSize = #2.5 g4 a % return to default size \unset fontSize b4 c | }
Nous venons de voir comment déterminer la valeur de différents types de
propriété. N’oubliez pas que les nombres, entiers ou réels, doivent
être précédés d’un signe dièse (#) et les valeurs vrai ou faux de
deux signes dièse – respectivement ##t et ##f –. Une
valeur textuelle doit être encadrée de guillemets anglais,
"…", bien que, comme nous le constaterons plus tard, la
commande \markup permet aussi de spécifier du texte.
\with@translationof Setting context properties with \with
Les propriétés d’un contexte peuvent aussi être réglées lors de la
création de ce contexte. Ceci constitue parfois une façon plus claire
de spécifier les valeurs d’une propriété pour la durée de vie du
contexte. Lorsque vous créez un contexte à l’aide de la commande
\new, vous pouvez la faire suivre immédiatement d’un bloc
\with { … } qui contiendra les réglages des différentes
propriétés. Ainsi, si nous voulions par exemple annuler l’impression
des bécarres supplémentaires sur la durée d’une portée, nous
écririons :
\new Staff \with { extraNatural = ##f }
|
ce qui donnerait :
<< \new Staff \relative { gisis'4 gis aeses aes } \new Staff \with { extraNatural = ##f } { \relative { gisis'4 gis aeses aes } } >>
Les propriétés réglées de cette manière peuvent néanmoins être modifiées
de façon dynamique grâce à \set ; un \unset les ramènera à
leur valeur initialisée par \with.
La propriété fontSize constitue une exception : lorsqu’elle
est déterminée au sein d’un bloc \with, cela redéfinit la valeur
par défaut de la taille de fonte. Une modification est possible par la
commande \set, mais la commande \unset fontSize fera
revenir à la nouvelle valeur par défaut.
\context@translationof Setting context properties with \context
Vous pouvez régler les valeurs des propriétés de contexte en une seule
fois pour tous les contextes d’un même type, par exemple tous les
contextes Staff. Le type du contexte doit être donné
explicitement d’après son nom, par exemple Staff, précédé d’une
oblique inverse, donc nous saisirons \Staff. La manière de
régler la valeur des propriétés est la même que ce que nous avons vu
avec la commande \with, puisqu’on se place dans un bloc
\context inclus dans un bloc \layout. Chaque bloc
\context affectera tous les contextes concernés par le bloc
\score ou \book au sein duquel apparaît ce bloc
\layout. Voici comment le mettre en place :
\score { \new Staff { \relative { cisis''4 e d cis } } \layout { \context { \Staff extraNatural = ##t } } }
Dans le cas où ces ajustements de propriété doivent affecter toutes les portées de la partition, nous utiliserons alors :
\score { << \new Staff { \relative { gisis'4 gis aeses aes } } \new Staff { \relative { gisis'4 gis aeses aes } } >> \layout { \context { \Score extraNatural = ##f } } }
Les propriétés de contexte ainsi définies peuvent être adaptées pour
chacun des contextes en particulier grâce à un bloc \with ou bien
une commande \set au fil des notes.
Manuel de notation : (notation)Modification des réglages par défaut d’un contexte section ‘Modification des réglages par défaut d'un contexte’ dans Manuel de notation, (notation)La commande de fixation (set) section ‘La commande de fixation (set)’ dans Manuel de notation.
Référence des propriétés internes : (internals)Contexts section ‘Contexts’ dans Référence des propriétés internes, (internals)Tunable context properties section ‘Tunable context properties’ dans Référence des propriétés internes.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Adding and removing engravers
Nous avons vu que chaque contexte met en œuvre plusieurs graveurs et que chacun de ces graveurs est chargé de générer une composante particulière du fichier de sortie, qui les barres de mesure, qui la portée, qui les têtes de note, les hampes, etc. Le fait de supprimer un graveur d’un contexte éliminera sa contribution au fichier de sortie. Bien que ce soit là un moyen radical de modifier le résultat, cette pratique est dans quelques cas fort utile.
@translationof Changing a single context
Nous utilisons, pour supprimer un graveur d’un contexte, la commande
\with dès la création du-dit contexte, comme nous l’avons vu dans
la section précédente.
Illustrons notre propos en reprenant un exemple du chapitre précédent,
duquel nous supprimerons les lignes de la portée. Pour mémoire, les
lignes d’une portée sont générées par le Staff_symbol_engraver.
\new Staff \with { \remove "Staff_symbol_engraver" } \relative { c'4 d \set fontSize = #-4 % make note heads smaller e4 f | \set fontSize = #2.5 % make note heads larger g4 a \unset fontSize % return to default size b4 c | }
Vous pouvez aussi ajouter individuellement un graveur à un contexte. La commande se formule ainsi :
\consists Nom_du_graveur
et se place dans un bloc \with. Certaines partitions vocales
font apparaître un
(music-glossary)ambitus section ‘ambitus’ dans Glossaire au début de la portée, afin
d’indiquer ses notes extrêmes. L’ambitus est généré par
l’Ambitus_engraver, que l’on peut adjoindre à n’importe quel
contexte. Si nous l’ajoutons au contexte Voice, seule la
tessiture de cette voix sera calculée :
\new Staff << \new Voice \with { \consists "Ambitus_engraver" } { \relative { \voiceOne c''4 a b g } } \new Voice { \relative { \voiceTwo c'4 e d f } } >>
alors que si nous l’ajoutons au contexte Staff,
l’Ambitus_engraver calculera l’écart maximal à partir de toutes
les notes de toutes les voix de la portée :
\new Staff \with { \consists "Ambitus_engraver" } << \new Voice { \relative { \voiceOne c''4 a b g } } \new Voice { \relative { \voiceTwo c'4 e d f } } >>
@translationof Changing all contexts of the same type
Les exemples ci-dessus nous ont montré comment ajouter ou retirer des
graveurs à des contextes individuels. Nous pourrions aussi ajouter ou
supprimer des graveurs à tous les contextes d’un même type en insérant
les commandes pour le contexte approprié au sein d’un bloc
\layout. Si nous voulions afficher un ambitus pour chacune des
portées d’un système à quatre portées, il nous suffirait d’écrire :
\score { << \new Staff { \relative { c''4 a b g } } \new Staff { \relative { c'4 a b g } } \new Staff { \clef "G_8" \relative { c'4 a b g } } \new Staff { \clef "bass" \relative { c4 a b g } } >> \layout { \context { \Staff \consists "Ambitus_engraver" } } }
Vous réglerez de la même manière les propriétés de tous les contextes
d’un type particulier si vous insérez les commandes \set dans un
bloc \context.
Manuel de notation : (notation)Modification des greffons de contexte section ‘Modification des greffons de contexte’ dans Manuel de notation, (notation)Modification des réglages par défaut d’un contexte section ‘Modification des réglages par défaut d'un contexte’ dans Manuel de notation.
Dans la mesure où les Stem_engraver et Beam_engraver
rattachent à des têtes de note les objets qu’ils créent, désactiver le
Note_heads_engraver entraîne l’absence de hampe et de ligature.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] |
Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.
Autres langues : English, català, česky, deutsch, español, magyar, italiano, 日本語, nederlands.
À propos de la sélection automatique de la langue.