# Initiation au Lua avec Scribunto/Librairie Language
## Présentation

Les codes des langues sont décrits dans Language code. Bon nombre des codes de langue de MediaWiki sont similaires aux codes de langue IETF, mais tous les codes de langue de MediaWiki ne sont pas des codes langue IETF valides ou vice-versa.
Les fonctions documentées comme mw.language.name sont disponibles dans la table globale mw.language. Les fonctions documentées comme mw.language:name sont des méthodes d'un objet Language (voir mw.language.new).

## Fonctions de la librairie language

Les exemples de ce chapitre se trouveront dans le Module:Language
Nous commencerons par visualiser le contenu de la librairie language grâce au programme suivant :
{{#invoke:Language|visualisation}} nous donne : À la clé isValidCode, on trouve un objet de type : function À la clé getFallbacksFor, on trouve un objet de type : function À la clé isSupportedLanguage, on trouve un objet de type : function À la clé new, on trouve un objet de type : function À la clé fetchLanguageNames, on trouve un objet de type : function À la clé isValidBuiltInCode, on trouve un objet de type : function À la clé fetchLanguageName, on trouve un objet de type : function À la clé isKnownLanguageTag, on trouve un objet de type : function À la clé getContentLanguage, on trouve un objet de type : function
Nous voyons que nous avons 9 fonctions.
Étudions ces fonctions dans l’ordre où elles sont sorties :

#### mw.language.isValidCode

mw.language.isValidCode( code )
Retourne vrai si une chaîne de code langue est d'une forme valide, qu’il existe ou pas. Ceci inclut les codes qui sont utilisés pour la personnalisation par les espaces de noms MediaWiki.
Le code peut ne correspondre à aucun langage connu.
Un code de langue est valide s'il ne contient pas certains caractères (deux-point, apostrophe simple ou double, barre oblique renversée ou non, crochet, esperluette, ou le caractère NULL de l'ASCII) et est dans ce cas-là autorisé dans un titre de page.

#### mw.language.getFallbacksFor

mw.language.getFallbacksFor( code )
Renvoie une liste des codes de langue de MediaWiki pour le code spécifié.

#### mw.language.isSupportedLanguage

mw.language.isSupportedLanguage( code )
Vérifie si la localisation est disponible dans MediaWiki pour le code de langue indiqué.
Un code de langue est « supporté » si c’est un code « valide » (qui renvoie true via mw.language.isValidCode), ne contient pas de lettres en majuscule, et a un fichier dans la version courante de MediaWiki.
Il est possible pour un code de langue d’être « supporté » mais pas « reconnu » (c'est-à-dire renvoyant true via mw.language.isKnownLanguageTag). Veuillez noter aussi que certains codes sont « supportés » malgré que mw.language.isValidBuiltInCode renvoie false.

#### mw.language.new

mw.language.new( code ) mw.getLanguage( code )
Crée un nouvel objet Language. Les objets Language n'ont aucune propriété accessible, mais possèdent de nombreuses méthodes qui sont documentées ci-dessous.

#### mw.language.fetchLanguageNames

mw.language.fetchLanguageNames mw.language.fetchLanguageNames( inLanguage ) mw.language.fetchLanguageNames( inLanguage, include )
Cherche la liste des langues reconnues par MediaWiki, et retourne une table de correspondance nom de langue ↔ code de langue.
Par défaut, le nom de langue retourné est celui dans la langue en question ; renseigner un code de langue pour inLanguage permet de renvoyer tous les noms dans cette langue.
Par défaut, seules les noms de langue connus par MediaWiki sont renvoyés ; renseigner 'all' pour include permet le renvoi de toutes les langues disponibles (e.g. depuis mw:Extension:CLDR), tandis que renseigner 'mwfile' permet de renvoyer seulement les langues qui ont des traductions incluses dans le cœur de MediaWiki ou dans des extensions activées. Pour sélectionner explicitement le défaut, il faut renseigner 'mw'.

#### mw.language.isValidBuiltInCode

mw.language.isValidBuiltInCode( code )
Retourne vrai si le code de langue est ou pourrait être disponible dans MediaWiki.
Le code peut en effet ne correspondre à aucun langage connu.
Un code de langue est un "valid built-in code" si c’est un code « valide » (c'est-à-dire qu'on obtient true via mw.language.isValidCode) ; il est constitué dans ce cas-là seulement de lettres du jeu de codage ASCII, de nombres, de traits d'union, et comporte au moins deux caractères.
Notez que certains codes sont « supportés » (c'est-à-dire qu'on obtient true via mw.language.isSupportedLanguage) même si la présente fonction renvoie false.

#### mw.language.fetchLanguageName

mw.language.fetchLanguageName( code, inLanguage )
Le nom complet de la langue du code indiqué : par défaut dans la langue du wiki (autonyme), ou traduit dans la langue indiquée dans inLanguage.

#### mw.language.isKnownLanguageTag

mw.language.isKnownLanguageTag( code )
Retourne vrai si le code indiqué est un code reconnu par MediaWiki.
Un code de langue est « connu » si c’est un « valid built-in code » (c'est-à-dire qui renvoie true via mw.language.isValidBuiltInCode) et renvoie une chaîne non vide via mw.language.fetchLanguageName.

#### mw.language.getContentLanguage

mw.language.getContentLanguage mw.getContentLanguage
Retourne un nouvel objet Language correspondant à la langue du wiki sur lequel on se trouve.

## Méthode de la librairie Langage

Nous commencerons par visualiser le contenu d'un objet Langage grâce au programme suivant :
{{#invoke:Language|visualise}} nous donne : À la clé convertGrammar, on trouve un objet de type : function À la clé code, on trouve un objet de type : string À la clé isRTL, on trouve un objet de type : function À la clé getArrow, on trouve un objet de type : function À la clé toBcp47Code, on trouve un objet de type : function À la clé parseFormattedNumber, on trouve un objet de type : function À la clé getDirMarkEntity, on trouve un objet de type : function À la clé getDirMark, on trouve un objet de type : function À la clé getFallbackLanguages, on trouve un objet de type : function À la clé ucfirst, on trouve un objet de type : function À la clé getDir, on trouve un objet de type : function À la clé caseFold, on trouve un objet de type : function À la clé grammar, on trouve un objet de type : function À la clé lc, on trouve un objet de type : function À la clé plural, on trouve un objet de type : function À la clé gender, on trouve un objet de type : function À la clé lcfirst, on trouve un objet de type : function À la clé formatNum, on trouve un objet de type : function À la clé formatDate, on trouve un objet de type : function À la clé getCode, on trouve un objet de type : function À la clé formatDuration, on trouve un objet de type : function À la clé uc, on trouve un objet de type : function À la clé convertPlural, on trouve un objet de type : function À la clé getDurationIntervals, on trouve un objet de type : function
Nous voyons qu’il y a 22 méthodes et une chaîne de caractère.
Débarrassons nous de la chaîne de caractères

#### langage.code

Étudions maintenant les 22 méthodes dans l’ordre où elles sont sorties :

#### mw.language:convertGrammar

lang:convertGrammar( word, case ) lang:grammar( case, word )
    Notez l’ordre différent des paramètres dans les deux versions. convertGrammar utilise le même ordre des paramètres que la méthode de même nom dans l’objet Language alors que grammar utilise le même ordre des paramètres que la parser-function de même nom (voir mw:Help:Magic words#Localisation).
Permet de choisir la forme correcte de word pour l'inflexion case.
Les valeurs possibles pour word et case dépendent de la langue, voir m:Help:Magic words#Language-dependent word conversions et translatewiki:Grammar pour plus de détails.

#### mw.language:isRTL

lang:isRTL
Retourne vrai si la langue est écrite de droite à gauche, faux si elle est écrite de gauche à droite.

#### mw.language:getArrow

lang:getArrow( direction )
Retourne un caractère Unicode correspondant à la direction direction:
* forwards: "→" ou "←" selon l'orientation de la langue
* backwards: "←" ou "→" selon l'orientation de la langue
* left: "←"
* right: "→"
* up: "↑"
* down: "↓"

#### mw.language:parseFormattedNumber

lang:parseFormattedNumber( s )
Prend un nombre formaté par lang:formatNum et retourne le nombre correspondant. C'est une version « compatible avec les conventions de la langue » de tonumber.

#### mw.language:getDirMarkEntity

lang:getDirMarkEntity( opposite )
Retourne "&lrm;" ou "&rlm;", selon la direction de la langue et selon que opposite est vrai ou faux (si vrai retourne la direction opposée à celle de la langue).

#### mw.language:getDirMark

lang:getDirMark( opposite )
Retourne une chaîne contenant soit U+200E (le symbole d'écriture de gauche à droite) soit U+200F (le symbole de l'écriture de droite à gauche), selon la direction de la langue et selon que opposite est vrai ou faux (si vrai retourne la direction opposée à celle de la langue).

#### mw.language:getFallbackLanguages

lang:getFallbackLanguages
Renvoie une liste de codes de langue de MediaWiki pour cet objet langue. Équivalent à mw.language.getFallbacksFor( lang:getCode ).

#### mw.language:ucfirst

lang:ucfirst( s )
Convertit le premier caractère de la chaîne en majuscule, comme le fait lang:uc.

#### mw.language:getDir

lang:getDir
Retourne "ltr" (left-to-right → de gauche à droite) ou "rtl" (right-to-left → de droite à gauche), selon la direction de la langue.

#### mw.language:caseFold

lang:caseFold( s )
Convertit la chaîne en une forme appropriée pour une comparaison non sensible à la casse. Notez que le résultat peut ne pas avoir de sens s'il est affiché.

#### mw.language:lc

lang:lc( s )
Convertit la chaîne en minuscules, en respectant les règles particulières de la langue correspondante.
Quand la librairie Ustring est chargée, la fonction mw.ustring.lower est codée en appelant mw.language.getContentLanguage:lc( s ).

#### mw.language:gender

lang:gender( what, masculine, feminine, neutral ) lang:gender( what, { masculine, feminine, neutral } )
Permet de choisir la chaîne correspondante au genre indiqué par what, qui peut être "male", "female" ou un nom d'utilisateur.

#### mw.language:lcfirst

lang:lcfirst( s )
Convertit le premier caractère de la chaîne en minuscule, comme le fait lang:lc.

#### mw.language:formatNum

lang:formatNum( n )
Formate un nombre en respectant le groupement des chiffres et le séparateur décimal de la langue correspondante. Par exemple, « 123456.78 » produira « 123,456.78 », « 123.456,78 », ou même « ١٢٣٬٤٥٦٫٧٨ » selon la langue du wiki.

#### mw.language:formatDate

lang:formatDate( format, timestamp, local )
Formate une date selon le format indiqué dans la chaîne format. Si timestamp est omis, l’heure actuelle est utilisée. La valeur local doit être un booléen ou nil. Si local est vrai, l’heure est formatée à partir de l’heure locale du wiki plutôt qu’à partir de l’heure UTC.
La chaîne de formatage et les valeurs supportées pour timestamp sont identiques à celles du parser function #time. Notez que les antislash ("\") peuvent nécessiter d’être doublés en Lua alors que ce n’est pas nécessaire en wikitexte (car ce caractère a un sens particulier en Lua et non en wikitexte) :

#### mw.language:getCode

lang:getCode
Retourne le code de langue correspondant à cet objet.

#### mw.language:formatDuration

lang:formatDuration( seconds ) lang:formatDuration( seconds, allowedIntervals )
Découpe une durée (exprimée en secondes) dans des unités utilisables par l'homme, par exemple : 12345 en 3 heures, 25 minutes et 45 secondes, retournant le résultat dans une chaîne.
allowedIntervals, si indiqué, est une table avec des valeurs nommant les unités d'intervalle à utiliser dans la réponse. Cela comprend : 'millennia', 'centuries', 'decades', 'years', 'weeks', 'days', 'hours', 'minutes', et 'seconds'.

#### mw.language:uc

lang:uc( s )
Convertit la chaîne en majuscules, en respectant les règles particulières de la langue correspondante.
Quand la librairie Ustring est chargée, la fonction mw.ustring.upper est codée en appelant mw.language.getContentLanguage:uc( s ).

#### mw.language:convertPlural

lang:convertPlural( n, ... ) lang:convertPlural( n, forms ) lang:plural( n, ... ) lang:plural( n, forms )
Permet de choisir la forme gramaticale adaptée depuis forms (qui doit être une séquence) ou ... en se basant sur le nombre n. Par exemple en anglais, vous pouvez utiliser n .. ' ' .. lang:plural( n, 'sock', 'socks' ) ou n .. ' ' .. lang:plural( n, { 'sock', 'socks' } ) pour générer un texte grammaticalement correct qu’il y ait 1 ou 200 "socks".
Le nombre de valeurs nécessaires pour la séquence dépend de la langue ; voir m:Help:Magic words#Language-dependent word conversions et translatewiki:FAQ#PLURAL pour plus de détails.

#### mw.language:getDurationIntervals

lang:getDurationIntervals( seconds ) lang:getDurationIntervals( seconds, allowedIntervals )
Découpe une durée exprimée en secondes en unités lisibles par l'homme, et retourne le résultat dans une table dont les éléments sont classés par unité. Par exemple 12345 retournera les éléments 3 heures, 25 minutes et 45 secondes.
allowedIntervals, si précisé, est une table avec comme valeurs les noms des unités à utiliser : 'millennia', 'centuries', 'decades', 'years', 'days', 'hours', 'minutes', and 'seconds'.
| Librairie HTML | Librairie Message |