Om je WordPress website in meerdere talen beschikbaar te maken is alleen een plugin als qTranslate of WPML niet voldoende. In elke theme staat namelijk wel wat tekst dat door die plugins niet vertaald wordt (denk aan X reacties bijvoorbeeld).
Theme bestanden aanpassen
Allereerst moeten we alle bestanden van de theme nalopen en aanpassen waar nodig. Er zijn drie functies die in de theme gebruikt kunnen worden voor het vertalen:
-
__('tekst om te <a title="Zie ook Poedit gebruiken" href="http://hiranthi.nl/tutorials/poedit/">vertalen</a>')vertaald de tekst zonder het meteen weer te geven, moet dus nog ge-echo’t worden (voor gebruik in PHP). [wp]_e[/wp]('tekst om te <a title="Zie ook Je WordPress plugin vertaalbaar maken" href="http://hiranthi.nl/tutorials/wordpress-plugin-vertaalbaar/">vertalen</a>')vertaald de tekst en geeft deze ook meteen weer.[wp]__ngettext[/wp]('enkel', 'meervoud', getal)voor het vertalen van tekst die in meervoud en enkelvoud gebruikt kan worden (bijv. 1 bericht | 2 berichten). Deze zul je in de meeste gevallen niet gebruiken.
Hiervoor moet Meervoudsvormen in Poedit bij de project instellingen wel ingevuld zijn!
Gebruik van de functies
Hier onder van alle drie de functies een voorbeeld hoe je het kan gebruiken:
<?php echo __('Laat een bericht achter', 'mijn_theme'); ?><?php _e('Laat een bericht achter', 'mijn_theme'); ?><?php __ngettext('%d reactie', '%d reacties', 12, 'mijn_theme'); ?>Het ‘mijn_theme’ moet uniek zijn (bijv. mapnaam van je theme).
Om een ‘praktijkvoorbeeld’ te geven zie je hieronder de archive.<a title="Zie ook WordPress in eigen map installeren" href="http://hiranthi.nl/tutorials/wordpress-in-eigen-map-installeren/">php</a> van de standaard WordPress theme (default) die is aangepast:
<?php
/**
* @package WordPress
* @subpackage Default_Theme
*/
get_header();
?>
<div id="content" class="narrowcolumn" role="main">
<?php if (have_posts()) : ?>
<?<a title="Zie ook De WYSIWYG editor bij je theme laten passen" href="http://hiranthi.nl/tutorials/wysiwyg-editor-theme/">php</a> $post = $posts[0]; // Hack. Set $post so that the_date() works. ?>
<?php /* If this is a category archive */ if (is_category()) { ?>
<h2 class="pagetitle"><?php _e('Archive for the','mijn_theme') ?> ‘<?php single_cat_title(); ?>’ <?php _e('Category','mijn_theme') ?></h2>
<?php /* If this is a tag archive */ } elseif( is_tag() ) { ?>
<h2 class="pagetitle"><?php _e('Posts Tagged','mijn_theme')?> ‘<?php single_tag_title(); ?>’</h2>
<?php /* If this is a daily archive */ } elseif (is_day()) { ?>
<h2 class="pagetitle"><?php _e('Archive for','mijn_theme') ?> <?php the_time(__('F jS, Y','mijn_theme')); ?></h2>
<?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
<h2 class="pagetitle"><?php _e('Archive for','mijn_theme') ?> <?php the_time('F, Y'); ?></h2>
<?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
<h2 class="pagetitle"><?php _e('Archive for','mijn_theme') ?> <?php the_time('Y'); ?></h2>
<?php /* If this is an author archive */ } elseif (is_author()) { ?>
<h2 class="pagetitle"><?php _e('Author Archive','mijn_theme') ?></h2>
<?<a title="Zie ook PHP bestand voor afmelden e-mailadres" href="http://hiranthi.nl/freebies/php-bestand-voor-afmelden-e-mailadres/">php</a> /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
<h2 class="pagetitle"><?php _e('Blog Archives','mijn_theme') ?></h2>
<?php } ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link(__('« Older Entries','mijn_theme')) ?></div>
<div class="alignright"><?php previous_posts_link(__('Newer Entries »','mijn_theme')) ?></div>
</div>
<?php while (have_posts()) : the_post(); ?>
<div <?php post_class() ?>>
<h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php _e('Permanent Link to','mijn_theme') ?> <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
<small><?php the_time(__('l, F jS, Y','mijn_theme')) ?></small>
<div class="entry">
<?php the_content() ?>
</div>
<p class="postmetadata"><?php the_tags(__('Tags:','mijn_theme'), ', ', ''); ?> <?php _e('Posted in','mijn_theme') ?> <?php the_category(', ') ?> | <?php edit_post_link(__('Edit','mijn_theme'), '', ' | '); ?> <?php comments_popup_link(__('No Comments »','mijn_theme'), __('1 Comment »','mijn_theme'), __('% Comments »','mijn_theme')); ?>
</div>
<?php endwhile; ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link(__('« Older Entries','mijn_theme')) ?></div>
<div class="alignright"><?php previous_posts_link(__('Newer Entries »','mijn_theme')) ?></div>
</div>
<?<a title="Zie ook TimThumb gebruiken in je theme" href="http://hiranthi.nl/tutorials/timthumb-gebruiken-wordpress-theme/">php</a> else :
if ( is_category() ) { // If this is a category archive
printf("
<h2 class='center'>'.__('Sorry, but there aren't any posts in the %s category yet.','mijn_theme').'</h2>
", single_cat_title('',false));
} else if ( is_date() ) { // If this is a date archive
echo("
<h2>'.__('Sorry, but there aren't any posts with this date.','mijn_theme').'</h2>
");
} else if ( is_author() ) { // If this is a category archive
$userdata = get_userdatabylogin(get_query_var('author_name'));
printf("
<h2 class='center'>'.__('Sorry, but there aren't any posts by %s yet.','mijn_theme').'</h2>
", $userdata->display_name);
} else {
echo("
<h2 class='center'>'.__('No posts found.','mijn_theme').'</h2>
");
}
get_search_form();
endif;
?></div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Poedit
Om ervoor te zorgen dat de teksten die in de bovengenoemde functies worden vertaald heb je een .mo bestand nodig, hetzelfde type bestand dat je gebruikt om WordPress zelf te vertalen. Om dit bestand te maken heb je een programma als Poedit nodig.
Met behulp van Poedit maak je een .po bestand aan, dit bestand kun je openen in Poedit om aan te passen en .mo bestanden van te maken. Lees hiervoor mijn Poedit gebruiken post.
Bestand opslaan
Vergeet uiteraard niet het bestand op te slaan. De namen v/d taalbestanden moeten overeenkomen met de namen v/d WordPress taalbestanden (bijv. nl_NL.mo).
Waar je het bestand neerzet is afhankelijk van wat je in je functions.php neerzet, zie hier onder.
functions.php
Voeg de volgende code toe aan je functions.php:
<?php load_theme_textdomain('mijn_theme'); ?>Met bovenstaande methode moet je je .mo bestand in de root van je theme-map hebben staan. Wil je ‘m ergens anders? Dat kan, dan moet je het pad ook opgeven:
<?php load_theme_textdomain('mijn_theme','pad/naar/map/waar/bestand/in/staat'); ?>



Recente reacties