Omdat ‘Read more’ best ‘Lees meer’ mag zijn.
Ik heb het in een heel grijs verleden wel eens gehad over het vertalen van plugins. Want niet iedere plugin is ook zomaar in het Nederlands beschikbaar. Nu zal de gemiddelde Nederlander heel goed begrijpen, wat er met ‘Read more…’ bedoeld wordt, maar wanneer we op het terrein van de foutmeldingen komen, dan kunnen Engelse meldingen een stuk meer verwarrend worden.
En soms is er wel een Nederlandse vertaling beschikbaar maar is deze vertaling nogal amateuristisch gedaan of zelfs in enkele gevallen betreft het een machinevertaling.
Kortom soms ben je gewoon niet blij met de beschikbare vertalingen van een plugin en wil je wat anders.
Nu heb ik je in het verleden wel eens verteld over het programma ‘PoEdit’. Een op zich prima programma maar het is nogal omslachtig om mee te werken. Je moet immers een bestand downloaden, vertalen en (naar een mogelijk andere plaats) weer uploaden. En dat niet met WordPress maar met behulp van FTP.
Behoorlijk wat taken dus. En in de jaren dat ik met WordPress gebruikers werk weet ik, dat er heel wat mensen koude rillingen krijgen als ze de letters FTP horen.
Dat moet toch makkelijker kunnen? En ja. Dat kan!
Maar voor ik je ga vertellen hoe het makkelijker kan, vertel ik je graag eerst iets over het onderliggende vertaalsysteem. Want wanneer jij straks serieus met de vertalingen aan de slag gaat, is het goed dat je ook de beperkingen van het systeem kent.
Get GetText systeem en de beperkingen
Het vertaalsysteem van WordPress is helemaal gebaseerd op het zogenaamde ‘GetText’ systeem. Dit is een systeem om teksten binnen een programma te vertalen wat bijna zo oud is als het besturingsysteem waar het voor ontworpen is. Unix. Omdat de meeste webservers van oudsher op Linux, een afgeleide van Unix draaien, lag het nogal voor de hand om het binnen het besturingssysteem aanwezige vertaalsysteem te gebruiken voor het dynamisch vertalen van teksten.
Het voordeel van het systeem is dat het snel is. Het nadeel is, dat het niet geheel perfect is.
Het idee is eigenlijk heel simpel. Je hebt een tekst in één taal en in een tabel zoek je de vertaling erbij. Iets als onderstaande tabel dus:
EN | NL |
---|---|
Yes | Ja |
No | Nee |
This is OK | Dit is in orde |
Press Start to finish | Druk op Start om te beëindigen |
Read more | Lees meer |
Order | … Oeps! Wat bedoel je? |
In het laatste voorbeeld merk je al, wat het zwakke punt van het GetText systeem is. Soms zijn er meerdere vertalingen voor een woord mogelijk. Als die woorden zich binnen hetzelfde betekenisgebied bevinden is dit niet echt een gigantisch probleem, maar wanneer het totaal ongerelateerde woorden zijn, wat dan. Voor ‘order’ kan ik immers een aantal vertalingen bedenken en het zou mij niet verbazen als jij er nog een paar kent.
- Bestelling
- Bevel
- Volgorde
- Orde
- Sorteren
- Sortering
Dit is een probleem waar je overigens heel vaak mee te maken hebt. Dit omdat in het Engels zelfstandige naamwoorden vaak gelijk zijn aan een bijbehorend werkwoord. Dit is in het Nederlands zelden het geval.
Het tekstdomein
Eigenlijk is Engels een afschuwelijke taal om als brontaal voor een vertaling te nemen, omdat de Engelse taal minder afzonderlijke woorden heeft, dan de meeste andere Europese talen. Helaas moeten we het er mee doen. Om een beetje aan het probleem tegemoet te komen, is er in het GetText systeem een ’tekstdomein’ bedacht. Een context waarin het woord gebruikt wordt.
Om dit ’tekst domein’ uit te leggen, zal ik je eerst laten zien hoe nu eigenlijk zo’n stukje programmacode met een vertaalbare tekst eruit ziet :
echo __('This is text','mydomain');
Wat hier eigenlijk gezegd wordt is ‘Laat de tekst ‘This is text’ zien, maar voor je hem laat zien, geef deze tekst door aan een functie die ‘underscore underscore’ (de vertaalfunctie) heet. En vertel die functie, dat deze tekst tot het domein ‘mydomain’ behoort.
Op deze manier kan ik natuurlijk makkelijk een onderscheid maken.
echo __('Order','military');
echo __('Order','ecommerce');
Op deze manier kan het dus niet meer fout gaan toch?
Fout!
Het GetText wordt verkeerd gebruikt!
Laten we het eerst over één ding eens worden. Het GetText systeem voorziet in alle situaties. Niets mis met het systeem. Het systeem wordt echter compleet verkeerd gebruikt door de programmeurs die er mee werken. En dat begint al bij de instructies die WordPress zelf geeft voor de ontwikkelaars :
It’s important to use a text domain to denote all text belonging to that plugin. The text domain is a unique identifier, which makes sure WordPress can distinguish between all loaded translations.
Ofwel, de schrijvers van de manual associëren een tekstdomein met een specifieke plugin of een specifiek thema. Maar binnen eenzelfde plugin kunnen nog steeds dubbele woorden voorkomen. Het ene moment is een ‘order’ immers een bestelling, op het andere moment kan het de volgorde van presentatie zijn. En er zijn maar weinig plugin makers die hier rekening mee houden.
Een goede vertaling blijft dus een uitdaging, hoewel het je -vanwege een vertaling per plugin- wel iets makkelijker is gemaakt.
Onvertaalbare plugins
Zoals je zelf ongetwijfeld uit dit verhaal ook hebt begrepen, is de mate waarin een plugin ook daadwerkelijk vertaalbaar is afhankelijk van de discipline van de programmeur. Een programmeur moet namelijk iedere tekst binnen deze vertaalfunctie plaatsen. Om je een voorbeeld te geven, in het Engels merk je het verschil niet tussen een plugin die dit doet :
echo __('Test', 'textdomain');
en een plugin die dit doet :
echo 'Test';
In beide gevallen zal het woordje ‘Test’ verschijnen.
In het laatste geval zal het echter niet vertaald worden in andere talen.
Variabele waarden
Soms wil je in de uitvoer een variabele waarde op kunnen nemen.
“Hallo Wilko, er staan nu 10 berichten op je te wachten”
Dit kan je natuurlijk voorbereiden voor vertaling door de zin in kleine stukjes op te hakken.
“Hallo” + naam + “er staan nu” + aantal + “berichten op je te wachten”
Dat is echter niet alleen onhandig, omdat je zo heel veel fragmenten te vertalen krijgt, maar leidt ook tot moeilijk te vertalen constructies omdat in verschillende talen verschillende woordvolgorden gelden. Om dit makkelijker te maken, worden er parameters aan een tekst toegevoegd.
Hoe deze parameters nu precies werken hoef je als vertaler niet te weten, wat je alleen moet weten, is dat ze bestaan. En kom je ze tegen dien je ze gewoon letterlijk over te nemen.
“Hello %s there are %d messages in your inbox”
Het veranderen van de volgorde
Maar stel nu, dat ik bovenstaande zin -op basis van stijl of grammatica regels in mijn taal zou willen vertalen als
“Er staan nu 10 berichten op je te wachten, Wilko”
Dat gaat niet zomaar lukken. Want de eerste parameter is een naam, de tweede een aantal. Bovendien geeft de %d aan dat het een getal is. Omdat ‘Wilko’ niet als een getal geconverteerd zal worden, zal PHP, de onderliggende programmeertaal hier een 0 van maken. Dus een ‘vertaalpoging’ als
“Er staan nu %s berichten op je te wachten, %d”
wordt
“Er staan nu Wilko berichten op je te wachten, 10”
denk je slim te zijn door de d en s te verwisselen krijg je
“Er staan nu 0 berichten op je te wachten, 10”
Gelukkig is hier ook aan gedacht en is het mogelijk om positionele parameters te gebruiken.
“Hello %1$s there are %2$d messages in your inbox”
Hier levert
“Er staan nu %2$d berichten op je te wachten %1$s”
wel het verwachte en gewenste resultaat op.
Is dit belangrijk? Om te begrijpen wel. Maar wat je werkelijk moet onthouden is, dat wanneer er parameters met cijfers direct achter het % teken in voorkomen, je de volgorde rustig aan kan passen in de zin, staan er geen parameters met cijfers in, dan kan dat niet. Ook moet je nooit iets aan een parameter veranderen, tenzij je precies weet wat je doet.
De vertaal bestanden
Ik heb het in het vroegere artikel over vertaalbestanden al genoemd, maar voor de volledigheid zal ik het nogmaals doen.
Wanneer je een vertaalbestand hebt, ziet het er meestal uit als naampje-nl_NL.po voor de Nederlandse taal. Hierbij is ‘naampje’ de naam van het bestand, meestal correspondeert dit met de naam van de plugin.
De eerste ‘nl’ geeft de code voor de taal aan, de tweede ‘NL’ de specifieke variant die gesproken wordt. dus en_UK is bijvoorbeeld UK-English en nl_BE is de code voor de Vlaamse variant van de Nederlandse taal.
Komt er geen bestand voor de Nederlandse taal voor, dan is er als het goed is een bestand met de naam naampje.pot. Dit is de template file voor de vertalingen. Zonder dit bestand kan je weinig beginnen.
Je zal in een typische folder met vertalingen dus tegen kunnen komen :
- bestandsnaam.pot – Het template bestand
- bestandsnaam-nl_NL.po – Een tekstbestand met de Nederlandse vertaling op een voor mensen leesbare manier
- bestandsnaam-nl_NL.mo – Een tekstbestand met de Nederlandse vertaling op een manier die snel door de computer kan worden gelezen. Als mens wil je hier niet aan beginnen.
Plugin vertalen vs. een meertalige website
Het vertalen van een plugin is wat anders als het meertalig maken van een plugin. Wanneer je 16 vertalingen in je plugin folder hebt staan, wil dat niet zeggen, dat je site ook 16 talen zal tonen. De enige taal die getoond zal worden is de taal waarop je site staat ingesteld.
Wil je jouw plugin meertalig hebben, dan kan dat ook. Maar daar zal je een extra plugin voor moeten installeren. De meest bruikbare plugin hier is WPML, een plugin die ik diverse malen heb besproken in verschillende contexten.
Wanneer je de ‘Multi Language CMS’ versie van de plugin gebruikt dan zal de WPML plugin kijken of er ‘mo’ bestanden bestaan voor een specifieke plugin en deze inladen voor de taal.
Wanneer je WPML gebruikt op je website, dan kan je de rest van de vertaling binnen WPML doen en heb je de plugin die ik hierna bespreek niet nodig.
Loco Translate
De Loco Translate plugin is werkelijk een te gekke plugin voor iemand die de vertaling van een plugin aan wil passen of toe wil voegen, zonder direct met ‘PO’, ‘MO’ of ‘POT’ bestanden te moeten goochelen.
Loco maakt het namelijk mogelijk om direct vanuit WordPress je vertaalbestanden aan te passen of toe te voegen. En alle ‘ingewikkelde’ zaken die hierachter zitten worden netjes door de plugin zelf afgehandeld.
Mijn vader zou hebben gezegd: “Een kind kan de was doen. Maar vertel het niet aan de arbeidsinspectie”.
De eerste paar stappen wijzen zichzelf. Je kan eerst een plugin kiezen en daarna een reeds voorkomende taal selecteren, of een nieuwe taal toevoegen.
Wanneer we dat hebben gedaan komen we op het scherm, waar het daadwerkelijke werk plaats zal vinden.
In het gebied bovenaan kies je de tekst die je wilt vertalen. In het vak links daaronder kan je de oorspronkelijke tekst (gewoonlijk Engels) lezen en daaronder je eigen vertaling opgeven.
Het vak rechts geeft eventuele opmerkingen aan die de maker van het vertaalbestand als notities heeft toegevoegd. Ik heb in mijn leven heel wat vertalingen gedaan, maar ben nog nooit zo’n notitie tegen gekomen.
Helemaal vertalen of alleen de frontend?
Wanneer je zo’n vertaalbestand onvertaald voor je neus ziet staan, is dat best behoorlijk intimiderend. Het goede nieuws is dat -indien je zelf Engels goed begrijpt (en anders zou het vertalen sowieso een fiasco worden) je vaak alleen die teksten hoeft te vertalen, die aan de frontend, dus op de ‘voorkant’ van de website worden getoond. Dat jij in het beheersgedeelte nog Engels ziet staan is absoluut geen ramp.
Wanneer ik voor mijzelf vertaal, zal ik dus ook typisch alleen de teksten vertalen, die ik tegenkom als ik op de site zelf bezig ben. Scheelt je vaak zeeën van tijd.
Vertalingen hergebruiken
Wanneer je meerdere websites hebt, wil je natuurlijk voorkomen, dat je op tien sites tien keer dezelfde vertaling moet uitvoeren. Gelukkig kan je vanuit Loco de vertaling downloaden en op een andere site waar Loco ook staat weer uploaden.
Vertalingen downloaden
Het downloaden zou ik ook zeker aanraden iedere keer wanneer je het bestand hebt bijgewerkt. Want of af en toe blijken bij updates -ondanks dat het niet zou mogen- ‘maatwerk’ vertalingen op mysterieuze wijze te verdwijnen.
Loco, PoEdit en PoEdit Pro
Loco Translate is een prima plugin wanneer je wat minder ervaring hebt met het werken met FTP, of wanneer je dit gewoon te omslachtig vindt. Wanneer je echter een taalbestand van het begin tot het einde wilt vertalen, heb ik persoonlijk een voorkeur voor PoEdit, en met name de betaalde versie hiervan.
Het aardige van PoEdit is dat er talloze acties onder een sneltoets zijn ondergebracht, waar ik in Loco toch verschillende muiskliks nodig heb. Bij een grote vertaalklus scheelt mij dit echt uren.
Het aardige van PoEdit Pro is dat er ook ‘vertaalsuggesties’ zijn. Je kan je misschien voorstellen, dat bepaalde teksten in meerdere plugins en applicaties voor zullen komen.
Bij het maken van de vertaling kan de vertaler die PoEdit Premium gebruikt ervoor kiezen zijn vertaling aan ‘de community’ beschikbaar te stellen. Wat er dan niet gebeurd is dat het hele bestand beschikbaar wordt gesteld, maar de afzonderlijke vertaal-regels.
Bevat mijn vertaling toevallig eenzelfde regel als in een heel andere plugin, dan krijg ik een suggestie, of ik wellicht één van die versies wil gebruiken.
Machinevertalingen
Daarnaast gebruikt PoEdit Pro diverse vertaal engines om met suggesties te komen. Bij iedere regel die ik te vertalen krijg, krijg ik dus diverse suggesties, die ik direct goed kan keuren, of als basis voor mijn eigen aanpassingen kan gebruiken.
En op deze manier wordt meer dan 80% van een vertaling vaak in minder dan 20% van de benodigde tijd uitgevoerd. De overgebleven tijd kan ik gebruiken om die 20% ook echt goed te vertalen.
Conclusie
Wanneer je voor je eigen website vertaalt, heb je absoluut PoEdit (Pro) niet nodig, omdat je meestal toch maar een heel klein deel van je site (dat wat de bezoeker ziet) zal vertalen. Loco is meer dan goed genoeg. Het fraaie van Loco is dat je hier eigenlijk op ‘regelbasis’ kan werken. Je loopt door de site en bij een Engelstalige term, zoek je die op in het bestand, vertaalt het en slaat het op.
Zou je deze methode met PoEdit willen gebruiken wordt er heel wat over en weer geup- en download.
Wil je het complete bestand vertalen, dan is eigenlijk PoEdit Pro de beste optie. PoEdit zelf is leuk, maar gezien de geringe prijs van de Pro versie bespaar je dit al in één vertaling aan tijd.
Is het vertalen van software je belangrijkste bezigheid, dan heb zelf vast al ontdekt, dat PoEdit Pro+ de beste optie is.