Hoe WordPress-thema's en plug-ins te internationaliseren

In 5 Cardinal Sins van WordPress Theme Development hebben we kort gesproken over het belang van het internationaliseren van thema's en plug-ins, maar we bespraken niet echt hoe om het te doen. 

Als u deel uitmaakt van het commerciële thema of de plug-inruimte, is de verwachting dat uw werk meerdere talen ondersteunt. In dit artikel zullen we eens kijken naar hoe internationalisatie echt is, waarom het belangrijk is en welke stappen nodig zijn om uw project te internationaliseren..


Inzicht in internationalisering

Als het gaat om het internationaliseren van WordPress-projecten, is misschien het moeilijkste aspect eigenlijk het begrijpen hoe het moet - internationalisering van een WordPress-project is eigenlijk heel gemakkelijk om te doen.

Voordat we kijken naar hoe het moet, is het belangrijk om eens te kijken naar de betekenis van internationalisering en waarom we, als ontwikkelaars, er zelfs de moeite voor zouden moeten doen.

Internationalisatie gedefinieerd

Eenvoudig gezegd, internationalisering is het proces waarmee we ons thema voor vertaling voorbereiden. Dit betekent dat ongeacht welk [gesproken] taalgebruik werd gebruikt om ons werk te ontwikkelen, toekomstige gebruikers (of zelfs ontwikkelaars) het project gemakkelijk kunnen vertalen voor welke taal dan ook. Internationalisering vereist dat niet wij zorgen voor de vertalingen (hoewel de meertalige onder ons dat gemakkelijk zou kunnen doen), alleen dat we de nodige stappen ondernemen voor toekomstige vertalers om dit te doen.

Waarom zou je je drukmaken?

Jaren geleden had ik gezegd dat internationalisering alleen zou moeten worden gedaan als de doelmarkt voor je werk iets anders was dan je moedertaal, maar dat is niet langer het geval. Dankzij internet kunnen we converseren, samenwerken, en communiceren met mensen van over de hele wereld. Het potentiële publiek voor een bepaald project is groter dan ooit tevoren.

Meer nog, WordPress drijft een groot aantal moderne websites aan. Daartoe moeten we globaal nadenken over ons werk. Ik beargumenteer dat internationalisering van commerciële thema's of plug-ins niet meer onderhandelbaar is. Als het platform waarop je werk is gebouwd door verschillende talen wordt gebruikt - en WordPress is - en het platform biedt een schone en eenvoudige manier om een ​​thema te internationaliseren - en WordPress doet dat - dan is het meer een kwestie van waarom ben ik niet mijn werk internationaliseren.

Hoe te internationaliseren

Zoals eerder vermeld, is het daadwerkelijk internationaliseren van een thema meer een poging om de belangrijkste functies in de WordPress API te begrijpen dan het eigenlijke proces van het voorbereiden van de tekst. Laten we daarom, voordat we een concreet voorbeeld bekijken, een paar belangrijke termen en functies definiëren: - Key internationalization. Je kunt dit zien als een context, domein of unieke ID voor je strings.

Hoe dan ook, dit is een unieke waarde die WordPress zal gebruiken om de tekst in uw thema te internationaliseren.- __ ($ text, $ key) is een functie die een vertaalde string retourneert. Deze functie echoot, print of geeft de string niet weer. Het wordt vaak gebruikt wanneer een andere bewerking op de vertaalde reeks moet worden uitgevoerd (zoals doorgeven aan een andere functie). Het accepteert twee argumenten - de tekenreeks die moet worden vertaald en de toets internationalization.- _e ($ text, $ key) is een functie die de vertaalde tekenreeks daadwerkelijk naleeft.

Dit wordt het best gebruikt wanneer u een vertaalde waarde moet ophalen en ergens in uw thema of plug-in wilt weergeven.- load_theme_textdomain ($ domain, $ translation_directory), load_plugin_textdomain ($ domain, $ translation_directory) zijn twee functies die WordPress vertellen waar u uw vertalingen. We zullen deze functies nu een beetje meer in detail bekijken.

Voor nu, weet gewoon dat elke functie hetzelfde doel dient, hoewel een voor thema's is, een voor plug-ins. Voor het grootste deel is dit alles wat er is om te begrijpen hoe je je thema kunt internationaliseren. Van hieruit bekijken we precies wat er precies moet gebeuren om deze functies in de praktijk te brengen.


Je werk internationaliseren

Vertaling van vertaalde tekst

Voordat we een thema internationaliseren, laten we eens kijken hoe een standaard stuk opmaak eruitziet:

Mijn WordPress Blog

Slechts een van de beste sites op internet

Deze alinea is de beste alinea die bestaat in alle WordPress-blogs op internet. Lees het en geniet ervan.

Niets spectaculairs, toch? Lijkt op een standaard stuk HTML (dat is alles wat het is). Toegegeven, dit is een eenvoudig voorbeeld, maar het is alles wat nodig is om te demonstreren hoe een thema internationaliseert.

Om deze tekst hierboven te internationaliseren, moeten we bepalen welke unieke ID we gaan gebruiken om onze tekst te internationaliseren - ik ga met 'tutsplus'. Ten tweede, omdat alle bovenstaande tekst op het scherm wordt weergegeven, gebruiken we de functie __e (). De geïnternationaliseerde code zou moeten zijn:

