Manuel:Langue
- Voir aussi la section Langues du manuel d'architecture MediaWiki (devrait être fusionné ici ?)
Dans MediaWiki, il y a divers types de langues :
- La langue du contenu du site (
ContentLanguage
, basé sur$wgLanguageCode
), qui devrait généralement rester la même aussi longtemps que le wiki existe.- La variante de langue du contenu du site ($wgDefaultLanguageVariant ) est la variante par défaut quand LanguageConverter est mis en œuvre sur le site pour cette langue.
- La langue de l'interface utilisateur ($contextSource->getLanguage() appelée précédemment
$wgLang
), qui peut être changée dans vos préférences ou avec le paramètre ajouté&uselang=xyz
dans l’URL, mais qui reste généralement la même tout au long de l’utilisation du wiki par l’utilisateur. - La langue du contenu de la page. Elle peut être différente pour chaque page, même si la langue du site et celle de l'utilisateur sont les mêmes. Elle est définie par getPageLanguage() dans son titre, qui représente la langue dans laquelle le contenu source de la page (e.g le wikitexte) est écrit.
- La langue d'affichage de la page, aussi appelée variante de langue utilisateur, qui est une variante de langue de la langue du contenu de la page, suivant la préférence de l’utilisateur. Elle peut également être configurée par le paramètre
&variant
(ou$wgVariantArticlePath
) ajouté dans l’URL (par exemple, en sélectionnant l’un des onglets proposés) si c’est une variante de la langue du contenu de la page actuellement visualisée. Elle est définie par getPageViewLanguage() dans le titre, qui représente la langue dans laquelle le contenu rendu en HTML est écrit.
- La langue d'affichage de la page, aussi appelée variante de langue utilisateur, qui est une variante de langue de la langue du contenu de la page, suivant la préférence de l’utilisateur. Elle peut également être configurée par le paramètre
Tous les trois sont des objets de type langue.
Code de langue
- À ne pas confondre avec les codes de projets Wikimedia ; voir également les codes de langue sur Meta.
Un code de langue est une abréviation standard valide désignant une langue prise en charge par MediaWiki,[1] qui utilise de tels codes pour identifier de manière standard les langues (essentiellement en accord avec l’ISO 639-3, à l’exception des codes ISO 639-1 à deux lettres pour les régionalisations « établies ») et qui les expose ou les nécessite pour adapter de nombreux points de l’interface et du code.[2]
Dans l’exemple ci-après, MediaWiki:Message/ar
, ar
est le code de langue pour le Arabic.
La conformité avec le standard Unicode est requise pour fournir un bon support de langue, en particulier en coopération avec CLDR ; avoir un code ISO 639-3 valide est une condition nécessaire pour qu’une nouvelle langue puisse être ajoutée aux données de régionalisation de MediaWiki.
There are some special language codes for internal or development use: qqq
(for message documentation, does not work with uselang
etc.), qqx
(shows message names for debugging), en-x-rtl
(English, but pretends it is a right-to-left language), en-x-piglatin
(when $wgUsePigLatinVariant
is enabled, for LanguageConverter testing), x-xss
(when $wgUseXssLanguage
is enabled, tests XSS vulnerabilities in messages).
Names.php
Names.php est le dépôt maître des langues prises en charge par MediaWiki. Ce n’est pas la même chose que les langues affichées en l10n (fichiers JSON) par Mediawiki, ni les langues dont MediaWiki connait le nom (via CLDR/fr ), souvenez-vous en !
Langues de repli
Certaines langues dans MediaWiki ont ce qu’on appelle des « séquences de repli ».
C’est vers elles que MediaWiki s’orientera en utilisant une langue différente s’il ne peut pas trouver ce qu’il cherche dans une langue demandée.
Par exemple le code de langue frc
(français cajun) se replie sur le code de langue fr
(français).
La raison de ceci est que quelques fois certaines langues (ou variantes de langues) n’ont pas les messages ou les paramètres de régionalisation traduits ou adaptés spécifiquement pour elles.
La séquence de repli pour chaque langue peut se trouver dans son fichier languages/messages/MessagesXX.php
associé.
Par exemple MessagesFrc.php (grep fallback). Une liste brute existe depuis septembre 2020 dans ce commentaire de Phabricator.
Langue de contenu du site
Afficher/obtenir la langue du contenu du site
mw.config.get( 'wgContentLanguage' );
Langue de l’interface utilisateur
Version de MediaWiki : | ≥ 1.18 |
- Valeur par défaut
- Initialisé par
- Spécial:Préférences
&uselang=zxx
dans l’URL (voir uselang)&variant=xy
(ou$wgVariantArticlePath
) dans l’URL si c’est une variante de votre langue utilisateur
- Problèmes
- Puisque que les messages d’interface peuvent venir des langues de repli et que la langue dans lesquels ils sont chacun effectivement traduits n’est pas retournée, la langue effective de chaque message n’est pas connue.
Langue du contenu de page
Version de MediaWiki : | ≥ 1.18 |
- Valeur par défaut
- $wgLang dans les pages spéciales.
- l’anglais pour le CSS et les pages JS.
- pour les pages de l’espace de noms MediaWiki, la langue dépend de la sous-page. Par exemple, la langue de la page MediaWiki:Message/ar sera définie comme l’arabe (ar), et MediaWiki:Message sera
ContentLanguage
. - toutes les autres pages sont
ContentLanguage
par défaut.
- Configuration
- Les extensions peuvent modifier toutes les autres pages au moyen de l'accroche PageContentLanguage . La valeur pour les pages spéciales, les pages CSS, JS et les pages des espaces de noms MediaWiki ne peut pas être modifiée.
- Exemples
- L’extension Translate l’utilise pour la fonctionnalité de traduction de page.
Voir translatewiki:Project:About/ar comme une traduction de translatewiki:Project:About. La direction des lignes y est ainsi initialisée correctement à « de droite à gauche » pour l’arabe.
Version de MediaWiki : | ≥ 1.24 |
- Modification manuelle de la langue de la page
- La sélection de la langue de la page est maintenant possible à l’aide de Special:PageLanguage depuis MediaWiki 1.24.
- Les utilisateurs peuvent modifier la langue du contenu d’une page qui est par défaut la langue par défaut du wiki (
ContentLanguage
). La langue des pages de l’espace de noms MediaWiki ne peut pas être modifiée. - La fonctionnalité doit être activée avec
$wgPageLanguageUseDB = true
et le droitpagelang
doit être attribué à un groupe de droits utilisateur (qui pourra alors faire les modifications de la langue des pages). - La modification de la langue de page a pour effet la traduction de la page source et de ses unités dans la langue cible correcte. Au cas où la page traduite existe déjà dans la langue cible, le changement de la langue de page n’est pas autorisé.
- L’API correspondante se trouve sur API:SetPageLanguage/fr .
- Que cela définit-il ?
- Dans un SkinTemplate, cela ajoute un
<div lang="xyz" dir="ltr/rtl" class="mw-content-ltr/rtl"></div>
autour du texte de la page. L’attributdir
définit la direction d’écriture correcte. L’attributlang
sera toujours le code racine, par exemplede
même side-formal
est indiqué.- Pour les pages de fichier, la page de langue est initialisée dans « ImagePage.php », car il y a beaucoup de HTML destiné à être affiché dans la langue de l’utilisateur.
- Dans « Parser.php », cela initialise le style de numérotation dans la table des matières (TOC), et d’autres éléments non directement reliés, comme la grammaire. Pour faire cela uniquement, utilisez
parserOptions->setTargetLanguage()
. - La direction du texte de différence (DifferenceEngine) est initialisée à la valeur de la langue du contenu de la page. Dans certains cas cela ne sera pas le même et donc
$diffEngineObject->setTextLanguage( $code )
pourra être utilisé. - Depuis 1.19, cela définit le comportement des mots magiques de formatage des nombres et des dates, y compris DIRECTIONMARK, mais pas les noms des espaces de noms retournés par NAMESPACE(E) car ils ne dépendent en fait que de la langue du site. Notez que la transclusion d’un modèle défini dans une langue A dans une page définie dans la langue B sera analysée en utilisant la langue B de la page cible.
- Dans un SkinTemplate, cela ajoute un
- Langues multiples dans une seule page
- Les langues multiples dans une seule page ne sont en théorie pas prises en charge, mais de simples balises
<div lang="xyz" dir="ltr/rtl" class="mw-content-ltr/rtl">
peuvent être utilisées pour marquer le texte comme étant écrit dans une langue différente. Si la classe CSS est utilisée, les listes numérotées ou non, les liens de modification de sections seront affichés proprement lorsque l’attributdir
est opposé à celui de la langue de contenu de la page. Cependant, des éléments définis dans l’analyseur, tels que la table des matières (TOC) et les mots magiques ne seront pas modifiés.
- Visualiser / obtenir la langue de la page
- JavaScript :
mw.config.get( 'wgPageContentLanguage' )
– notez que, quand lorsqu’on affiche par exemple l’historique d’une page, cela renvoie la langue de la page à laquelle l’historique est attaché, parce que la page historique n’a pas de classemw-content-ltr/rtl
propre. Par exemple, à la fois/wiki/NomDePage
et/w/index.php?title=NomDePage&action=history
renvoient la langue deNomDePage
. 1.19+ - La langue du contenu de page est mentionnée dans l’affichage des informations de page (
action=info
, liée depuis la boîte à outils) 1.21+ - La langue du contenu de page peut être récupérée dans l’API par api.php?action=query&prop=info 1.22+
Structure du code
Premièrement, vous avez un objet Language
en Language.php .
Cet objet contient toutes les chaînes des messages localisables, et aussi d'autres paramètres et comportements importants spécifiques à la langue (majuscules, minuscules, affichage de dates, formatage de nombres, direction, règles de grammaire personnalisées, etc.).
L’objet est construit à partir de deux sources : des versions sous-classées de lui-même (classes) et des fichiers Message
(messages).
Il y a aussi la classe MessageCache
, qui gère la saisie de texte via l’espace de noms MediaWiki
.
La plupart des internationalisations se font aujourd'hui via des objets API Messages et en utilisant la fonction de raccourci wfMessage()
, qui est définie dans includes/GlobalFunctions.php
.
L’ancien code peut toujours utiliser les anciennes fonctions wfMsg*()
, qui sont désormais considérées comme obsolètes au profit des objets Message
mentionnés ci-dessus.
Voir aussi API Messages .
Objets Language
Il existe deux manières d’obtenir un objet de langue.
Vous pouvez utiliser les services globaux $wgLang et ContentLanguage
(MediaWiki\MediaWikiServices::getContentLanguage
) respectivement pour l’interface utilisateur et la langue du contenu.
Pour un langage quelconque, vous pouvez construire un objet en utilisant $languageFactory->getLanguage( 'en' )
en remplaçant en
par le code de langue.
Vous pouvez obtenir $languageFactory
, un objet de la classe MediaWiki\Languages\LanguageFactory
, en utilisant Dependency Injection .
Vous pouvez également utiliser wfGetLangObj( $code );
si $code
peut déjà être un objet de langue.
La liste des codes est dans includes/languages/data/Names.php
.
Les objets Language
sont nécessaires pour effectuer des fonctions spécifiques au langage, le plus souvent pour formater les nombres, l’heure et la date, mais aussi pour construire des listes et d’autres choses.
Il existe plusieurs couches de mise en cache et de fusion avec les langues de repli, mais ces détails ne sont pas pertinents pour l’utilisation normale.
Ancien système de traduction local
Avec MediaWiki 1.3.0, un nouveau système a été mis en place pour régionaliser MediaWiki.
Au lieu de modifier le fichier de langue et de demander aux développeurs d’appliquer les modifications, les utilisateurs pouvaient modifier les chaînes d’interface directement sur leurs wikis.
C’est le système utilisé depuis août 2005.
Les utilisateurs peuvent trouver le message qu’ils souhaitent traduire dans Special:AllMessages, puis modifier la chaîne correspondante dans l’espace de noms MediaWiki:
.
Une fois modifiés, ces changements sont visibles immédiatement.
Il n’était plus nécessaire de demander une mise à jour et d’attendre que les développeurs vérifient et mettent à jour le fichier.
Le système est idéal pour les projets Wikipédia ; cependant, un effet secondaire est que les fichiers de langue MediaWiki livrés avec le logiciel ne sont plus tout à fait à jour et il est plus difficile pour les développeurs de garder les fichiers sur Méta synchronisés avec les fichiers de langue réellement actifs.
Comme les fichiers de langue par défaut ne fournissent pas suffisamment de matériel traduit, nous sommes confrontés à deux problèmes :
- Les nouveaux projets Wikimedia créés dans une langue qui n’a pas été mise à jour depuis longtemps, nécessitent une retraduction totale de l’interface.
- Les autres utilisateurs de MediaWiki (y compris les projets Wikimedia dans la même langue) se retrouvent avec des interfaces non traduites. Ceci est particulièrement regrettable pour les langues plus rares qui n’ont pas beaucoup de traducteurs.
Ce n’est plus un si gros problème, car translatewiki.net est annoncé en bonne place et utilisé par presque toutes les traductions. Des traductions locales se produisent encore parfois, mais elles sont fortement déconseillées. Les messages locaux doivent pour la plupart être supprimés, déplaçant les traductions pertinentes vers translatewiki.net et ne laissant sur le wiki que la personnalisation spécifique au site ; il y a un énorme retard, en particulier dans les projets plus anciens, cet outil aide au nettoyage.
Garder les messages centralisés et synchronisés
Les messages en anglais sont très rarement désynchronisés avec le code. L'expérience a montré qu’il est pratique d’avoir tous les messages en anglais au même endroit. La révision du texte anglais peut se faire sans référence au code, tout comme la traduction. Les programmeurs font parfois de très mauvais choix pour le texte par défaut.
Ce qui peut être traduit ou adapté aux conventions régionales
Tant de choses sont localisables sur MediaWiki qu’elles ne sont pas toutes directement disponibles sur translatewiki.net : voir translatewiki:Translating:MediaWiki. Si l’intervention d’un développeur est requise sur le code, vous pouvez la demander sur Phabricator ou bien la demander sur translatewiki:Support si vous ne savez pas quoi faire exactement.
- Les espaces de noms - à la fois le noyau et les extensions, avec en plus les espaces de noms qui dépendent du genre des utilisateurs.
- Les jours de la semaine (et leurs abréviations).
- Les noms de mois (et leurs abréviations).
- Les librairies pour Special:BookSources
- Les noms des habillages.
- Les noms mathématiques.
- Les préférences de date. -
$datePreferences
- Les formats de date. -
$dateFormats
- Le format de date par défaut. -
$defaultDateFormat
- La correspondance de migration des préférences de date : - pour la compatibilité avec les anciennes bases de données MediaWiki.
- Les remplacements d’options utilisateur par défaut.
- Les noms de langues.
- Les noms de pays (via Extension:CLDR/fr ).
- Les noms de devises monétaires (via Extension:CLDR/fr ).
- Les fuseaux horaires.
- La conversion d’encodage des caractères via
iconv
. - La conversion de majuscules en minuscules d’abord (nécessite des correspondances de casse pour certaines langues).[demande de précisions]
- La conversion de casse en majuscules ou en minuscules.[demande de précisions]
- La conversion des mots en majuscules.
- La césure des mots en majuscules.[demande de précisions]
- La conversion de tous les caractères en une casse indifférente de leur casse majuscule ou minuscule initiale.[demande de précisions]
- L’élimination de la ponctuation pour les recherches en MySQL (optimisation de la recherche).
- L’obtention du premier caractère signifi catif
- Les encodages alternatifs.
- Le recodage pendant la modification pour faciliter la saisie (puis le recodage des entrées à l’enregistrement).[demande de précisions]
- Les langues de repli (c’est-à-dire, la ou les autres langues à utiliser quand une traduction n’est pas disponible et qui sont les plus proches plutôt que d’utiliser le repli par défaut qui est l’anglais).
- La direction d’écriture (
ltr
de la gauche vers la droite, ou bienrtl
de la droite vers la gauche). - Le caractère de marque de la direction et dépendant de la direction d’écriture.
- Les flèches dépendantes de de la direction d’écriture.
- Les langues pour lesquelles le style de caractères en italique ne peut pas être utilisé.
- Le formatage des nombres (place de la virgule, par exemple ajouter ou pas des séparateurs de chiffres ; transformer les chiffres ; transformer les séparateurs) :[3]
- La troncature (tenant compte des caractères codés sur plusieurs octets).
- Les conversions grammaticales pour les langues flexionnelles (mots différents selon leur fonction grammaticale).
- Les transformations au pluriel.
- Le formatage des temporisations d’attente.[demande de précisions]
- La segmentation des diffs (notamment en chinois).
- La conversion selon les variantes de la langue (différentes orthographes ou écritures).
- Les options des préférences d’utilisateur spécifiques à la langue.
- L’extension des liens et les préfixes de liens -
$linkTrail
. Ce sont des lettres pouvant être accolées avant les crochets ouvrants ou après les crochets fermants d’un lien wiki et qui apparaissent à l’écran comme si elles faisaient partie du lien lui-même (c’est-à-dire que vous pouvez cliquer dessus et qu’elles en ont la même couleur), e.g.:[[foo]]bar
. Par défaut l'ensemble de ces caractères est « a-z » ; vous pouvez ajouter à cette liste les lettres accentuées et les caractères non latins utilisés dans votre langue. - Le code de la langue (utilisé de préférence selon la dernière RFC en standard BCP 47, actuellement RFC 5646, avec sa base de données IANA associée : N’utilisez pas les codes obsolètes, ceux hérités d’anciennes spécifications, ni ceux qui ont un usage privé : vérifiez ce à quoi ils correspondent dans le standard ISO 639 et évitez les codes assignés aux ensembles et aux familles de langues en ISO 639-5, ainsi que les codes ISO 639 qui n’ont pas été importés dans la base de données de l’IANA pour la suite de recommandation BCP 47).
- Le type de mise en valeur.
- L’extension Cite possède un fichier de page spéciale par langue,
cite_text-zyx
pour le code de languezyx
.
Fonctionnalité soignée :
- I18N pour
sprintfDate
- Le formatage de nombres en chiffres romains.
Espaces de noms
Actuellement la traduction des espaces de noms est désactivée sur translatewiki.net; vous devez donc la faire personnellement dans Gerrit, ou enregistrer une tâche Phabricator demandant à ce que quelqu'un d'autre la fasse.[4]
Pour permettre aux espaces de noms personnalisés introduits par votre extension d'être traduits, créez un fichier MyExtension.i18n.namespaces.php
similaire à :
<?php
/**
* Traductions des espaces de noms introduites par MyExtension.
*
* @file
*/
$namespaceNames = [];
// Pour les wikis où l'extension MyExtension n'est pas installée.
if( !defined( 'NS_MYEXTENSION' ) ) {
define( 'NS_MYEXTENSION', 2510 );
}
if( !defined( 'NS_MYEXTENSION_TALK' ) ) {
define( 'NS_MYEXTENSION_TALK', 2511 );
}
/** English */
$namespaceNames['en'] = [
NS_MYEXTENSION => 'MyNamespace',
NS_MYEXTENSION_TALK => 'MyNamespace_talk',
];
/** Finnish (Suomi) */
$namespaceNames['fi'] = [
NS_MYEXTENSION => 'Nimiavaruuteni',
NS_MYEXTENSION_TALK => 'Keskustelu_nimiavaruudestani',
];
Puis chargez-le à partir du fichier extension.json
en utilisant ExtensionMessagesFiles de cette manière :
{
"name": "MyExtension",
"version": "0.0.1",
"descriptionmsg": "myextension-desc",
"ExtensionMessagesFiles": {
"MyExtensionNamespaces": "MyExtension.i18n.namespaces.php"
}
}
Dorénavant, lorsqu'un utilisateur installe MyExtension sur son wiki finois (fi), l'espace de noms personnalisé sera traduit automatiquement en finnois sans rien faire !
Pensez également à enregistrer le ou les espaces de noms de votre extension sur la page Espaces de noms par défaut des extensions .
Alias des pages spéciales
Voir la page du manuel concernant les Pages spéciales pour une information plus à jour. Ce qui suit ne semble pas être valide.
Créez un nouveau fichier pour les alias des pages spéciales dans ce format :
<?php
/**
* Aliases for the MyExtension extension.
*
* @file
* @ingroup Extensions
*/
$aliases = [];
/** English */
$aliases['en'] = [
'MyExtension' => [ 'MyExtension' ]
];
/** Finnish (Suomi) */
$aliases['fi'] = [
'MyExtension' => [ 'Lisäosani' ]
];
Puis chargez-le à partir du fichier extension.json
en utilisant ExtensionMessagesFiles de cette manière :
{
"name": "MyExtension",
"version": "0.0.1",
"descriptionmsg": "myextension-desc",
"ExtensionMessagesFiles": {
"MyExtensionAlias": "MyExtension.i18n.alias.php"
}
}
Lorsque votre code de page spéciale utilise soit SpecialPage::getTitleFor( 'MyExtension' )
soit $this->getTitle()
(dans la classe qui fournit Special:MyExtension), l'alias traduit sera utilisé s'il existe.
Alias des espaces de noms
Les alias des espaces de noms sont des noms supplémentaires pouvant être utilisés pour adresser les espaces de noms existants. On ne s'en sert que rarement, mais le fait de ne pas les avoir quand ils sont nécessaires, crée habituellement des ravages dans les wikis existants.
Vous avez besoin des alias pour les noms des espaces de noms :
- Lorsqu'une langue possède des variantes, et que ces dernières appellent certains espaces de noms de façon différente, et que vous voulez que les contributeurs puissent utiliser ces façons. Les variantes sont sélectionnables dans les Préférences utilisateur. Les utilisateurs voient toujours la variante qu'ils ont sélectionnée, sauf quand il s'agit de wikicode, mais quand ils modifient ou qu'ils font une recherche, une variante arbitraire peut être choisie.
- Quand la langue d'un wiki existant, la ou les langues de repli, ou la localisation sont modifiées, alors certains espaces de noms changent également. Ainsi pour ne pas casser les liens déjà présents dans le wiki, et qui utilisent les anciens noms des espaces de noms, vous devez ajouter chaque nom d'espace de noms qui a été modifié, à son alias de nom d'espace de noms, au moment ou bien juste avant que la modification soit faite.
Les noms anglais des espaces de noms génériques sont toujours présents dans les alias des espaces de noms dans toutes les traductions, par conséquent vous n'avez pas besoin et vous ne devez pas les ajouter.
Les alias ne peuvent pas être traduits sur Translatewiki.net , mais peuvent être demandés ici ou sur Bugzilla : voir les Alias des noms des espaces de noms sur translatewiki.
Paramètres internationalisés
Certains paramètres linguistiques peuvent dépendre de la géographie; MediaWiki n'a pas ce concept de région et ne connait que les langues et leurs variantes.
Ces paramètres doivent avoir été définis une fois en tant que langue par défaut, ensuite les wikis individuels peuvent la modifier comme ils le souhaitent, dans leur configuration.
Formats de la date et de l'heure
L'heure et les dates sont affichées sur les pages spéciales et similaires. Le format par défaut de l'heure et de la date sont utilisés pour les signatures, ce qui en fait le format le plus utilisé et le plus communément compris par les utilisateurs de cette langue. Les utilisateurs anonymes verront également le format par défaut. Les utilisateurs enregistrés peuvent choisir d'autres formats dans leurs Préférences.
Si vous êtes familier avec le format du time() de PHP, vous pouvez essayer de construire des formats par vous-même. MediaWiki utilise une chaîne de format similaire avec quelques caractéristiques supplémentaires. Si vous ne comprenez pas la phrase précédente, ce n'est pas grave. Vous pouvez fournir une liste d'exemples pour Développeurs .
Voir les Sources des messages des messages système.
Notes
- ↑ Voir includes/languages/data/Names.php.
- ↑ En dépit de ceci, depuis 2012, la validation des codes langue n’est toujours pas un problème résolu. Voir la Validation des langues dans MediaWiki, par Niklas Laxström, 28 août 2012.
- ↑
Ces réglages sont configurés selon la langue respectivement dans les fichiers
language/classes/LanguageXx.php
oulanguage/messages/MessagesXx.php
. - ↑ https://gerrit.wikimedia.org/r/211677
Voir aussi
- MediaWiki multilingue
- Obtenir le nom des langues à partir de leurs codes est possible en utilisant la fonction noyau {{#language:<code>}} documentée dans mots magiques.