Help:Extension:Translate/File format support/nl

From Linux Web Expert

Revision as of 13:40, 1 November 2023 by imported>HanV (Created page with "U kunt bestaande testroutines, zoals JavaFFSTest, als voorbeelden gebruiken.")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

FFS staat voor bestandsformaatondersteuning. Dit is de algemene naam voor een groep classes voor het lezen en schrijven van vertaalde berichten in verschillende bestandsformaten in de extensie Translate.

Softwareontwikkelaars hebben het wiel vaak opnieuw uitgevonden met lokalisatietechnologieën, dus er zijn veel verschillende formaten voor het opslaan van vertaalbare softwareberichten. Er zijn twee hoofdgroepen van dergelijke formaten.

  • Sleutelgebaseerde formaten: elk bericht heeft een key, meestal een meer of minder betekenisvolle string. Vertaling naar elke taal is een kaart van keys die naar values wijzen. De meeste formaten vallen onder deze groep, waaronder DTD, JSON en het oude formaat van MediaWiki tot 2014 (in wezen een PHP-array).
  • Gettext-achtige: De boodschap in de oorspronkelijke taal van het programma, meestal Engels, wordt zelf als key gebruikt om naar vertalingen in andere talen te wijzen. Hiervoor is het noodzakelijk om niet-stabiele pseudo-keys te genereren om de berichten in een ander formaat te bewaren.

Inleiding tot de FFS-classes

Met enkele uitzonderingen erven de meeste FFS-classes van de FFS-interface, die de basismethoden definieert die elke class moet implementeren:

setWritePath( $target )
Instellen van de bestandsnaam. (set)
getWritePath()
Ophalen van de bestandsnaam. (get)
read( $code )
Lees de berichten uit het bestand en analyseer ze.
readFromVariable( $data )
Lees de berichten van een stringvariabele met hetzelfde formaat als het bestand en stuur ze terug als een array van AUTHORS en MESSAGES. Hier moet de tekst van het bestand worden geanalyseerd.
write( MessageCollection $collection )
Schrijf de berichten in het bestand.
writeIntoVariable( MessageCollection $collection )
Schrijf de berichten naar een stringvariabele met hetzelfde formaat als het bestand. Hier moet de zorgvuldige constructie van het resulterende berichtenbestand gebeuren.

MediaWiki vertalingen

Classes voor het opslaan van MediaWiki-vertalingen worden nu niet behandeld door FFS-interface-derivaten, maar door autonome classec: er zijn configuratie-instructies. Er worden nieuwe classes ontwikkeld die vergelijkbaar zijn met FFS.

class SimpleFFS

De class SimpleFFS is de ancestor van alle andere FFS-classes en is ook een eenvoudig voorbeeld van hoe een FFS-class geschreven moet worden. Het implementeert een simplistisch key-gebaseerd formaat:

  • elk bestand heeft twee secties, gescheiden door "\0\0\0\0";
  • in een sectie zijn de namen van de vertalers gescheiden met "\0";
  • de andere heeft de vertalingen in "key=value" formaat, ook gescheiden door "\0".

Omdat SimpleFFS opzettelijk simplistisch is, kan het mogelijk bugs en complicaties bevatten. Het teken "=" wordt bijvoorbeeld niet afgevangen, dus de key en de value kunnen ze niet bevatten. Dit is duidelijk niet iets wat geschikt is voor echte programma's. SimpleFFS implementeert ook nuttige gebruiksmethoden:

exists( $code )
Testen of het bestand bestaat.
writeReal( $collection )
Implementeren interne elementen van het schrijven in bestandsformaat, naast de meer algemene writeIntoVariable.
filterAuthors
Filter een aantal gedefinieerde auteurs uit het bestand volgens een aangepaste zwarte lijst. Dit is bijvoorbeeld handig voor het filteren van gebruikersnamen van bots, ontwikkelaars en vertaalbeheerders.
fixNewLines( $data )
Verbeter alle regeleinden op Unix-stijl.

Nieuwe FFS-classes schrijven

Alle bovenstaande SimpleFFS-methoden kunnen worden overschreven. De meeste implementaties hoeven echter alleen writeIntoVariable en readFromVariable te implementeren.

Algemene tips bij het schrijven van nieuwe classes:

  • Vermijd het uitvoeren van uitvoerbare bestandsformaten. Analyseer ze.
  • Onthoud om berichten-keys te 'escapen' en te 'de-escapen'.
  • Veronderstel niet dat de keys geen problematische karakters bevatten. Die kunnen ze wel bevatten.
  • De output wordt meestal verwacht mooi en leesbaar te zijn. Sommigen doen ook handmatig nog wat aanpassingen.
  • De meeste formaten ondersteunen geen fuzzy markers, sommige voegen ze allen toe als opmerkingen bij het exporteren en negeren ze bij het importeren.

Ondersteunde bestandsformaten

De bestaande FFS-classes zijn:

  • AndroidXml - voor gebruik in Android-apps
  • AppleFFS - voor iOS/Mac OS X Localizable.strings
  • Dtd - voor DTD-gebaseerde projecten, zoals Okawix en Mozilla.
  • FlatPhpFFS - voor toekomstig gebruik in MediaWiki
  • Gettext - voor op Gettext gebaseerde projecten
  • Ini - voor projecten op basis van INI
  • JavaScript - voor alle JavaScript-geformatteerde bestanden
  • Java-eigenschappen - voor *.properties bestanden, gebruikt in sommige Java- en JavaScript-projecten, vaak samen met Dtd
  • Json - gebruikt in jquery.i18n-gebaseerde projecten, zoals de draagbare Universal Language Selector bibliotheek
  • Yaml - gebruikt in Waymarked Trails
  • Ruby (Yaml) - gebruikt in OpenStreetMap en Shapado
  • AMD i18n bundel

Voorbeelden van de uitvoer van Translate in deze formaten op translatewiki.net.

File:InterfaceFFS inherit graph.png
Hiërarchie van FFS-classes

Bewerk de berichten-keys (mangle) om de correcte titel te garanderen

De extensie Translate is op MediaWiki gebaseerd en elk bericht wordt opgeslagen als een MediaWiki-pagina, dus de key moet een geldige MediaWiki pagina-titel zijn. Mangling zorgt hiervoor door de sleutelnamen te escapen op een manier die vergelijkbaar is met de citaat-afdrukbare codering, maar met enkele wijzigingen voordat het bericht als wiki-pagina wordt opgeslagen. Voordat het bericht terug wordt geschreven, wordt het bericht weer de-escaped.

Wanneer een FFS-class de functies overschrijft die de escape schakeling routines aanroept, moet het ervoor zorgen dat dit escapen heen en weer correct wordt gedaan - dat wil zeggen dat de sleutel is ge-escaped is voordat het naar MediaWiki wordt geschreven en weer ge-de-escaped voordat de vertaling terug wordt geschreven naar het bestand.

Deze omzettingen 'in het Engels mangle/unmangle' wordt gedaan in de class StringMatcher.

FFS-classes testen

Als u een nieuwe FFS-class maakt, maakt u een overeenkomstige testbestand in de test-map. De belangrijkste dingen om te testen zijn:

  • Verwerking van het formaat: Essentieel testen of de functie readFromVariable de juiste keys en values voor AUTHORS en MESSAGES teruggeeft.
  • Rondreis: Test of de keys de berichten correct zijn geschreven en worden gelezen.

U kunt bestaande testroutines, zoals JavaFFSTest, als voorbeelden gebruiken.