Mark Jansen: Multilingual WordPress, The hoe und pourquoi
Dankjewel, goed welkom allemaal en een lekkere pauze gaat allemaal even flinke koffie gedronken natuurlijk, dus dan kunnen we nu de fris tegenaan. Allereerst, ik ben even benieuwd wie maakt dat hier wel eens meertalige websites? Mooi, dat zijn er flinke wat. Nou ik kom natuurlijk uit het 20 en wij zitten in de grensregio daar, dus daar heb we het ook regelmatig mee te maken. Nou even een klein stukje over mezelf, daar ben ik. En nou waar zou je mij nou van kunnen kennen eventueel, als je me niet al kent van Twitter of dat soort dingen, ik ben de drummer die stokjes vreed, ik ben de toekomstig klootschietkampioen van Aanselo, en misschien ken je me vooral sporingverzacht anders, maar je kunt mij vinden op Twitter, op LinkedIn, en ik ben ook nog eens de mede-organisator van de WordPress Meetup Twente, wie is daar wel eens geweest? Kijk, twee, dat moeten er dus meer worden. Ja, dat moeten er meer worden, dus houd dat ook even in de gaten, kijken onze Meetup-pagina, we hebben vaak interessante sprekens en kom ook gewoon rustig die kant op. Wat doe ik dan in Twente? Ik ben freelancer onder de naam Jormark en ik ben ook developer by Reddice Concepts en nou, wij bouwen daar websites, gaven toffe websites, onder andere meer talige websites en omdat ik daar dus de laatste tijd een paar klanten in heb gehad, die overzijgestapt van enkele talen naar meer talen of van bepaalde plugins naar andere plugins, heb ik besloten hem daar dus even wat over te gaan vertellen. Nou, daar zijn we al, ik kom dus uit Twente en in het kader van de meer taligheid ligt mij ook wel mooi om de talk in Twente door. Ja, meer stukken staan bezig hier. Niemand? Ja, hey. Nou, dan snap je het wel. Maar vooruit, laat maar in Nederlands doen. Wat we gaan doen, ik ga even een paar plugins met jullie doornemen, de overwegingen waarom die plugins wel of niet zouden gaan gebruiken en op het eind wil ik daar graag een conclusie over trekken. En als je denkt wat staat hier na de helter met zijn telefoon te doen, ik ben gewoon aan het tweeten.  Goed, deze plugins, het zijn er, als je zoekt op meer talige plugins, het zijn er echt, ik weet niet hoeveel, een aantal van jullie zullen deze wel kennen, wie herkent ze allemaal een beetje, WPML grote, Polilang. Nou, dat zijn er echt iets te veel om allemaal te bespreken, dus ik wou het graag even gaan beperken tot deze vier ongeveer. Nou, WPML, wie gebruikt er hier WPML? Ja, kijk even naar, die talk nog zo is. Weaklot, die was voor mij vrij nieuw, maar ze zijn sponsor hier, wie? Iemand? Oep, nou, goede reden om sponsor te zijn. QTranslate, ja, en Polilang. Ja, daar zijn er ook allemaal een paar. Nou, mooi. Wat ik wil gaan doen, ik wil even die plugins een beetje gaan doornemen en wat ik heb gedaan, ik heb een kale WordPress-installatie gemaakt en dit neem je even als onze benchmark, om te vergelijken met wat doen die plugins nou als je ze installeert. Wat gebeurt er dan? Dit is een hele kale installatie, er zit niks op. Het enige wat ik heb gedaan is WP Test.io erop gezet, dus dat zit er een paar pagina's in, testdata, en ik heb de plug-in Query Monitor geïnstalleerd. Een altijd vreemd handige plug-in, als je een debugger bent en als je wil kijken waar je queries van aankomen en welke functies er aangeroepen worden, etc. Je ziet nu hier, 31 queries, pagina loopt van 0,252 seconden. Nou, dat is een kale installatie. Ja, oh, de naam van de plugins? Dat moet vast wel kunnen. Oh, Query Monitor. Query Monitor. Die doet dit, bedoel je? Dit hier. Je zit dat er neer. Ja, goed. Een kale installatie, ik heb een kale installatie gepakt en ik heb daar vier plugins die we net hebben benoemd, heb ik daarin gezet. Nou, daar heb ik een paar resultaten van. Wie denk je dat het eerst is? Polilang. Maar, let op, gooit er gelijk al 24 eigen queries in. Nou, low time gaat ietsje omhoog, maar allemaal niet schokkend. Prima. Volgende, Weglot, 1 query extra. Nou, is wel iets sneller met laden. Dan queue translate en let dan op de laadtijd en het aantal queries. Dit gaat alvast omhoog. Nou, nou weten we dus allemaal wel wie de winnaar is. Durft er iemand een gokje te wagen aan het aantal queries? Ja, maar zelfs, zeg maar.  Ja, nee, WPML, maar hoeveel queries gooien jullie erin? 300. 300 stuks. Ja, wat zei je? Ja, een mooi rondgetal. Nou, dit doet multilingual press dus op een kale installatie. Dan heb ik nog niks gedaan, nog helemaal niks. Dan heb ik nog niet eens meer talen ingesteld of landen eraan gekoppeld, of pagina's gekoppeld, niks. Dit doen ze. En ja, daarom is multilingual press in mijn opinie niet the way to go. Ze maken gewoon een gigantische overhead. En let ook op die pagina laadtijd. Dit is gewoon de dashboard homepage, 1,28 seconden. En we kwamen van 0,52. Dat is meer dan anderhalf keer zoveel. Alles is te optimaliseren en dat kom ik straks nog even op, maar voor mij optimaliseer je dan voor het verkeerden. Goed, we gaan ze even heel even langs. Polilang is een gratis plug-in. Voor meerdere functionaliteiten kun je betalen. Maar ik zie, je hebt een paar even pros en cons neergezet. Wat volgens mij niet goed werkt, is Polilang, die slaat elke pagina die je wilt vertalen. Ik sla ze apart op en het werd niet goed met option pages. Ik kwam ergens een optie tegen dat je dan voor elke taal gewoon even een aparte option page moet maken in de back-end. Wat ze wel doen, de koppeling van de pagina slaan ze op in terms. Dus die koppeling werkt prima, dat gaat allemaal vrij vlot. Want daar blijft het lekker dicht bij WordPress. En ze voegen netjes RevLang Text to Reach Rev, hoe je het uitspreekt. Maar wat dat is, wie weet wat dat is? Age Rev Text. Daar zit er eentje achter, ja. Daar kom ik zo meteen nog even op, ik zal ze zo meteen uitleggen. In principe doen eigenlijk al die plug-ins dat wel goed. Nou, dit is wel echt... Nee, goed. QTranslate, het wordt ook eigenlijk niet meer onderhouden. Ik kom het alleen vaak nog wel tegen op veel websites. Veel websites draaien nog QTranslate. X in dit geval. De voorlopende van was gewoon QTranslate. In het begin dagen van multilingual WordPress was dat een van de meest gebruikte plug-ins ervoor. Alleen, in mijn opinie, die doet ze echt alles fout. Wat zij doen is, als jij een pagina vertaalt, dan zetten zij gewoon de vertaalde content in je content.  En op het moment dat jij gaat kijken wat er is, dan staat er gewoon een paar techies omheen met dit is Nederlands en dit is Engels. En dan moet je dat maar uitfilteren. Ja, dat is gedoemd om een probleem op te leveren. Als je postmeta's wilt vertalen, heb je weer een aparte plug-in nodig. Hetzelfde probleem met de option pages, ja, goed. Wat ik net ook al zei, ding wordt al niet meer onderhouden. Dus gebruik die alsjeblieft niet. Ik zag dat hij nog steeds 600.000 actieve installaties heeft. Niet doen. Weaklot, die kent er niemand hier nog, geloof ik, hè? Nee, ik heb hem vorig week getest. Ze hebben een paar hele goede punten. Het is heel raar handig. Ik hoorde gisteren in use case van Taken, was dat, geloof ik. Die vertelden me hoe zij hem hadden gebruikt op een site. Daar werkt hij perfect voor, kleinere sites. Mensen die geen zin hebben en tijd hebben om te vertalen. Dit ding doet dat redelijk automatisch voor je. Op het moment dat je hem installeert, autobox werkt bijna direct. Wat ik wel een probleem vind bij Weaklot, is dat je... Als je wel wat wilt vertalen, moet je dat doen op hun site. Je moet daar, ik dacht, 100 euro per maand voor betalen om het te draaien, geloof ik. 100 euro per jaar is het, sorry, per jaar. Alle vertalingen worden op dat moment, op het moment dat je je site bekekt, realtime opgehaald, via hun API. Als die API eruit ligt, weet je al wat er gebeurt. Dan WPML. WPML werkt wel goed samen met bijvoorbeeld plugins als ACF. Het is redelijk gebruiksvriendelijk, als je bekijkt, in termen van hoe gebruikers er mee omgaan. Maar je ziet het aan de linkerkant al staan. Het is ontzettend veel over het. Het voegt heel veel queries toe. En ze voegen per site 18 eigen tabellen toe. En dat is, ja, mijn ogen toch wel iets te veel voor het goeie. Dan, nou, de Age of Lang, waar we het net over hadden, want die is namelijk wel erg belangrijk. De meeste plugins doen dat op de goede manier, maar zorgen wel dat je het controleert of dat gebeurt.  Age of Lang is een tech die in je content komt te staan, in je head, om aan te geven dat jouw taal, of dat jouw content, op dezelfde manier, ook op een andere taal bestaat. Dus als jij een Nederlandse en een Engelse site hebt, dat jij op de Nederlandse site in jouw header een tag hebt staan naar waar de Engelse site staat. Dus daar staat dan de URL in en dat weet je... Het is per pagina. Ja, je zet er boven aan elke pagina, als jij een pagina hebt die je over jou gaat, dan zit je daar boven in de header staat, om die Age of Lang tech te staan. En die geeft dan aan, dit is in deze taal, dit is onder je canonical bijvoorbeeld, dan geeft die aan van, deze taal bestaat ook in het Engels, en dit is de URL. En die is ervoor om te zorgen dat Google dat ook allemaal weet, of het zoekmachine is in ieder geval. Ja, dat het op dezelfde onderwerp gaat. Dat is veranderd, dan is het de taal van deze site, ja. Ja, dat is veranderd. Daar kun je er ook in zetten hoor, maar dit gaat echt over de referentie, aan dezelfde content, kan een compleet andere site zijn, kan een compleet andere domain zijn, bedoel ik. Dus de domaina moet niet hetzelfde zijn, je mag hem in de sub directory zetten of in het sub folder er maar niet uit, als je maar exact aangeeft wat de andere taal is. En controleer die wel, want als je die fout hebt staan, dus als de Age of Lang fout staat, ja, dan kan deze dus gevolg hebben voor je cio. Op Yoast hebben ze daar, Yoast Self heeft daar een stuk over geschreven, en die is toevallig in VBDW, die nog update geloof ik. En dat is echt een hele uitgebreide, waar je echt exact kunt lezen wat Revelling doet voor je. En ik zou hem even doornemen. Wat ik zeg, de meeste plugins, en eentje die ik straks nog aangestippen, wat mijn beste oplossing is, die doen uit Out of the Box. We hebben nog één andere groep probleem met al deze plugins, want ze geven allemaal een draak van een vendor lock-in.  Wie weet, iemand die niet weet wat het is? Nee, gelukkig had de definitie gebroken op de vond op Wikipedia. Wat gebeurt er als je deze plugins gebruikt, kun je ze nooit meer uitzetten. Als je ze uitzet, dan gaat je zijn naar de kloten. Daar komt het eigenlijk simpel gezegd op neer. En je kunt wel overstappen naar wat anders, maar dat kost gewoon heel veel tijd en moeite en dus geld. En dat doen al deze, die vier die ik nu net heb besproken, in mijn ogen allemaal. Nou, want jetzt, wat dan wel? We willen natuurlijk wel een meertalige website. Dus hoe los ik dat dan op voor onze klanten, mijn klanten? Nou, bouwen we een multi-site. Alles wat je nodig hebt, heb ik net toevallig nog tegen iemand gezegd, alles wat je nodig hebt om een goede meertalige website te bouwen, zit gewoon in core. Je hebt geen, in principe niet eens een extra plugin nodig. Ik ga er straks wel even eentje aangestippen, in principe heb je het niet nodig. Weet iedereen hier hoe je een netwerk site bouwt? Hebben mensen dat wel gedaan vaker? Nee? Nou, ik heb hier een linkje onderaan staan. Create a network. Het stelt eigenlijk niet zo heel veel voor, als ik straks nog wat tijd over heb, en ik denk dat dat wel goed gaat komen, dan laat ik even een stukje zien hoe je een netwerk op kunt zetten en wat je ermee kunt en hoe een multi-site werkt. Nou, wat ik net zeg, ik gebruik daar wel een plugin bij, alleen dat is wel een vrije lichtgewicht plugin. Dat is deze Multilingual Press, onze Duitse vrienden van in Psyte, geen idee hoe het uitspreekt, maar deze plugin werkt alleen op een multi-site installatie. Dus als je hem wil gebruiken, moet je dus een multi-site gaan bouwen. En het enige wat deze plugin doet, eigenlijk in een notendop, is zorgen dat je sites aan elkaar kunt koppelen, zorgen dat je posts aan elkaar kunt koppelen en die Revlink tag toevoegen. Nou, als je dus nog even deze weer erbij pakt, dit is dus wat al die plugins doen.  En dit is wat de MLP doet, dus Multilingual Press, die blijft dus onder al die anderen zitten, voegt ook wel wat eigen queries toe, maar zoals je ziet, hij is net zo snel ongeveer als de rest of sneller. Dus Polilang, etc., die doet het wel goed, maar hij wint het met overmaat of het duidelijkheid van WPML, en QTranslate. En dat zijn toch nog steeds de meeste gebruikte plugins hiervoor. Ja, waarom? Waarom gebruik ik deze? Nou, allereerst MLP blijft heel dicht bij de basiswerk van WordPress. Het werkt nagedoeg out-of-the-box, het voegt een paar extra functionaliteiten toe, maar je hebt geen extra pagina's nodig om op te slaan, je content wordt niet dubbel opgeslagen in dezelfde pagina. Je hebt eigenlijk gewoon per site, per taal, een eigen site. Daar komt het op neer. Nou, hij geeft over het algemeen met vijf tot tien extra queries, een beetje afhankelijk van hoeveel talen je hebt, wat je er precies mee doet en wat je zoekt. Hij voegt de correcte tekst toe, nou, dat heeft hij dan weer overeenkomst door met die andere plugins. De user interface werkt fijn, vind ik dan. Het is gewoon zo als WordPress werkt. Je kunt alles vinden op de plekken waar je dat verwacht in WordPress. En het biedt je geen vendor lock in. Als je deze plugin uitschakelt, dan werken al jouw sites gewoon nog. Je kunt overal nog bij, al je content is nog beschikbaar. En het doet het. Nou, zijn er dan ook nadelen? Ja, die zijn er ook. Springvertalingen? Hij heeft geen Out of the Box stringvertalingen. Ik heb van acht tot twee uur nog getiet. Ja. Wat houdt dat in? Wat je in WPML bijvoorbeeld wel hebt, is als jij een site hebt gemaakt of je een thema en daar zitten woorden in die vertaald kunnen worden, die kun je dan door jouw klant eventueel zelf laten vertalen. Nou, dat zit dus niet zomaar in WPML, of in MLP, sorry. Wat ik dan altijd doe is of ik gebruik de PO-vaal in combinatie met PO-edit. Nou, dat is een vrij makkelijk programmaatje. Daar kun je al je strings in laden. Dat kun je naar je klant sturen. Die kun je dan weer inzetten. Die kun je in je thema terug plaatsen. Of je kunt een plugin gebruiken zoals Locotranslate.  En nou weet ik niet zeker meer of die nog onderhouden wordt, maar ik gebruik hem wel. Ja, oké. Dan kun je de klanten vanuit de back-end zelf alles vertalen en komen ze in en ze zelf PO-vaals vanuit de back-end kunnen aanmaken. En het vertalen van sluksvereinsatcode. Wat houdt dat nou in? Als jij op jouw Nederlandse site zit en je hebt een pagina over het boeken. Dus jouw URL is dan mainsite.nl slash boeken, maar in Engels is jouw site mysite.com slash books. Als jij dan vanuit de Nederlandse site wil linken naar de Engelsen site, die vertaling van die sluk, die gebeurt al voor dat de pagina geladen wordt. Dus, altijd als je op een Nederlandse pagina zit zal die sluk altijd in Nederland zijn. Daarvoor moet je wat extra code toevoegen zodat jij en daar heb ik al een scriptje van voor iemand die dat nog wil hebben zodat je de vertaling inlaat real-time op het moment dat die geoutput wordt in de frontend. Zodat je dan ook de goede linken naar de Engelsen site natuurlijk. Nou, nu hoor ik jullie allemaal gelijk denken we willen van WPML en dat ze dingen af en overstappen. Toch? Niet? Maar goed, WPML is, wat ik al zei, een groot probleem. Je kunt het niet zomaar uitschakelen en overstappen als je een beetje een grote site hebt. Ja, is natuurlijk een hele bak werk. Nou, de makers van MLP hebben daar een vrij handige tool voor. Die werkt met WPCLI. En ik heb die nu twee keer gebruikt en die werkt echt, echt heel goed. Dus wat jij dan doet is je zet een multi-site op, je importeert, je exporteert met die tool alle gegevens van je WPML site. Je kunt ze importeeren op je nieuwe netwerk site en alles staat na genoeg als het in WPML goed is ingevoerd. Er staat na genoeg in één keer goed klaar. En als je niet zo handig bent met WPCLI, of je wil het anders doen, dan wordt het gewoon helpmatig. Dan moet je gewoon echt alles met de hand gaan overzetten. Ik heb voor alle andere probleem's zoals Polilang en QTranslate geen goede oplossing gevonden om te slapen naar de multi-site. Dus ik ben bang dat dat dan de Jim Carrey... Ja! Nou, dit is dan waar ik het over heb gehad vooral de technische kant.  Nou, Annelieke heeft van Joost, die heeft het laatst op WordCamp Antwerpen, geloof ik. Een praatje gaan we over de CEO-kant. Ik weet niet of iemand die gezien heeft. Maar... Jo, verrassend. Dat kun je in ieder geval daar vinden. En als je dus meer wil weten hoe je teksten moet schrijven of om moet gaan met dat soort dingen, dan moet je die even bekijken. Daar ga ik het verder niet over hebben. Dan is er nog één andere groot ding. Multi-Lingel WooCommerce. Dat is een ding, want je kunt natuurlijk ook je WooCommerce-site wel als multi-site opzetten. Het probleem is alleen dat je zit dan met waar beheer ik mijn producten? Waar beheer ik mijn voorraden? Hoe doe ik dat? Nou, is er voor voorraad beheerd door ProNemic een plug-in gemaakt die dat kan synchroniseren. Ik heb alleen nog geen goeie plug-in gevonden die betrouwbaar data van producten kan synchroniseren. Dus als jij een multi-lingel WooCommerce-site wil hebben dan zit je of als nog vast aan WPML. Niet doen. Je producten per site gaan beheerden. En dan wordt lastig, als je op site A wat verandert om dat zo over te zetten naar site B. Dus dat moet je dan ook handmatig doen. In mijn ogen is daar nog geen perfecte oplossing voor. Ik ga ze meteen wat laten zien. Ik ga er echt als een malle doorheen. Ja. Maar WPML is wat mij betreft wel de beste oplossing. Ik vind het heel moeilijk om dat toe te geven. Echt pijn. Die heb ik eerlijk gezegd daar niet voor getest. Alleen, volgens mij missen die daar best wel wat features enzo nog voor. Polilang heb ik alleen de gratis versie van getest. Ik weet niet wat je erbij kunt kopen. Ik weet wel dat ze voor WPML daar wel plug-ins voor hebben om dat voor WooCommerce te doen. Ja? Eerst keer dat ik van die hoor. Eerst keer gaan testen. Is die van Polilang zelf van die makers dan? Ja. Ik ken hem er niet van niet. Hoe doe ik dat ook? Voor WooCommerce, ik vind het nog een lastig verhaal, maar ik ga zeker die plug-in even testen en misschien pas ik dan mijn verhaal wel aan. Maar wat ik wel vind is voor gewone, normale sites dus geen WooCommerce oplossing gebruik alsjeblieft een multisite en ik zal zo meteen even een voorbeeld laten zien. 