Initiation au Lua avec Scribunto/Librairie Language

Leçons de niveau 10
Une page de Wikiversité, la communauté pédagogique libre.
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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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[modifier | modifier le wikicode]

mw.language.getFallbacksFor( code )

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


mw.language.isSupportedLanguage[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]


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

mw.language:convertGrammar[modifier | modifier le wikicode]

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 | modifier le wikicode]

lang:isRTL()

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


mw.language:getArrow[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

lang:ucfirst( s )

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


mw.language:getDir[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]


mw.language:lc[modifier | modifier le wikicode]

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 | modifier le wikicode]


mw.language:gender[modifier | modifier le wikicode]

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 | modifier le wikicode]

lang:lcfirst( s )

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


mw.language:formatNum[modifier | modifier le wikicode]

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 | modifier le wikicode]

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

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


mw.language:getCode[modifier | modifier le wikicode]

lang:getCode()

Retourne le code de langue correspondant à cet objet.


mw.language:formatDuration[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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