Internationalisering och lokalisering i WordPress

När du utvecklar ett WordPress-tema från scratch så är det en bra ide att internationalisera temat och göra det tillgängligt översättning. Det kommer att låta människor från hela världen använda det på vilket språk de behöver.

Vad är internationalisering (i18n) och lokalisering (l10n)?

I18n är en process som gör ditt tema översättningsbart och det är utvecklarens jobb att få det klart. Den förkortas ofta som i18n eftersom det helt enkelt finns 18 bokstäver mellan i och n.

L10n hänvisar till processen som faktiskt översätter ditt tema till ett annat språk. Det här kan göras av temats användare. För att lokalisera temat måste det först internationaliseras. Lokalisering förkortas som l10n eftersom det finns 10 bokstäver mellan l och n.

Gettext libraries

WordPress använder Gettext libraries för att loada översättningarna. Den har tre typer av filer:

POT (Portable Object Template): Det första steget i översättningsprocessen. Den här filen är ansvarig för att generera strings som behöver översättas. Den innehåller dock inte några översättningar i sig självt.

PO (Portable Object): Dessa filer innehåller däremot översättningarna och ursprungliga strings.

MO (Machine Object): Dessa filer används av funktioner för att loada (ladda) översättningarna. De är viktigast men inte human-readable.

Förbereda temat

Att förbereda ditt tema för internationalisering är inte så komplicerat som det kan tyckas. WordPress tillhandahåller redan en hel uppsättning praktiska funktioner för det. Först och främst måste vi inkludera en funktion i functions.php som kommer att ladda översättningarna:

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' );

Nästa steg är att redigera text strings. För att göra strings översättningsbara bör de inte vara hårdkodade. Wrappa de ursprungliga strängarna i ett av WordPress localization functions. De vanligaste funktionerna:

__()          /* returns the translation of its argument */

_e()          /* echos the string to the browser */

esc_html__()  /* escapes and returns the translation of its argument */

esc_html_e()  /* escapes and echos the translation of its argument */

Exempel:

<h1><?php __( 'Translatable text goes here', 'theme-domain' ); ?></h1>
<h3><?php esc_html__( 'Translatable text goes here', 'theme-domain' ); ?></h3>

Ibland behöver du skjuta ut variabler, datum eller plurals i dina strings. WordPress tillhandahåller lokaliseringsfunktioner för alla dessa fall. Kolla hela listan här.

När dina temafiler är klara så är nästa steg att generera POT-filen. Det finns ett par sätt att generera en POT-fil som beskrivs här. Jag brukar använda Gulp task runner när jag utvecklar WordPress-teman, så jag skapar även POT-fil med hjälp av Gulp (se gulp-wp-pot-paketet).

npm install --save-dev gulp-wp-pot

var gulp = require('gulp');
var wpPot = require('gulp-wp-pot');
 
gulp.task('default', function () {
    return gulp.src('src/*.php')
        .pipe(wpPot( {
            domain: 'domain',
            package: 'Example project'
        } ))
        .pipe(gulp.dest('file.pot'));
});

Pluginen letar efter strings som är insläppta i lokaliseringsfunktionerna och skapar POT-filer med det. POT-filen ska levereras tillsammans med temat så att användarna kan översätta filer med Poedit.

Poedit har öppen källkod och är det mest populära verktyget för att översätta WordPress-teman. Den tar en POT-fil och genererar PO och MO-filer på lämpligt språk.

Nu är ditt tema redo för översättning!

Internationalisering är något du som utvecklare alltid bör göra, det är idag snarare ett måste. Om du planerar att skicka in ditt tema till WordPress.org är det också ett krav.

/ Anastasia

Alla artiklar