Sådan oversætter du WordPress-temaer

Bemærk: Dette indlæg er blevet opdateret 26. august 2008 med informationer omkring datoformater. Du kan hoppe direkte til den tilføjede tekst, hvis du vil.

WordPress er blevet en af de meste (hvis ikke den mest udbredte) blogging-platforme. Det skyldes blandt andet den enorme palette af WordPress-temaer (altså designs) der er derude.

Desværre er det få af disse temaer, der er oversat til dansk, og det holder jo bare ikke 100%, at der står "Published by", "Leave a comment" og "This entry was posted…", når blogindlæggene er på dansk, vel? :-)

Heldigvis er det meget nemt at oversætte WordPress-temaer. Du skal bruge Poedit til at lave oversættelserne, så den kan du godt gå i gang med at hente og installere, mens du læser videre.

Da der også er en ok chance for, at du skal redigere i tema-filerne, får du også brug for en god tekst-editor. Her er Notepad++ noget af det bedste, du kan få. Akkurat som Poedit er den gratis.

Punkt 1
Det første, du skal gøre er at undersøge, om temaet nu ikke skulle være oversat til dansk i forvejen. Det kan du tjekke ved at se, om der er en fil med navnet "da_DK.mo" sammen med dit tema. Er der det, er temaet formentlig klar til dansk. Hvis der følger en "da_DK.po"-fil med er det endnu bedre. Det betyder nemlig, at du kan redigere i oversættelsen.

Forvirret? Det behøver du ikke være. WordPress oversættelser foregår ved, at man redigerer i en såkaldt .po-fil med Poedit (passende navn, ikke?). Hver gang man gemmer sin .po-fil, laver Poedit en opdateret .mo-fil. Det foregår helt automatisk, og .mo-filen bliver placeret i samme mappe som .po-filen. Det er .mo-filen, WordPress henter oversættelsen fra, men det er i .po-filen, du kan redigere i oversættelsen.

.po- og .mo-filer skal placeres i mappen for det specifikke tema, sammen med .php-filerne.

Punkt 2
Okay, hvis der ikke er en "da_DK.mo" og/eller "da_DK.po", kan du med det samme tjekke, om der er andre .po-filer. Er der det, kan du tage en kopi af en af dem, omdøbe den til "da_DK.po" og oversætte den til dansk. Som forklaret ovenfor vil Poedit så automatisk give dig en "da_DK.mo"

Punkt 3
Hvis der slet ikke er nogle .po-filer, er din sidste redning (inden du skal på arbejde :-)), at du kan tjekke, om der er en .pot-fil. Er der det, gør du følgende:

  1. Start Poedit
  2. "File" » "New catalog from POT file…"
  3. Find din .pot-fil og åbn den med Poedit
  4. Lav oversættelserne og gem filen som "da_DK.po"

Så har du en dansk oversættelse, som du kan uploade sammen med tema-filerne.

Punkt 4
Okay, hvis ingen af de ovenstående tre punkter har givet gevinst, er der ikke andet at gøre end at spytte i hænderne, gnide håndfladerne mod hinanden og gå i gang.

Er temaet klar til at blive oversat?
Det første du skal gøre er at tjekke, om temaet overhovedet er klar til at kommunikere med .mo-filen. Der er kun én måde at gøre dette på: Kig i koden.

Gå alle .php-filerne i temaet igennem. Alle (og jeg mener alle) tekststrenge, der skal oversættes skal være inkluderet i en "__" eller "_e" funktion.

Hvad er nu det, tænker du nok. "__" og "_e" er WordPress' måde at trække oversættelser ind:

"__" er til tekststrenge, som bliver lavet om til links, det er for eksempel, "Previous page", "Next page", "No comments", "1 comment", "% comments" etc.

"_e" er til tekststrenge der er, ja, tekststrenge. Det vil sige al tekst, der fremstår, som ren tekst, og ikke bliver til links. Her er det lidt tricky, for en "_e"-streng kan sagtens indgå i et link:

<a href="http://www.onlineminds.dk">Visit Online Minds</a>

I dette tilfælde vil "Online Minds" være en tekststreng og linktitel. Men der skal en "_e" omkring. Og det ser sådan ud:

<a href="http://www.onlineminds.dk"><?php _e('Visit Online Minds', 'onlineminds'); ?></a>

Men hov, hvad er nu det, der står efter kommaet? 'onlineminds'?

Jo, det er sådan, at det er de færreste ting i livet, der er lige til, og sådan er det også med WordPress-oversættelser. Hver oversættelse skal have et tekstdomæne. WordPress er rimelig ligeglad med, hvad du sætter tekstdomænet (for det tema, du er ved at oversætte) til, pas dog på med mellemrum, men husk for pokker, at lade det være det samme hele vejen igennem.

Jeg gør gerne det, at jeg sætter tekstdomænet til det samme som navnet på tema-mappen. Ligger temaet i en mappe med navnet "yellowjacket-10", ja så sætter jeg tekstdomænet til "yellowjacket-10".

Til slut skal vi kalde tekstdomænet, men lad os vente lidt med det.

"_e" er den, der er lettest at komme i gang med, så lad os starte der. Som det fremgår af ovenstående er oversættelsen bygget op efter følgende model:

<?php _e('Original tekst', 'tekstdomæne'); ?>

