Het is heel gemakkelijk om een oogje dicht te knijpen voor andere talen bij het ontwikkelen van je WordPress-thema, maar dit is een heel slechte gewoonte en wijst meteen een hele markt van WordPress-gebruikers en mogelijk duizenden dollars aan verloren inkomsten terug. Van de top 10 landen die op Google zoeken naar "WordPress-thema's", is er maar één die Engels spreekt (de VS) en die komt als negende. Op het moment van schrijven zijn er slechts 269 thema's in de themadatabase van WordPress die zijn getagd als klaar voor vertaling uit meer dan 1500 thema's. Dat is slechts 18% van de thema's. Ik ga je laten zien hoe je de jouwe kunt maken.
Wanneer u gewoonlijk een thema maakt, hoeft u alleen maar hardwarematig een willekeurige thematekst, zoals het 404-foutbericht in de 404.php bestand of labels zoals "comments:" of "author:". Als de WordPress van de gebruiker bijvoorbeeld in het Duits is, worden deze tekstfragmenten nog steeds in het Engels weergegeven. De oplossing hiervoor is om deze uitspraken te retourneren of te echoën met een van de vier WordPress-functies die zijn ontworpen om naar een taalbestand te verwijzen voor de juiste tekst. Zodra u uw tekst in deze functies hebt gewikkeld, kunt u een bestand maken met alle vertalingen waarnaar wordt verwezen telkens wanneer het thema wordt geladen. Er zijn drie vertaalbestanden die we gebruiken:
Voor elk van de vier functies is ten minste één argument vereist, namelijk de tekst die moet worden vertaald. De functies zijn:
__ ()
- (twee onderstrepingstekens) De basisfunctie die u het grootste deel van de tijd zult gebruiken. Het geeft de tekst terug in de juiste taal._e ()
- Hetzelfde als __ ()
behalve dat het de tekst echoot in plaats van het terug te sturen._N ()
- Wordt gebruikt wanneer de tekst de mogelijkheid heeft om meervoud te zijn, dus als u bijvoorbeeld wilt weergeven hoeveel opmerkingen zijn gemaakt, wilt u mogelijk "X-opmerkingen" of "X-commentaar" uitvoeren afhankelijk van het aantal opmerkingen dat u hebt._X()
- Handig voor wanneer de vertaling van het woord afhankelijk is van de context. "Posten" kan "een bericht" betekenen (zelfstandig naamwoord)"of" om te plaatsen (werkwoord)"afhankelijk van de context. Het is belangrijk voor de vertaler om te weten wat u bedoelt als u vertaalt om accuraat te zijn. _X()
wordt voornamelijk gebruikt waar enkele woorden worden gebruikt. Dit zijn de eenvoudigste vertaalfuncties die WordPress te bieden heeft. Laten we een voorbeeld van elk bekijken:
Beide functies doen hier precies hetzelfde. De verklaring "dit is een bericht" wordt vergeleken met het .mo-bestand als dit er is en het resultaat wordt teruggestuurd. __ ()
en _e ()
er hoeft slechts één argument aan hen te worden doorgegeven, wat de tekst is die we willen laten vertalen. Een tweede optioneel argument is beschikbaar en daar komen we later op terug. Het enige verschil tussen de twee is dat __ ()
heeft de echo
verklaring hier. Laten we een voorbeeld bekijken waar __ ()
werkt beter dan _e ()
:
In plaats van een string door te geven aan de de inhoud()
functie die we hebben gebruikt __ ()
zodat de tekst kan worden vertaald. Als we het hadden gebruikt _e ()
in plaats daarvan zou je de vertaling van 'Klik hier om meer te lezen' naar het document laten echoën in plaats van door te geven aan de inhoud()
wat allerlei onbeantwoorde problemen zou veroorzaken.
Wat als u een situatie heeft waarin de tekst die u uitvoert mogelijk een meervoud of een enkelvoud is, zoals het bovenstaande voorbeeld van "X comments"? In plaats van twee verschillende tekstreeksen voor de vertaler te geven, kunt u zeggen dat u een enkel stuk tekst hebt dat een enkelvoud en meervoudig moet worden vertaald. De volgende twee voorbeelden geven beide hetzelfde resultaat aan de gebruiker:
_N ()
vereist drie argumenten. De eerste is de enkelvoudige versie van de tekst, de tweede is het meervoud en de derde is het nummer waarnaar wordt verwezen. In dit geval, get_comments_number ()
is het vinden van hoeveel reacties op een bericht en vervolgens _N ()
is het kiezen van de juiste tekst om te gebruiken.
Laten we zeggen dat je een .pot-bestand vertaalt en je ziet een ingang "scrollen". Ga je dat interpreteren als "een stuk opgerold papier" of "de website op en neer schuiven"? Je zou echt wat context kunnen gebruiken om te beschrijven wat je nodig hebt om het te vertalen. Deze functies geven je die mogelijkheid door een tweede vereist kenmerk te hebben dat vraagt om een korte beschrijving om de zin of het woord te beschrijven. Bekijk het onderstaande voorbeeld:
In het voorbeeld ziet u het verschil tussen _X()
en _ex()
. Het is hetzelfde e
, zoals met _e
, om de functie de echo van de uitvoer te laten maken in plaats van deze terug te geven. Voor beide is onze eerste parameter onze tekst die moet worden vertaald, en de tweede is een opmerking of opmerking over de vertaaltekst om duidelijk te maken wat er wordt bedoeld.
Stel dat u een situatie hebt waarbij de tekst die u wilt genereren, bestaat uit een tekenreeks met het resultaat van een functie of de waarde van een variabele die ergens in de tekst staat. Je zou in de verleiding kunnen komen om iets als dit recht te zetten:
Als het gaat om het maken van je .pot-bestand, zal POEdit dit negeren omdat het geen variabele in het midden van een zin wil gebruiken. De reden hiervoor is dat het de string zal indienen U hebt het $ kleurenthema gekozen
naar het .pot-bestand, maar als het gaat om het zoeken naar de vertaling wanneer het script wordt uitgevoerd, zoekt het naar de tekenreeks U hebt het blauwe thema gekozen
die het niet zal vinden. Dus wat als we dit doen in plaats daarvan:
Het script kan nu de vertalingen ophalen, maar nu is het te moeilijk geworden om te vertalen omdat de zin is verbroken. Deze zin is misschien zelfs niet vertaalbaar in sommige talen met een grotendeels andere syntaxis, zoals in het Duits, waar aan het einde van de zin hun woord voor 'gekozen' zou verschijnen. Je zou de moeite moeten nemen om uit te leggen dat deze twee afzonderlijke tekstreeksen deel uitmaken van één, en dat "thema" misschien helemaal niet naar "thema" vertaalt.
De oplossing is om een enkele tekststring te gebruiken die de enkelvoudige offerte-vriendelijke syntaxis heeft. Dit is waar de printf ()
of sprintf ()
functies worden nuttig. Laten we eens kijken hoe onze code eruit moet zien:
Dit lost niet alleen al ons probleem op dat we eerder hadden, maar het is ook veel netter en gebruikt maar één regel code. De printf ()
of sprintf ()
De eerste argumenten van functions zijn de string die moet worden uitgevoerd en die in dit geval ten minste één tijdelijke aanduiding bevat % s
(wat "string" betekent), en alle andere argumenten zijn variabelen die in de eerste reeks moeten worden geplaatst. Er zijn veel verschillende tijdelijke aanduidingen die u kunt gebruiken in uw reeks en u kunt een volledige lijst vinden onder sprintf
in de PHP-handleiding. Merk op dat het verschil tussen printf ()
en sprintf ()
is gelijkaardig aan _e ()
en __ ()
respectievelijk.
Nu u met succes al uw tekstuitvoer op uw thema hebt getagd, moet u deze informatie nu verzamelen in een .pot-bestand. POEdit is een fantastisch programma dat je de mogelijkheid geeft om je .pot-bestand te maken, en biedt ook een eenvoudig te gebruiken GUI die kan worden gebruikt om je .po en, nog belangrijker, je .mo-bestanden te maken.
Eerst moet je POEdit downloaden, die je hier kunt vinden voor Windows, Mac en Linux:
http://www.poedit.net/download.php
Nadat POEdit is geïnstalleerd, kunt u uw .pot-bestand maken. Ga hiervoor naar Bestand> Nieuwe catalogus. U krijgt een dialoogvenster te zien waarin u enkele basisinformatie moet invoeren. De essenties op het tabblad "Projectinfo" zijn de projectnaam en uw taal / land. U moet ook het volgende invoeren in het vak "Meervoudsvormen":
Meervoudsvormen: nplurals = 2; meervoud = n! = 1;
Voer op het tabblad "paden" het pad in waar de bestanden kunnen worden gevonden ten opzichte van de opslagbestemming van dit .pot-bestand. Als u bijvoorbeeld het .pot-bestand in de hoofdmap van het thema plaatst, voert u dit in .
(periode). Als u het .pot-bestand in een "taal" -map binnen de thema-hoofdmap wilt plaatsen, voert u dit in ...
(twee perioden).
Vervolgens moet u POEdit vertellen op welke zoekwoorden moet worden gezocht bij het scannen van onze bestanden. Vul het volgende in:
De : 1,2
extension vertel POEdit dat deze sleutelwoorden uit twee delen bestaan. Standaard is het tweede argument het meervoud tenzij u het c
wat betekent dat het tweede argument een opmerking is.
Je bent klaar om te gaan! Klik op "OK" en kies een plaats om uw .pot-bestand op te slaan. Vergeet niet dat het betrekking moet hebben op het pad dat u eerder hebt gedefinieerd. POEdit zal nu door uw bestanden bladeren en alle voorkomende vertaalfuncties vinden en deze zonder vertalingen opslaan in uw .pot-bestand. Als u alleen de absolute minimale ondersteuning voor internationale vertalingen wilt bieden, kunt u uw .pot-bestand met uw thema verzenden en hier stoppen, maar als u uw thema zelf in een andere taal kunt vertalen, kunt u uw thema verzenden met een vooraf ingestelde vertaling zoals beschreven in stap 3.
Nadat u alle tekenreeksen in het .pot-bestand hebt vertaald, kunt u dit opslaan als uw .po-bestand. Elke reeks waarvoor u geen vertaling heeft verstrekt, wordt weergegeven in de originele taal wanneer iemand uw thema bekijkt.
De bestandsnaam van je .po is cruciaal. Gettext gebruikt de ISO 639-standaard voor taalafkortingen en ISO 3166 voor landinstellingen. Als uw vertaling bijvoorbeeld in het Amerikaans Engels is geschreven, ziet uw bestandsnaam er uit en-US.po
. Hoofdlettergebruik is ook hier belangrijk. Raadpleeg deze twee links voor een volledige lijst met taal- en landcodes:
Als je opslaat, maakt POEdit standaard automatisch een .mo-bestand aan naast je .po-bestand. Het wordt aanbevolen om alle drie uw vertaalbestanden bij uw thema te voegen, zodat mensen hun eigen vertalingen kunnen maken en uw bestaande vertalingen gemakkelijk kunnen bewerken.
Laten we samenvatten wat u tot nu toe hebt gedaan. U hebt aan WordPress alle tekst verteld die u vertaalbaar wilt hebben en vervolgens gebruikte u POEdit om elke tekenreeks te verzamelen en deze in een .pot-bestand te plaatsen dat kan worden vertaald in een .po- en .mo-bestand. Deze bestanden worden vervolgens opgenomen in de themabestanden. De laatste stap is om je thema te zipen, het te installeren en WordPress te laten weten welk .mo-bestand je wilt gebruiken. Dit is een zeer eenvoudige procedure waarbij u toegang hebt tot uw wp-config.php
bestand gevonden in de hoofdmap van WordPress.
/ ** * WordPress Localized Language, standaard Engels. * * Wijzig dit om WordPress te lokaliseren. Een bijbehorend MO-bestand voor de gekozen * taal moet worden geïnstalleerd in wp-content / talen. Installeer bijvoorbeeld * de_DE.mo in wp-content / languages en stel WPLANG in op 'de_DE' om Duitse * taalondersteuning in te schakelen. * / define ('WPLANG', ");
Uw bestand zou al moeten bevatten define ( 'WPLANG', ");
maar als dat niet het geval is, kunt u het toevoegen. U hoeft alleen uw taal en locale code toe te voegen aan de bepalen
. Als u uw thema in het Duits zou vertalen, zou u dit hebben:
define ('WPLANG', 'de_DE');
Uw internationalisatie is voltooid! Vergeet niet om uw .pot-bestand bij uw thema te voegen, en als u uw thema naar een andere taal kunt vertalen, om de .po- en .mo-bestanden ook toe te voegen.