Jump to content

Help:Extension:Translate/Components/nl

From mediawiki.org
This page is a translated version of the page Help:Extension:Translate/Components and the translation is 100% complete.

De extensie Translate is op vele manieren uitbreidbaar. De meest waarschijnlijke manier is door ondersteuning toe te voegen voor nieuwe bestandsformaten (link naar sectie) of nieuwe berichtengroepen (link naar sectie). Soms is het ook handig om een nieuw bericht te schrijven (link naar sectie) of om Translate via haakjes (link naar sectie) uit te breiden. Soms kunt u alleen maar verder komen door de bestaande web API te gebruiken.

Naast de al genoemde concepten zijn er veel belangrijkere concepten en classec in Translate die nuttig zijn om te begrijpen bij het hacken van Translate. Deze pagina is bedoeld om alle onderdelen van Translate volledig te beschrijven.

Primaire uitbreidbare componenten

WebAPI

  • Gedetailleerde documentatie over API

Naast hooks en interfaces die alleen kunnen worden gebruikt vanuit PHP-code, biedt de WebAPI toegang tot vele berichtengroepen en het vertalen van gerelateerde informatie en acties. Het is gebaseerd op het MediaWiki API framework, met ondersteuning voor veel uitvoerformaten zoals json en xml.

Ondersteuning van bestandsformaten (FFS)

De extensie Translate ondersteunt het vertalen van niet-wiki-inhoud, zoals software-interfaceberichten via File Format Support (FFS) classes. Deze classec implementeren de FFS-interface en het analyseren en genereren van bestandsinhoud. De FFS-classes worden gebruikt door class FileBasedMessageGroup via de YAML-configuratiebestanden.

Berichtengroepen

Berichtengroepen zijn verzamelingen van berichten. Ze zijn er in verschillende types: vertaalbare pagina's, SVG-bestanden of software-interfaceberichten die in verschillende bestandsformaten worden opgeslagen. Elke berichtengroep heeft een unieke identificatie, naam en beschrijving. In de code wordt naar berichtgroepen voornamelijk verwezen door hun identificatie, terwijl de klasse MessageGroups kan worden gebruikt om de instanties voor een bepaalde ID op te halen. Berichtengroepen kunnen ook veel vertalingsprocesgerelateerde acties controleren, zoals toegestane talen bij het vertalen en de workflow van de berichtengroep. Meestal vallen deze gedragingen terug naar de globale standaarden.

The two primary ways to register message groups to Translate are the TranslatePostInitGroups hook and YAML configuration .

Vertaalhulpen (helpers)

Vertaalhulpprogramma's zijn kleine modules die de vertaler bij het vertalen van de tekst nuttige en noodzakelijke informatie verstrekken. Verschillende hulpmiddelen kunnen suggesties geven uit het vertaalgeheugen en door machinevertaling, uit documentatie over het bericht of zelfs zo'n fundamenteel iets als de berichtdefinitie - de tekst die moet worden vertaald.

Translate bevat veel hulpclasses. Er is nu geen hook om nieuwe classes toe te voegen. Elke klasse die de klasse TranslationAid uitbreidt, hoeft slechts één methode te implementeren, met de naam getData. Het moet de informatie in gestructureerd formaat (geneste arrays) terugsturen, die vervolgens via Web API-module ApiQueryTranslationAids wordt doorgegeven. Naast de helpclass zijn wijzigingen nodig om de verstrekte gegevens daadwerkelijk te gebruiken in de vertaaleditor(en).

Een bijzondere toepassing van deze hulpprogramma's zijn machinevertalingsdiensten. Zie de volgende sectie.

Webservices

Adding more machine translation services can easily be done by extending the TranslationWebService class. Zie de map webservices voor voorbeelden. U heeft wat basisinformatie nodig om een dergelijke class te implementeren:

  • URL voor de service
  • Welke taalparen worden er ondersteund
  • Of ze taalcodes gebruiken die verschillen van de codes die in MediaWiki worden gebruikt
  • Of de service een API-key nodig heeft

When you have this information, it is straightforward to write the mapCode, doPairs and doRequest methods. You should use the TranslationWebServiceException to signal errors. De fouten worden automatisch gelogd en bijgehouden en als de service uitvalt, wordt deze automatisch opgeschort om onnodige verzoeken te voorkomen. The suggestions will automatically be displayed in the translation editor via the MachineTranslationAid class and the ApiQueryTranslationAids WebAPI module. Zie ook $wgTranslateTranslationServices om te zien hoe deze services worden geregistreerd.

Bericht controleurs

We gebruiken computers om eenvoudige fouten te vinden in vertalingen, zoals een ongelijk aantal haakjes of het niet gebruiken van een variabele placeholder. Deze 'checkers' kunnen waarschuwingen tonen die worden weergegeven in de vertalingseditor (dit wordt steeds bijgewerkt). Door een waarschuwing over de opgeslagen vertaling zal de vertaling als verouderd (jargonː fuzzy) worden gemarkeerd. Elke berichtengroep bepaalt welke controles het gebruikt.

Andere componenten in de core

Berichten verzameling

Het verzamelen van berichten geeft toegang tot de lijst met berichten van een berichtengroep. Het wordt gebruikt om een reeks talen voor een bepaalde groep in een bepaalde taal te laden. Het biedt pagina- en filteringfunctionaliteit.

Er is nu een beperking dat alle berichten in een verzameling in dezelfde naamruimte moeten zijn. Dit voorkomt het creëren van aggregeerde groepen die groepen omvatten die berichten in verschillende namenruimten hebben.