Det vil sige, at du skal lede .php-filerne igennem efter alle tekst-strenge (som hører under "_e") og sætter <?php _e(' foran og ', 'tekstdomæne'); ?> bagefter.

__ awaits…
Men der er jo stadig "__" tilbage. Her er det straks lidt mere tricky. "__" skal bruges ved alle de oversættelser, der (af WordPress) bliver omkodet til HTML-links, som forklaret ovenfor.

Det vil sige, at du skal bruge "__", når du for eksempel støder på:

<?php next_posts_link('&laquo; Older Entries') ?>

Så skal du sætte selve teksten i en "__" funktion. Men frygt ej, det er ikke besværligt :-)

<?php next_posts_link(__('&laquo; Older Entries', 'tekstdomæne')) ?>

Min hadeoversættelse er, når der skal sættes "__" funktioner omkring antallet af kommentarer til et indlæg. Oprindeligt ser koden (oftest) sådan ud:

<?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?>

Som de hurtige øjne har spottet, er der her tre tekststrenge, der skal oversættes:

  • No Comments &#187;
  • 1 Comment &#187;
  • % Comments &#187;

Og da de alle tre skal oversættes, skal de i hver deres "__" funktion:

<?php comments_popup_link(__('Add Comment &#187;', 'tekstdomæne'), __('1 Comment &#187;', 'tekstdomæne'), __('% Comments &#187;', 'tekstdomæne')); ?>

Her bliver du rigtig glad for Notepad++, hvor du ved at klikke på en parentes kan se, hvor den åbner og lukker. Ellers er det nemt at glemme de to lukkeparenteser til sidst… ;-)

Hvis du synes, det hele lyder lidt for besværligt at komme i gang med, kan du starte med at kigge nogle af de allerede oversatte temaer, eller du kan kigge i standard-temaet (det ligger i \wp-content\themes\default i din WordPress), der er de korrekte funktioner de rigtige steder.

Opdatering! __ bruges også til dato- og tidsformater!
Siden jeg oprindeligt skrev dette indlæg, har jeg oversat en del flere WordPress-temaer og har opdaget behovet for at kunne tilpasse datoformatet fra amerikansk til dansk. Det ser bare dumt ud, når der står "juli 31st" ud for et indlæg.

Når WordPress snakker dato og tid, bruges standardoperatørerne for PHP.

Det vil sige, at "F jS, Y" bliver til (på engelsksproget WordPress) "July 31st" og altså "juli 31st" på dansk. Derfor vil vi (ved at skæve til operatørerne for PHP's dato og tid) have den til at skrive 31. juli, og det gøres ved at skrive "j. F". "Y" kan vi bare lade være, da det giver året, altså "2008" i skrivende stund.

Ergo, når du møder følgende:

<?php the_time('F jS, Y'); ?>

Erstatte det med:

<?php the_time(__('F jS, Y', 'tekstdomæne')); ?>

Så bliver det trukket ud i din oversættelsesfil, og du kan indtaste "j. F Y" (uden anførselstegn) i Poedit, når du kommer dertil.

Det samme gør sig gældende med andre dato- og tidsformater i WordPress. Tilføj hellere listen over PHP-operatører til dato og tid til dine bogmærker, den er god at have ved hånden :-)

Kald tekstdomænet
Når du er færdig med at sætte strengene i "__" og "_e" funktioner, skal du kalde det tekstdomæne, som du har valgt. Hvis der ikke er det samme tekstdomæne på alle strengene, bliver strengene med det forkerte tekstdomæne ikke oversat.

Men for at få det til at virke, er du først og fremmest nødt til at kalde tekstdomænet. Det gør du ved at gå ind i "functions.php"-filen i det tema, du vil oversætte. I den første sætning (efter "<?" — så teknisk set er det linie #2) skriver du:

load_theme_textdomain('tekstdomæne');

Når alt dette er gjort, skal du i gang med selve oversættelsen. Her skal du bruge Poedit, som gerne skulle være installeret på din maskine nu.

  • Åbn Poedit
  • "File" » "New catalog…"
  • Under "Project info" beskriver du nu oversættelsen og vælger sprog ("Danish"), land ("DENMARK") og tegnsæt ("UTF-8").
  • Under paths klikker du på "New item" og skriver stien til WordPress-temaet — det letteste er at kopiere den ind fra din Stifinder, så er du sikker på, det er den rigtige!)
  • Under keywords skal du trykke "New item" og skrive "__". Tryk på "New item" igen og skriv "_e".
  • Når det hele er på plads, klikker du på "OK"

Poedit scanner nu .php-filerne igennem for forekomster af "__" og "_e" og trækker tekststrengene ind.

Nu er det bare lige ud ad landevejen at oversætte tekststrengene. Når du er færdig har du, som nævnt i starten af dette indlæg, en .po- og .mo-fil.

Og så skulle dit WordPress-tema gerne være oversat :-)

BEMÆRK: Til trods for al det hårde arbejde, kommer din oversættelse ikke frem, hvis din blog ikke er sat til dansk. Hvis den ikke er det, gør du det i din "wp-config.php"-fil, som WordPress oprettede, da det blev installeret.

I linjen med "WPLANG" skal der stå:

define ('WPLANG', 'da_DK');

Jeg satser på at vende jeg tilbage med en lignende guide til oversættelse af WordPress-plugins på et senere tidspunkt…jeg kan dog ikke love noget tidspunkt i disse ferie-tider :-)