Maar hoe zit het met de tekst die moet worden vertaald voordat deze op het scherm wordt weergegeven? Het is niet veel anders, maar laten we eens kijken naar hoe we zijbalken kunnen internationaliseren.

Verwerkte tekst verwerken

Laten we eerst de zijbalk instellen:

register_sidebar (array ('name' => 'Custom Sidebar', 'id' => 'sidebar'));

Ter referentie, ik gebruik de functie register_sidebar die beschikbaar is via de WordPress API. Merk op dat de naam van de zijbalk wordt weergegeven op het Widgets-scherm. Als zodanig moeten we het internationaliseren; echter, een array accepteert geen echo-string - het accepteert een stringwaarde.

In dit geval maken we gebruik van de functie __ ():

register_sidebar (array ('name' => __ ('Custom Sidebar', 'tutsplus'), 'id' => 'sidebar'));

Makkelijk genoeg, he?

Vergeet niet dat internationalisatie alleen van toepassing is op statische tekst. Het is niet de verantwoordelijkheid van de ontwikkelaar om internationalisering van de pagina-inhoud, het plaatsen van inhoud, enzovoort.


Het thema en / of plugin voorbereiden op internationalisering

Nadat je je thema hebt doorgenomen en de tekst hebt aangepakt die moet worden geïnternationaliseerd, moet je het thema of de plug-in vertellen waar de internationaliseringsbestanden te vinden zijn. We zullen dit in een ogenblik dieper bekijken, maar eerst raad ik altijd aan een 'lang'-map te maken in de hoofdmap van het thema of de plugin-directory om internationaliseringsbestanden op te slaan..

Onthoud de functies load_theme_text_domain en de functies load_plugin_text_domain van vroeger? Dit is waar we ze gebruiken. Als u met een thema werkt, moeten we een aangepaste functie definiëren die wordt aangeroepen in de haak after_setup_theme:

function custom_theme_setup ()  // end custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Vervolgens vertellen we de functie waar de vertalingen moeten worden gevonden. Hiertoe voegt u het volgende toe aan regels voor uw thema (noteer de opmerkingen die uitleggen wat elke regel doet):

function custom_theme_setup () // Haal de map voor de internationalisatiebestanden $ lang_dir = get_template_directory () op. '/ Lang'); // Stel het tekstdomein van het thema in met behulp van de unieke identifier van boven load_theme_textdomain ('tutsplus', $ lang_dir);  // end custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Relatief eenvoudig, toch? Het is ook niet veel anders voor plug-ins. Net als bij thema's plaats ik mijn plugin-internationaliseringsbestanden altijd in een subdirectory 'lang'. Eerst moeten we WordPress vertellen waar de internationalisatiebestanden zich bevinden. Ervan uitgaande dat die van u zich in een 'lang'-map bevindt:

load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');

De tweede parameter - waar we 'false' hebben opgegeven - is noodzakelijk maar komt overeen met een verouderde functie in WordPress.

Ten slotte moeten we bepalen waar de load_plugin_textdomain-functie moet worden aangeroepen. Als we een Widget schrijven, plaats ik deze functie-aanroep meestal in de constructor:

class My_Custom_Widget function My_Custom_Widget () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');  // end constructor // end My_Custom_Widget

Als we een vanilla-plug-in schrijven, zijn er verschillende manieren waarop u WordPress kunt vertellen waar de vertaalbestanden zich bevinden, maar u heeft de flexibiliteit om in te loggen in de after_setup_theme functie. Vergelijkbaar met de bovenstaande thema-code, kunt u deze in uw plug-in plaatsen:

function custom_plugin_setup () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');  // end custom_theme_setup add_action ('after_setup_theme', 'custom_plugin_setup');

Op dit moment zijn uw thema of plug-in klaar voor internationalisatie.


Twee meer overwegingen

Op dit punt ben je eigenlijk klaar, maar het is altijd de moeite waard om te weten wat nodig is om je werk te nemen en verder te gaan. Dit zijn de twee openstaande taken die vertalers normaal gesproken zullen uitvoeren om uw thema te vertalen

  • Vertaal de tekst. Vertalers zullen uw thema verwerken via een vertaalapplicatie (zoals POEdit) die bestanden zal genereren die zijn opgeslagen in uw 'lang'-map, waar WordPress de bestanden zal ophalen.
  • Updates voor WP-Config.php. Op dit moment moeten vertalers WordPress instrueren om internationalisatie in te schakelen en op te geven welke taal ze gebruiken. Dit valt buiten het bestek van dit artikel, maar u kunt er meer over lezen in de Codex.

In tegenstelling tot sommige van de andere ontwikkelomgevingen die beschikbaar zijn, maakt WordPress het ongelooflijk eenvoudig om je werk te internationaliseren. Wellicht het meest uitdagende onderdeel is het begrijpen van de belangrijkste functies die nodig zijn om uw strings voor te bereiden op internationalisering.

Bovendien kan het reviseren van bestaand werk altijd een tijdrovend proces zijn. In de context van WordPress is het misschien vervelend, maar het is relatief eenvoudig om te doen. Als u aanvullende suggesties of vragen heeft met betrekking tot internationalisering, kunt u deze in de opmerkingen achterlaten!