Initiation au Lua avec Scribunto/Librairie Language

Début de la boite de navigation du chapitre
Librairie Language
Icône de la faculté
Chapitre no 16
Leçon : Initiation au Lua avec Scribunto
Chap. préc. :Librairie HTML
Chap. suiv. :Librairie Message

Exercices :

Sur les librairies Scribunto
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Initiation au Lua avec Scribunto : Librairie Language
Initiation au Lua avec Scribunto/Librairie Language
 », n'a pu être restituée correctement ci-dessus.

Présentation modifier

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 modifier

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 :

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 modifier

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 si 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 modifier

mw.language.getFallbacksFor( code )

Renvoie une liste des codes de langue de MediaWiki pour le code spécifié.


mw.language.isSupportedLanguage modifier

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àd 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 modifier

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 modifier

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 modifier

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àd 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àd qu'on obtient true via mw.language.isSupportedLanguage) même si la présente fonction renvoie false.


mw.language.fetchLanguageName modifier

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 modifier

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àd qui renvoie true via mw.language.isValidBuiltInCode) et renvoie une chaîne non vide via mw.language.fetchLanguageName.

mw.language.getContentLanguage modifier

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 modifier

Nous 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 modifier

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 modifier

lang:isRTL()

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


mw.language:getArrow modifier

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 modifier

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 modifier

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 modifier

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 modifier

lang:getFallbackLanguages()

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


mw.language:ucfirst modifier

lang:ucfirst( s )

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


mw.language:getDir modifier

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 modifier

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:grammar modifier


mw.language:lc modifier

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:plural modifier


mw.language:gender modifier

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 modifier

lang:lcfirst( s )

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


mw.language:formatNum modifier

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 modifier

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) :

-- 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. (\2)
lang:formatDate( '\\n' )

-- ceci affiche un "\" suivi du numéro du mois, alors que {{#time:\\\\n}}
-- affiche deux "\" suivi du numéro du mois. (\\2)
lang:formatDate( '\\\\n' )


mw.language:getCode modifier

lang:getCode()

Retourne le code de langue correspondant à cet objet.


mw.language:formatDuration modifier

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 modifier

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 modifier

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 modifier

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'.