Hier is een kort voorbeeld van hoe u met behulp van de berichtenverzameling alle Finse vertalingen van de groep "core" kunt laden en de eerste tien ervan kunt afdrukken:

$group = MessageGroups::getGroup( 'core' );
$collection = $group->initCollection( 'fi' );
$collection->filter( 'ignored' );
$collection->filter( 'translated', false );
$collection->loadTranslations();
$collection->slice( 0, 10 );
foreach ( $collection->keys() as $mkey => $title ) {
	echo $title->getPrefixedText() . ': ';
	echo $collection[$mkey]->translation() . "\n\n";
}

Bericht

Utility classes

Lettertype zoeker

Bij het renderen van bitmapgrafieken zijn er geschikte lettertypen nodig voor elke taal of script. Om dit probleem op te lossen, is de klasse FCFontFinder geschreven. Het gebruikt het commando fc-match van het package fontconfig (dus dit werkt niet op Windows) om een geschikt lettertype te vinden. Er moeten veel aanvullende lettertypen op de server worden geïnstalleerd om dit nuttig te maken. Het kan een pad naar een lettertypebestand of de naam van het lettertype geven, afhankelijk van wat het geschiktst is.

Berichtengroep cache

De berichten van de op bestanden gebaseerde berichtengroepen worden opgeslagen in CDB-bestanden. Elke taal van elke groep heeft zijn eigen CDB cache-bestand. De reden voor cache-bestanden is tweeledig.

Ten eerste bieden ze een constante en efficiënte toegang tot berichtgegevens, waardoor het potentieel dure analyseren van bestanden op verschillende plaatsen wordt vermeden. De lijst met berichtsleutels voor elke groep kan bijvoorbeeld efficiënt worden geladen bij het herbouwen van een berichtenindex.

De tweede reden is dat de cache-bestanden samen met de vertalingen in de wiki worden gebruikt om externe berichtwijzigingen te verwerken. Met een snapshot van de status van vertalingen in bestanden en wiki's (hopelijk op dat moment consistent) kunnen we automatisch zien of er iets in de wiki of extern is veranderd en intelligente keuzes maken, waarbij alleen echte conflicten (boodschappen die zowel extern als op de wiki zijn veranderd sinds de laatste snapshot) door de vertalingsbeheerder worden opgelost.

Berichtengroep utilities

Berichten index

Een berichtindex is een omgekeerde kaart van alle bekende berichten. Het geeft een efficiënt antwoord op de vragen is dit een bekend bericht en tot welke groepen behoort dit bericht. Het moet snel zijn voor het opzoeken van enkele en meerdere berichten. Er worden verschillende back-ends geïmplementeerd, met verschillende afwegingen.

  • Geserialiseerde bestanden zijn snel te parsen, maar bieden geen willekeurige toegang en zijn erg geheugeninefficiënt wanneer het aantal keys toeneemt.
  • Een CDB-bestand neemt meer schijfruimte in beslag, maar biedt willekeurige toegang en redelijk snelle lookups, terwijl het laden van alles in het geheugen langzamer gaat.
  • Database-backend biedt efficiënte willekeurige toegang en volledige belasting met de kosten van kleine, langzamere individuele lookups. Het hoeft ook niet naar bestanden te schrijven, waardoor er geen toestemmingsproblemen ontstaan.
  • Er is ook een geheugenbackend (memcached, apc) beschikbaar, wat een nuttig alternatief kan zijn voor de database-backend in meerdere serveropstellingen om databaseconflicten te verminderen.

De berichtindex ondersteunt geen incrementele heropbouw. De heropbouw van de index wordt dus een relatief intensief proces wanneer het aantal berichtengroepen en bericht-keys toeneemt. Afhankelijk van de berichtengroep kan dit het parsen van bestanden of het doen van queries en het laden van de definities, dat kan veel geheugen kosten. De heropbouw van de berichtenindex wordt op verschillende plaatsen in Translate geactiveerd en wordt standaard onmiddellijk uitgevoerd na het verzoek. Als het langzamer wordt, kan het worden vertraagd via de MediaWiki-wachtrij en worden uitgevoerd buiten de webverzoeken.

Berichten tabel

Metadata tabel

Revtag

Stats code

String matcher/mangler

Ttmserver (vertaalgeheugen)

Ttmserver is de naam van de vertaalgeheugeninterface. Het ondersteunt meerdere backends voor het invoeren en het queries stellen van vertaalsuggesties. De code staat in de map ttmserver.

Overige zaken: RC integratie, voorkeuren, hulpmiddelenveld, jobs

Repository lay-out

De bestanden in de root van de repository zijn o.a.:

  • Standaard MediaWiki extensie bestanden zoals Translate.php, vertalingen en sommige documentatie bestanden zoals hooks.txt en README die aantekeningen over wijzigingen bevatten.
  • De belangrijkste classes van Translate zoals MessageCollection en Message en sommige overige utilities die nog niet onder utils zijn geplaatst.

De rest van de code zit in submappen. De belangrijkste delen hebben elk hun eigen submappen:

  • api - voor WebAPI-code
  • ffs - voor bestandsformaatcode
  • messagegroups - voor berichtengroepen
  • scripts - voor commando-regel scripts
  • tag - voor pagina-vertaalcode
  • ttmserver - voor vertalingsgeheugencode
  • specials - voor alle speciale pagina's
  • tests - voor alle PHP-unit-tests

Het grootste deel van de code is onder 'utils'. Een paar extra mappen voor niet-code:

  • data - voor verschillende gegevensbestanden
  • libs - voor gebundelde bibliotheeksafhankelijkheden
  • resources - voor alle css, scripts en afbeeldingen
  • sql - voor alle definities van SQL-tabellen