Handleiding:Language
- Zie ook Handleiding MediaWiki architectuur - Talen (moet dat hier samengevoegd worden?)
In MediaWiki zijn er verschillende soorten talen:
- De site content language (service
ContentLanguage
inMediaWiki\MediaWikiServices::getContentLanguage
, gebaseerd op$wgLanguageCode
), die over het algemeen hetzelfde zou moeten blijven zolang de wiki bestaat.- De site content language variant ($wgDefaultLanguageVariant ) is de standaardvariant wanneer LanguageConverter is geïmplementeerd voor die taal.
- De user interface language ($contextSource->getLanguage() voorheen
$wgLang
), die kan worden gewijzigd in uw voorkeuren of met&uselang=xyz
in de URL, maar ook over het algemeen hetzelfde blijft tijdens het gebruik van de wiki. - De page content language. Dit kan voor elke pagina anders zijn, zelfs als de site en de taal van de gebruiker hetzelfde zijn. Het wordt gedefinieerd in getPageLanguage() in Title, die aangeeft in welke taal de bron van de pagina-inhoud (bijv. wikitekst) is geschreven.
- De page view language oftewel user language variant, wat een taalvariant is van de taal van de pagina-inhoud, zoals de voorkeur heeft van de gebruiker. Het kan ook worden ingesteld via
&variant
(of$wgVariantArticlePath
) in de URL (bijvoorbeeld door een van de tabbladen te selecteren) als het een variant is van de taal van de inhoud van de pagina die wordt bekeken. Het wordt gedefinieerd in getPageViewLanguage() in Title, die aangeeft in welke taal de weergegeven HTML-inhoud is geschreven.
- De page view language oftewel user language variant, wat een taalvariant is van de taal van de pagina-inhoud, zoals de voorkeur heeft van de gebruiker. Het kan ook worden ingesteld via
Ze zijn alle drie taal-objecten.
Taalcode
- Niet te verwarren met de Wikimedia-projectcode; Zie ook Taalcodes op Meta.
Een taalcode is een geldige standaardafkorting voor een taal die wordt ondersteund door MediaWiki,[1] die dergelijke codes gebruikt als standaardidentificaties voor talen (meestal in overeenstemming met ISO 639-3, met uitzondering van tweelettercodes van ISO 639-1 voor "gevestigde" landinstellingen) en stelt deze bloot of vereist deze op veel punten van de interface en code.[2]
Voorbeeld MediaWiki:Message/ar
, ar
is de taalcode voor Arabic.
Uniformiteit met de Unicode-standaard is nodig om een goede taalondersteuning te bieden, met name in samenwerking met CLDR; het hebben van een ISO 639-3 code is een vereiste voor een taal die moet worden toegevoegd aan MediaWiki locales.
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 is de master registry van talen die worden ondersteund door MediaWiki. NB: Dit is niet hetzelfde als talen waarvan MediaWiki l10n zal tonen (JSON-bestanden) noch talen waarvan MediaWiki de namen kent (via CLDR ).
Fallback talen
Sommige talen in MediaWiki hebben wat bekend staat als een "fallback volgorde".
Dit is de taal die MediaWiki gebruikt als het een benodigde vertaalde tekst niet kan vinden.
Een voorbeeld hiervan is de taalcode frc
(Cajun Frans), die terugvalt op de taalcode fr
(Frans).
De reden hiervoor is dat talen soms niet alle boodschappen hebben die in ze zijn gedefinieerd.
De fallback voor een taal is te vinden in het bijbehorende bestand languages/messages/MessagesXX.php
.
Bijvoorbeeld MessagesFrc.php. U kunt de code zoeken voor al het gebruik van de vertaling. Er is ook een lijst van september 2020 in deze Phabricator opmerking.
Site content taal
Het bekijken/ophalen van de taal van de inhoud van de website.
mw.config.get( 'wgContentLanguage' );
User interface taal
MediaWiki-versie: | ≥ 1.18 |
- Standaardwaarde
- Gezet via
- Special:Preferences
&uselang=zxx
in de URL (zie uselang)&variant=xy
(of$wgVariantArticlePath
) in de URL als het een een variant is van uw gebruikerstaal
- Probleem
- Aangezien interfaceberichten kunnen afkomstig zijn van fallback-talen, maar de taal niet wordt teruggestuurd, is de werkelijke taal van een bericht niet bekend.
Page content taal
MediaWiki-versie: | ≥ 1.18 |
- Standaardwaarde
- $wgLang op speciale pagina's.
- Engels voor CSS- en JS-pagina's.
- Voor MediaWiki namepsace pagina's hangt de taal af van de subpagina. MediaWiki:Message/ar wordt bijvoorbeeld ingesteld op Arabisch (ar) en MediaWiki:Message is
ContentLanguage
. - Alle andere pagina's zijn standaard
ContentLanguage
.
- Configuratie
- Extensies kunnen alle andere pagina's veranderen via de hook PageContentLanguage . De waarde voor speciale pagina's, CSS, JavaScript en MediaWiki namespace-pagina's kan niet worden overschreven.
- Voorbeelden
- De extensie Translate gebruikt het voor de functie voor het vertalen van pagina's. Zie translatewiki:Project:About/ar als vertaling van translatewiki Project:About. De directionaliteit van de pagina is dus correct ingesteld op van rechts naar links voor Arabisch.
MediaWiki-versie: | ≥ 1.24 |
- Handmatig taal van pagina veranderen
- De selectie van de taal kan sinds MediaWiki 1.24 met behulp van Special:PageLanguage.
- Gebruikers kunnen de inhoudstaal van een pagina veranderen die standaard de standaard Wiki-taal is (
ContentLanguage
). De taal van pagina's in het MediaWiki-namespace kan niet worden gewijzigd. - De functie moet worden ingeschakeld met
$wgPageLanguageUseDB = true
en het rechtpagelang
moet worden verleend aan een wiki-gebruikersrechtengroep (die vervolgens deze taalwijzigingen kan uitvoeren). - Het veranderen van de taal van de pagina zorgt ervoor dat de bronvertalingspagina en de eenheden ervan naar de juiste doeltaal worden verplaatst. Als de doeltaalvertalingspagina al bestaat, is de taalwijziging niet toegestaan.
- Matching API kan worden gevonden op API:SetPageLanguage .
- Wat definieert het?
- In SkinTemplate voegt het een
<div lang="xyz" dir="ltr/rtl" class="mw-content-ltr/rtl"></div>
toe rond de paginatekst. Het attribuut dir stelt de juiste schrijfrichting in. Het attribuut lang zal altijd de root-code zijn, bijvoorbeeld "de", zelfs als "de-formal" wordt opgegeven.- Voor bestandspagina's is het ingesteld in ImagePage.php, omdat er veel HTML is in de gebruikerstaal.
- In Parser.php wordt de inhoudstabel (TOC) geteld, en dingen als grammatica, hoewel het meestal niet echt relevant is. Om dat alleen te doen, gebruik parserOpties->setTargetLanguage ().
- De richting van de diff-text (DifferenceEngine) is ingesteld op de pagina-inhoudtaal. In sommige gevallen is dit niet identiek, in welk geval $diffEngineObject->setTextLanguage ($code) kan worden gebruikt.
- Sinds 1.19 stelt het ook de tijd- en getalopmaak magische woorden in, inclusief DIRECTIONMARK, maar niet NAMESPACE(E), omdat dat echt afhangt van de taal van de site. Houd er rekening mee dat het opnemen van een sjabloon die is gemarkeerd als taal A op een pagina met taal B, wordt verwerkt met taal B op die pagina.
- In SkinTemplate voegt het een
- Meerdere talen op één pagina
- Meerdere talen op een enkele pagina worden in theorie niet ondersteund, maar eenvoudige tags
<div lang="xyz" dir="ltr/rtl" class="mw-content-ltr/rtl">
kunnen worden gebruikt om tekst te markeren als geschreven in een andere taal. Als de CSS-class wordt gebruikt, zullen de ul/ol-lijsten en de editsection mooi worden weergegeven wanneer de tag dir tegengesteld is aan de waarde van die van de taal van de pagina-inhoud. Dingen die in de parser zijn gedefinieerd, zoals inhoudsopgave en magische woorden, veranderen echter niet.
- Bekijken/ophalen van de taal van de pagina
- JavaScript:
mw.config.get( 'wgPageContentLanguage' )
- merk op dat, wanneer bijvoorbeeld de paginageschiedenis wordt bekeken, het de paginataal van de pagina waarvan het de geschiedenis is, retourneert, terwijl de geschiedenispagina geen mw-content-ltr/rtl-klasse heeft. D.w.z. zowel "/wiki/Page" als "/w/index.php?title=Page&action=history" zullen de taal van "Page" retourneren. 1.19+ - De pagina-inhoudtaal wordt vermeld in de pagina-informatieweergave (
action=info
, genoemd bij de Hulpmiddelen) 1.21+ - De taal van de pagina-inhoud kan worden opgehaald in de API via api.php?action=query&prop=info 1.22+
Code structuur
Eerst heeft u in Language.php een object Language. Dit object bevat alle lokaliseerbare berichtteksten, evenals andere belangrijke taalspecifieke instellingen en aangepast gedrag (hoofdletters, kleine letters, afdrukdatums, opmaakgetallen, richting, aangepaste grammaticaregels etc.).
Het object wordt opgebouwd uit twee bronnen: subklasse versies van zichzelf (classes) en Message-bestanden (messages).
Er is ook de class MessageCache, die tekst input behandelt via de namespace MediaWiki.
De meeste internationalisatie wordt tegenwoordig gedaan via Handleiding:Messages API objecten en door de functie wfMessage()
te gebruiken, die in includes/GlobalFunctions.php
wordt gedefinieerd.
Legacy code kan nog steeds de oude functies wfMsg*()
gebruiken, die nu als verouderd worden beschouwd ten gunste van de bovengenoemde objecten Messages.
Zie ook Handleiding:Messages API .
Language objecten
Er zijn twee manieren om een object language te krijgen.
U kunt de globals $wgLang en ContentLanguage
service (MediaWiki\MediaWikiServices::getContentLanguage
) gebruiken voor respectievelijk de gebruikersinterface en de inhoudstaal.
Voor een willekeurige taal kunt u een object bouwen met $languageFactory->getLanguage( 'en' )
door en
te vervangen door de taalcode.
U kunt met Dependency Injection $languageFactory
krijgen, een object van de class MediaWiki\Languages\LanguageFactory
.
U kunt ook wfGetLangObj( $code );
gebruiken als $code
al een object language zou kunnen zijn.
De codelijst staat in includes/languages/data/Names.php
.
Language objecten zijn nodig voor het uitvoeren van taal-specifieke functies, meestal om nummer, tijd en datum opmaak, maar ook om lijsten en andere dingen op te bouwen. Er zijn meerdere lagen van caching en samenvoegen met #Fallback talen, maar de details zijn niet relevant bij normaal gebruik.
Oud lokaal vertaalsysteem
Met MediaWiki 1.3.0 werd een nieuw systeem ingesteld voor het lokaliseren van MediaWiki.
In plaats van het taalbestand te bewerken en ontwikkelaars te vragen de wijziging toe te passen, konden gebruikers de interface-strings rechtstreeks van hun wiki's bewerken.
Dit is het systeem dat sinds augustus 2005 in gebruik is.
Mensen kunnen het bericht dat ze willen vertalen in Special:AllMessages vinden en vervolgens de relevante tekst in de namespace MediaWiki:
bewerken.
Zodra deze wijzigingen zijn opgeslagen, zijn ze in productie.
Er was nu geen behoefte meer om een update te vragen, en te wachten tot de ontwikkelaars het bestand controleerden en bijwerkten.
Het systeem is geweldig voor Wikipedia-projecten; een bijwerking is echter dat de MediaWiki-taalbestanden die met de software worden verzonden niet meer helemaal up-to-date zijn, en het is moeilijker voor ontwikkelaars om de bestanden op meta gelijk te houden met de echte taalbestanden.
Omdat de standaardtaalbestanden niet voldoende vertaald materiaal bevatten, worden we geconfronteerd met twee problemen:
- Nieuwe Wikimedia-projecten die zijn gemaakt in een taal die al lang niet is bijgewerkt, hebben een geheel nieuwe vertaling van de interface nodig.
- Andere gebruikers van MediaWiki (inclusief Wikimedia-projecten in dezelfde taal) hebben nog geen vertaalde interfaces. Dit is vooral ongelukkig voor de kleinere talen die niet veel vertalers hebben.
Dit is niet meer zo'n groot probleem, omdat translatewiki.net prominent wordt geadverteerd en wordt gebruikt voor bijna alle vertalingen. Lokale vertalingen gebeuren soms nog, maar ze worden sterk ontmoedigd. Lokale berichten moeten meestal worden verwijderd, waardoor de relevante vertalingen naar translatewiki.net worden verplaatst en alleen de site-specifieke aanpassing op de wiki wordt achtergelaten; er is een enorme achterstand, vooral in oudere projecten, dit hulpmiddel helpt bij het opruimen.
Berichten gecentraliseerd en gesynchroniseerd houden
Engelse berichten lopen zelden niet synchroon met de code. Onze ervaring toont aan dat het comfortabel is om alle Engelse berichten op dezelfde plaats te hebben. Het herzien van de Engelse tekst kan zonder verwijzing naar de code worden gedaan, net als bij het vertalen. Programmeurs maken soms een slechte keuze voor een standaardtekst.
Wat kan er worden vertaald
Er zijn zoveel dingen lokaliseerbaar op MediaWiki dat ze niet allemaal direct beschikbaar zijn op translatewiki.net : zie translatewiki MediaWiki vertalen. Als iets ontwikkelaar interventie op de code vereist, kunt u het aanvragen op Phabricator, of vragen op translatewiki:Support als u niet precies weet wat u moet doen.
- Namespaces - zowel core en extensies, maar ook gender-afhankelijke gebruiker namespaces
- Weekdagen (en afkortingen)
- Maanden (en afkortingen)
- Bookstores voor Special:BookSources
- Skin namen
- Math namen
- Datumvoorkeuren -
$datePreferences
- Datumformaten -
$dateFormats
- Formaat van standaarddatum -
$defaultDateFormat
- Datumvoorkeur migratie-map - voor compatibiliteit met oude MediaWiki-databases
- De standaard gebruikersoptie wordt genegeerd
- Taalnamen
- Landnamen (via Extension:CLDR )
- Valuta namen (via Extension:CLDR )
- Tijdzones
- Karakter encoding conversie via
iconv
- UpperLowerCase eerst (behoeft voor sommige casemaps)[verduidelijking nodig]
- UpperLowerCase[verduidelijking nodig]
- Uppercase woorden
- Uppercase woordafbrekingen[verduidelijking nodig]
- Case folding[verduidelijking nodig]
- Strip interpunctie bij MySQL zoeken (zoekoptimalisatie)
- Eerste karakter pakken
- Alternieve encoding
- Hercoderen voor bewerken (en vervolgens invoer opnieuw coderen)[verduidelijking nodig]
- Fallback-talen (d.w.z. andere, meer verwante talen die moeten worden gebruikt wanneer een vertaling niet beschikbaar is, in plaats van de standaardtaal voor terugval, namelijk Engels)
- Richting (links naar rechts of rechts naar links, RTL)
- Teken voor richtingsmarkering afhankelijk van RTL
- Pijl afhankelijk van RTL
- Talen waarin geen cursief kan worden gebruikt
- Getalnotatie (komma-ificeren, d.w.z. al dan niet cijferscheidingstekens toevoegen; cijfers transformeren; scheidingstekens transformeren)[3]
- Afkappen (multibyte)
- Grammatische conversies voor verbogen talen
- Meervoudsvormen
- Opmaak van vervaltijden[verduidelijking nodig]
- Segmentatie voor verschillen (Chinese)
- Omzetten naar taalvarianten (tussen verschillende spellingen of scripts)
- Taalspecifieke opties bij gebruikersvoorkeuren
- Link achtervoegsels en link voorvoegsel -
$linkTrail
. Dit zijn letters die na/voor de haakjes sluiten/openen van een wiki-link kunnen worden geplakt, maar op het scherm lijken alsof ze deel uitmaken van de link (dat wil zeggen, klikbaar en in dezelfde kleur), bijv.:[[foo]]bar
. De linktrail is standaard "a-z"; u kunt de geaccentueerde of niet-Latijnse letters die door uw taal worden gebruikt, toevoegen aan de lijst. - Taalcode (bij voorkeur gebruikt volgens de nieuwste RFC in standaard BCP 47, nu RFC 5646, met de bijbehorende IANA-database. Vermijd verouderde en codes voor privé-gebruik: kijk naar wat ze in ISO 639 betekenen en vermijd codes die zijn toegewezen aan verzamelingen/taalfamilies in ISO 639-5, en ISO 639 codes die niet zijn ingevoerd in de IANA-databank voor BCP 47)
- Soort van nadruk leggen
- De extensie Cite/nl heeft een speciaal paginabestand per taal,
cite_text-zyx
voor taalcodezyx
.
Nette functionaliteit:
- I18N
sprintfDate
- Opmaak van Romeinse cijfers
Namespaces
Het maken van vertalingen van namspaces is nu uitgeschakeld op translatewiki.net, dus u moet dit zelf doen in Gerrit, of een taak Phabricator indienen om iemand anders te vragen dat te doen.[4]
Om aangepaste namespaces die door uw extensie worden geïntroduceerd te laten vertalen, maak een bestand MyExtension.i18n.namespaces.php
dat er zo uitziet:
<?php
/**
* Vertalingen van namespaces die door MyExtension zijn toegevoegd.
*
* @file
*/
$namespaceNames = [];
// Voor wiki's waar de extensie MyExtension niet is geïnstalleerd.
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',
];
Laad het dan van het bestand extension.json
met gebruik van ExtensionMessagesFiles:
{
"name": "MyExtension",
"version": "0.0.1",
"descriptionmsg": "myextension-desc",
"ExtensionMessagesFiles": {
"MyExtensionNamespaces": "MyExtension.i18n.namespaces.php"
}
}
Wanneer een gebruiker MyExtension op zijn Finse (fi) wiki installeert, wordt de aangepaste namespace magisch vertaald in de Finse, de gebruiker hoeft niets te doen!
Vergeet niet om de namespace(s) van uw extensie op pagina extension default namespaces te registreren.
Speciale pagina aliassen
Zie de handleiding voor Speciale pagina's voor actuele informatie. Het volgende lijkt niet geldig.
Maak in dit formaat een nieuw bestand aan voor de speciale pagina aliassen:
<?php
/**
* Aliases for the MyExtension extension.
*
* @file
* @ingroup Extensions
*/
$aliases = [];
/** English */
$aliases['en'] = [
'MyExtension' => [ 'MyExtension' ]
];
/** Finnish (Suomi) */
$aliases['fi'] = [
'MyExtension' => [ 'Lisäosani' ]
];
Laad het dan van het bestand extension.json
met gebruik van ExtensionMessagesFiles:
{
"name": "MyExtension",
"version": "0.0.1",
"descriptionmsg": "myextension-desc",
"ExtensionMessagesFiles": {
"MyExtensionAlias": "MyExtension.i18n.alias.php"
}
}
Wanneer uw speciale pagina code SpecialPage::getTitleFor( 'MyExtension' )
of $this->getTitle()
gebruikt (in de class met Special:MyExtension) wordt de gelokaliseerde alias gebruikt, indien beschikbaar.
Namespace naam aliassen
Namespace naam aliassen zijn aanvullende namen die kunnen worden gebruikt om bestaande namespaces te benaderen. Ze zijn zelden nodig, maar het niet hebben van ze wanneer ze er zijn, creëert meestal een puinhoop in bestaande wiki's.
U heeft een namenspace alias nodig:
- Als een taal varianten heeft en deze varianten sommige namespaces anders spellen, en u wilt dat bewerkers de varianten kunnen gebruiken. De varianten zijn te selecteren in de gebruikersvoorkeuren. Gebruikers zien altijd hun geselecteerde variant, behalve in wikitext, maar bij het bewerken of zoeken kan een willekeurige variant worden gebruikt.
- Wanneer de taal, de terugvaltaal of de lokalisatie van een bestaande wiki wordt gewijzigd, worden ook enkele namen van namespaces gewijzigd. Om de links die al in de wiki zijn, die de oude namespace gebruiken, niet te breken, moet u elk van de gewijzigde eerdere namespaces toevoegen aan de namespaces van de aliassen, wanneer, of voordat, de verandering wordt gedaan.
De algemene Engelse namen voor namespaces zijn altijd aanwezig als namespace in alle lokalisaties, dus u hoeft die niet toe te voegen.
Aliassen kunnen niet worden vertaald op Translatewiki.net/nl , maar kunnen daar of op bugzilla worden aangevraagd: zie Namespace name aliassen.
Regionale instellingen
Sommige taalkundige instellingen verschillen per regio; MediaWiki heeft geen concept van regio, het heeft alleen talen en taalvarianten.
Deze instellingen moeten eenmaal worden ingesteld als standaard van een taal, daarna kunnen individuele wiki's ze veranderen zoals ze willen in hun configuratie.
Tijd en datumformaten
Tijd en datum worden op speciale pagina's en op soortgelijke wijze getoond. De standaard tijd- en datumformaten worden gebruikt voor handtekeningen, dus het moet het meest gebruikte en meest begrepen formaat zijn voor gebruikers van die taal. Ook anonieme gebruikers krijgen het standaardformaat. Geregistreerde gebruikers kunnen in hun voorkeuren andere formaten kiezen.
Als u bekend bent met het time()-formaat van PHP, kunt u zelf proberen om formaten te maken. MediaWiki gebruikt een soortgelijke string, met enkele extra functies. Als u niet zo met PHP bekend bent, is dat geen probleem. U kunt een lijst met voorbeelden aan Developers/nl geven.
Opmerkingen
- ↑ Zie includes/languages/data/Names.php/
- ↑ Ondanks dit is de validatie van taalcodes in 2012 een nog niet opgelost probleem. Zie Niklas Laxström, Validatie taalcode in MediaWiki, 28 augustus 2012.
- ↑
Deze worden volgens per taal in de respectieve bestanden
language/classes/LanguageXx.php
oflanguage/messages/MessagesXx.php
geconfigureerd. - ↑ https://gerrit.wikimedia.org/r/211677
Zie ook
- Meertalige MediaWiki
- Het verkrijgen van taalnamen uit codes is mogelijk met behulp van de functie {{#language:<code>}} gedocumenteerd in magische woorden