Internationalization (118n)

Als je een WordPress theme ontwikkelt is het handig dat deze ook te gebruiken is in andere talen. Daarvoor is er Internationalisation, afgekort naar 118n. Als je je theme geschikt maakt voor 118n is deze eenvoudig in andere talen te gebruiken met WordPress.

Wat en waarom vertalen?

WordPress wordt wereldwijd gebruikt in allerlei talen. Het is daarom goed je theme daarvoor geschikt te maken. Een voorbeeld van tekst in je theme die vertaalbaar moet zijn.

Voorbeeld

Stel, je hebt een page template voor je blog index. De titel van deze pagina staat als volgt in je template:

<h1>Blog</h1>

Het zou wel zo fijn zijn als de eindgebruiker van je theme het woord 'Blog' kan vertalen. Dat kan natuurlijk door de page template code zelf aan te passen, maar dat is niet zo gebruiksvriendelijk.

Gelukkig zijn er vertaalfuncties beschikbaar hiervoor. Voor bovenstaande voorbeeld ziet dat er als volgt uit:

<h1><?php _e('Blog','textdomain'); ?></h1>

De functie _e() maakt het mogelijk teksten eenvoudig te vertalen. Later meer hierover en een uitleg van bovenstaand voorbeeld.

Stappenplan theme vertaalbaar

Om je theme vertaalbaar te maken volg deze vier stappen:

  1. Geef je theme een text domain.
  2. Gebruik taalfuncties.
  3. Maak een .pot bestand.
  4. Laad de vertaling.

De eerste drie stappen doe je in de theme bestanden. Voor de laatste stap kun je gebruik maken van software.

1. Text domain

Om je theme vertaalbaar te maken heeft het een label nodig. Dit label wordt het text domain genoemd. Aan de hand van het text domain herkent WordPress dat het te maken heeft met een vertaalbare tekst. Het text domain moet een uniek zijn om verwarring te voorkomen met text domains van andere themes en plugins.

Een text domain moet voldoen aan de volgende eisen:

  • kleine letters
  • geen speciale tekens, behalve liggend streepjes: '-'

Een voorbeeld van een text domain. Je hebt een theme genaamd 'Mijn thema'. De text domain zou dan kunnen zijn: 'mijn-thema'.

Het text domain heb je nodig voor:

  • style.css
  • vertaalfuncties
  • laden van de vertaling

Voeg de text domain toe aan je style.css. Hiermee herkent het theme dat er vertalingen beschikbaar zijn.

Voorbeeld van een style.css met text domain:

/*
* Theme Name: Mijn thema
* Author: Naam
* Text Domain: mijn-thema
*/

Toepassing van het text domain voor de vertaalfuncties en het laden van de vertaling volgt hieronder.

2. Vertaalfuncties

Elke tekst die vertaalbaar moet zijn verpak je in speciale vertaalfuncties. Nogmaals het eerder getoonde voorbeeld:

<h1><?php _e('Blog','textdomain'); ?></h1>

Hierbij is _e() de gebruikte vertaalfunctie. Tussen haakjes staat eerst de te vertalen tekst en vervolgens de text domain.

'textdomain' vervang je dus door de text domain van je theme. Is de text domain van jou theme 'mijn-thema', dan ziet de code er als volgt uit:

<h1><?php _e('Blog','mijn-thema'); ?></h1>

Er zijn meerdere vertaalfuncties. Het gaat te ver deze hier allemaal te beschrijven. Voor een overzicht van de vertaalfuncties zie de WordPress Codex.

3. .POT bestand

WordPress heeft een .pot bestand nodig met alle vertalingen. Voor het maken van het .pot bestand heb je een programma nodig. Een veel gebruikt programma is Poedit. Voor alternatieven, zie 'POT files' in de WordPress Codex.

Zie ook: Maken .pot bestand met Poedit

Meer informatie over Poedit: poedit.net.

4. Laden vertaling

Als er in WordPress een vertaling beschikbaar is, dient deze correct geladen te worden. Dit doe je met een functie in je functions.php bestand. Een voorbeeld:

function my_theme_load_theme_textdomain() {
   load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'my_theme_load_theme_textdomain' );

Voor meer info, zie 'Loading Translations' in het WordPress theme handbook.