Help:Extension:Translate/Components/nl

From Linux Web Expert

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 the code message groups are primarily referenced by their identifier, while the MessageGroups class can be used to get the instances for a given id. 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. Each class that extends the TranslationAid class only needs to implement one method called getData. It should return the information in structured format (nested arrays), which is then exposed via ApiQueryTranslationAids WebAPI module. 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. See also $wgTranslateTranslationServices to see how those services are registered.

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. To solve this problem, the FCFontFinder class was written. It uses the fc-match command of the package fontconfig (so this doesn't work on Windows) to find a suitable font. 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. It provides efficient answer to the questions is this a known message and what groups does this message belong to. Het moet snel zijn voor het opzoeken van enkele en meerdere berichten. Er worden verschillende back-ends geïmplementeerd, met verschillende afwegingen.

  • Serialized file is fast to parse, but don't provide random access and is very memory inefficient when the number of keys grow.
  • CDB file takes more disk space, but provides random access and reasonably fast lookups, while loading everything into memory is slower.
  • Database backend provides efficient random access and full load with the expense of little slower individual lookups. It also doesn't need to write to any files avoiding any permission problems.
  • Also memory backend (memcached, apc) is provided, which could be useful alternatives to database backend in multiple server setups to reduce database contention.

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 the name of translation memory interface. It supports multiple backends for inserting and querying translation suggestions. The code is located under ttmserver directory.

Overige zaken: RC integratie, voorkeuren, hulpmiddelenveld, jobs

Repository lay-out

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

  • Standard MediaWiki extensions files like Translate.php, translations and some documentation files like hooks.txt and README which includes change notes.
  • Major translate classes like MessageCollection and Message and some misc utilities not yet moved under utils.

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