Initiation au Lua avec Scribunto/Librairie Language
Présentation
modifierLes 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
modifierLes 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 :
local p = {}
function p.visualisation(frame)
reponse = ""
for index, objet in pairs(mw.langage) do
reponse = reponse.."<br>À la clé "..index..", on trouve un objet de type : "..type(objet)
end
return reponse
end
return p
{{#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
modifiermw.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
modifiermw.language.getFallbacksFor( code )
Renvoie une liste des codes de langue de MediaWiki pour le code spécifié.
mw.language.isSupportedLanguage
modifiermw.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
modifiermw.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
modifiermw.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
modifiermw.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
modifiermw.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
modifiermw.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
modifiermw.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
modifierNous commencerons par visualiser le contenu d'un objet Langage grâce au programme suivant :
local p = {}
function p.visualise(frame)
reponse = ""
langage = mw.language.new("essai")
for index, objet in pairs(langage) do
reponse = reponse.."<br>À la clé "..index..", on trouve un objet de type : "..type(objet)
end
return reponse
end
return p
{{#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
modifier
Étudions maintenant les 22 méthodes dans l’ordre où elles sont sorties :
mw.language:convertGrammar
modifierlang: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 quegrammar
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
modifierlang:isRTL()
Retourne vrai si la langue est écrite de droite à gauche, faux si elle est écrite de gauche à droite.
mw.language:getArrow
modifierlang: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
modifierlang: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
modifierlang:getDirMarkEntity( opposite )
Retourne "‎" ou "‏", 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
modifierlang: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
modifierlang:getFallbackLanguages()
Renvoie une liste de codes de langue de MediaWiki pour cet objet langue. Équivalent à mw.language.getFallbacksFor( lang:getCode() )
.
mw.language:ucfirst
modifierlang:ucfirst( s )
Convertit le premier caractère de la chaîne en majuscule, comme le fait lang:uc().
mw.language:getDir
modifierlang: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
modifierlang: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:grammar
modifier
mw.language:lc
modifierlang: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:plural
modifier
mw.language:gender
modifierlang: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
modifierlang:lcfirst( s )
Convertit le premier caractère de la chaîne en minuscule, comme le fait lang:lc().
mw.language:formatNum
modifierlang: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
modifierlang: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) :
-- ceci génère un retour à la ligne alors que {{#time:\n}} affiche un "n" (n) lang:formatDate( '\n' ) -- ceci affiche un "n" alors que {{#time:\\n}} affiche un "\" -- suivi du numéro du mois. (\10) lang:formatDate( '\\n' ) -- ceci affiche un "\" suivi du numéro du mois, alors que {{#time:\\\\n}} -- affiche deux "\" suivi du numéro du mois. (\\10) lang:formatDate( '\\\\n' )
mw.language:getCode
modifierlang:getCode()
Retourne le code de langue correspondant à cet objet.
mw.language:formatDuration
modifierlang: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
modifierlang: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
modifierlang: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
modifierlang: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'.