Skip to content

Kapitel 13: Internationalisierung (Übersetzungen)

13.1 Was ist Internationalisierung (i18n)?

Internationalisierung bedeutet, dass Ihr Theme übersetzbar gemacht wird. Lokalisierung bedeutet, dass Ihr Theme in eine spezifische Sprache übersetzt wird.

Warum i18n wichtig ist?

  • ✅ Macht Ihr Theme für Menschen weltweit nutzbar
  • ✅ Erhöht die Reichweite
  • ✅ Erforderlich für WordPress.org Theme-Repository

13.2 __() und _e() Funktionen verwenden

__() - Rückgabe (Return)

Verwenden Sie __(), wenn Sie die übersetzte Zeichenkette speichern oder verarbeiten möchten.

php
$title = __('Mein Titel', 'mein-theme');
echo $title;

_e() - Direkte Ausgabe (Echo)

Verwenden Sie _e(), wenn Sie die übersetzte Zeichenkette direkt ausgeben möchten.

php
_e('Mein Titel', 'mein-theme');
// Equivalent zu:
echo __('Mein Titel', 'mein-theme');

Text Domain (Text-Domäne)

Die Text-Domäne muss in style.css definiert sein:

Text Domain: mein-theme

In Code:

php
_e('Suche', 'mein-theme');

13.3 Häufige i18n-Funktionen

1. __() und _e()

php
$string = __('Hallo Welt', 'mein-theme');
_e('Hallo Welt', 'mein-theme');

2. _x() - Mit Kontext

Wenn ein Wort mehrdeutig ist, verwenden Sie _x() mit Kontext.

php
// "Post" kann "Beitrag" oder "Senden" bedeuten
$x = _x('Post', 'noun', 'mein-theme');   // Beitrag
$y = _x('Post', 'verb', 'mein-theme');   // Senden

3. _n() - Singular/Plural

Für Mehrzahl-Unterscheidung.

php
echo _n('1 Kommentar', '% Kommentare', $count, 'mein-theme');
// Wenn $count = 1: "1 Kommentar"
// Wenn $count = 5: "5 Kommentare"

4. esc_html__() - Escaped HTML

Für sichere Ausgabe (verhindert XSS).

php
echo esc_html__('Hallo Welt', 'mein-theme');

5. esc_attr__() - Escaped Attribute

Für HTML-Attribute.

php
<input value="<?php echo esc_attr__('Suche', 'mein-theme'); ?>">

13.4 Sprachdateien (.po, .mo) erstellen

Schritt 1: languages/ Ordner erstellen

mein-theme/
├── languages/
│   ├── mein-theme-de_DE.po
│   ├── mein-theme-de_DE.mo
│   └── mein-theme.pot

Schritt 2: .pot Datei generieren

Ein .pot (Portable Object Template) ist eine Vorlage für Übersetzungen.

Mit Plugin:

  • Loco Translate (Kostenlos)
  • Poedit (Premium)

Manuell:

Verwenden Sie das Kommandozeilen-Tool wp-cli:

bash
wp i18n make-pot . languages/mein-theme.pot

Schritt 3: Übersetzung erstellen (.po und .mo)

.po Datei (Plain Text):

msgid "Suche"
msgstr "Search"

.mo Datei (Machine Object - kompiliert):

Wird aus .po generiert.

Mit Poedit:

  1. Öffnen Sie die .pot Datei
  2. Übersetzen Sie die Zeichenketten
  3. Speichern (.po und .mo werden generiert)

Schritt 4: Sprachdateien laden

Fügen Sie in functions.php hinzu:

php
function mein_theme_load_textdomain() {
    load_theme_textdomain('mein-theme', get_template_directory() . '/languages');
}
add_action('after_setup_theme', 'mein_theme_load_textdomain');

13.5 Theme ins Deutsche übersetzen

Schritt 1: de_DE.po Datei erstellen

mein-theme/
├── languages/
│   └── mein-theme-de_DE.po

Schritt 2: Übersetzungen hinzufügen

Öffnen Sie mein-theme-de_DE.po mit Poedit oder einem Texteditor:

msgid "Search"
msgstr "Suche"

msgid "Posted on"
msgstr "Veröffentlicht am"

msgid "By"
msgstr "Von"

Schritt 3: .mo Datei generieren

In Poedit: Datei → Speichern (.mo wird automatisch generiert).

Oder mit Kommandozeile:

bash
msgfmt mein-theme-de_DE.po -o mein-theme-de_DE.mo

Schritt 4: WordPress auf Deutsch umstellen

  1. Gehen Sie zu Einstellungen → Allgemein
  2. Wählen Sie "Deutsch" als Sprache
  3. Speichern

13.6 WP_CLI für i18n verwenden

.pot Datei generieren

bash
wp i18n make-pot . languages/mein-theme.pot

Übersetzung erstellen

bash
wp i18n make-mo languages/mein-theme-de_DE.po

13.7 Häufige Fehler

Fehler: Übersetzungen werden nicht angezeigt

Lösung:

  1. Überprüfen Sie, ob Text Domain in style.css definiert ist
  2. Überprüfen Sie, ob load_theme_textdomain() in functions.php aufgerufen wird
  3. Überprüfen Sie, ob die .mo Datei im richtigen Verzeichnis ist

Fehler: Text Domain vergessen

Lösung:

php
// Falsch ❌
_e('Suche');

// Richtig ✅
_e('Suche', 'mein-theme');

📝 Übung 13: Theme übersetzbar machen

Ziel: Machen Sie Ihr Theme vollständig übersetzbar.

Schritte:

  1. Ersetzen Sie alle hartkodierten Zeichenketten durch __() oder _e()
  2. Fügen Sie load_theme_textdomain() in functions.php hinzu
  3. Generieren Sie eine .pot Datei
  4. Erstellen Sie eine deutsche Übersetzung (.po, .mo)

✅ Zusammenfassung

In diesem Kapitel haben Sie gelernt:

  • ✅ Was Internationalisierung ist
  • __() und _e() zu verwenden
  • .pot, .po, .mo Dateien zu erstellen
  • ✅ Ihr Theme ins Deutsche zu übersetzen

Nächstes Kapitel: Wir lernen Sicherheit & Performance.

➡️ Zu Kapitel 14: Sicherheit & Performance →

Frei für alle Anfänger