[ Content | Sidebar ]

Tilrettelegge temaer og innstikk for oversettelse

Når man lager temaer så er det mest naturlig å la språket være på engelsk, men nå er det ikke alltid slik at bloggen temaet skal brukes på er engelsk, så derfor er det greit å tilrettelegge temaet for oversettelse.

Helt enkelt gjøres dette ved at i stedet for å skrive all tekst rett ut, så legger man teksten inn i kode av typen <?php _e('text'); ?>

Så for eksempel i stedet for å sette opp meny overskrifter til <h2>Categories</h2> så blir koden <h2><?php _e('Categories'); ?></h2>

Når det gjelder tekst som skrives inne i template kode, så bruker man __('text'). Et enkelt eksempel er koden for redigeringslinken man gjerne ser i poster når man er innlogget (edit_post_link ). Uten støtte for oversettelse kan denne koden ser omtrent slik ut:

<?php edit_post_link('Edit'); ?>

For å legge inn støtte må koden omgjøres til:

<?php edit_post_link(__('Edit')); ?>

I template koder med flere tekststrenger, så skal disse separeres med komma, som eksempel kan vi bruke comments_number som viser antall kommentarer til en post:

<?php comments_number(__('No Comments'),__('One Comment'),__('% Comments') );?>

Til sist er det det de mer komplekse kodene, hvor teksten er en del av selve koden, for eksempel opplisting av Sider wp_list_pages

Denne koden kan i noen tilfeller se slik ut:

<?php wp_list_pages('title_li=<h2>Pages</h2>' ); ?>

For å tilrette legge dette for oversetting må man bruke '. __('text') .' dvs. at man setter koden mellom '. og .' så i eksempelet med opplistingen får vi:

<?php wp_list_pages('title_li=<h2>'. __('Pages') .'</h2>' ); ?>

Det er akkurat samme systemet for innstikk, men det hender seg at man må bruke " i stedet for ' (apostrof).

Hvis du nå ønsker at folk skal kunne lage en språkpakke for ditt tema eller innstikk spesielt, må du ta i bruk funksjonene load_theme_textdomain for temaer og load_plugin_textdomain for plugins.

For temaer må du sette inn følgende kode helt i toppen på header.php:

<?php load_theme_textdomain('temanavn');?>

“temanavn” må da byttes ut med noe som reflekterer navnet på temaet ditt. For eksempel hvis temaet heter “Fint Tema”, så bruker du “finttema”.

Har du en functions.php fil i temaet ditt kan du legge inn load_theme_textdomain('temanavn'); helt øverst i fila, rett etter <?php

Når du nå skal gi støtte for oversettelse i temaet ditt, så må du legge til tekstdomenet (textdomain) sammen med tekststrengen din:
<h2><?php _e('Categories','temanavn'); ?></h2>

<?php comments_number(__('No Comments','temanavn'),__('One Comment','temanavn'),__('% Comments','temanavn') );?>

Når det gjelder innstikk så er prinsippet det samme men man bruker da i stedet load_plugin_textdomain('innstikknavn');

For de som da skal lage en språkpakke/ fil for enten temaet eller innstikket, så skal de ha navn som temanavn-*.mo eller innstikknavn-*.mo. En fil for norsk bokmål vil da bli hetende, temanavn-nb_NO.mo.

Relaterte lenker

Published May 30, 2007

Filed in Uncategorized

Tags: , , , , ,

RSS Comments 2 Comments

- Trackback

  1. Comment by Stian

    Supert :D Jeg skulle til å spørre om noen hadde erfaringer med dette i forumet for noen dager siden, men glemte det av. Er det noen finurlig måte man kan gjøre dette på dersom man ønsker å bruke samme språkfila på flere temaer? Jeg tenker jeg skal ha den samme oversettelsen på alle temaer på Neuro. Greit å slippe å sitte å legge inn språkfila i 40+ temaer etterhvert :P

    May 30, 2007 @ 2:34 pm

  2. Comment by Kristin

    Du kan lage din egen spesialsydde nb_NO.mo, hvis du da har tilgang til et program ala. poEdit. Men du må først titte gjennom temaer og innstikk og sjekke hvilke som har støtte og hvilke som ikke har det først.

    Det står en del tips om hvordan du lager en oversettelse i ett par av de relaterte linkene jeg har lagt ved artikkelen.

    May 30, 2007 @ 2:50 pm