Appearance
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-themeIn 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'); // Senden3. _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.potSchritt 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.potSchritt 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:
- Öffnen Sie die
.potDatei - Übersetzen Sie die Zeichenketten
- Speichern (
.pound.mowerden 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.poSchritt 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.moSchritt 4: WordPress auf Deutsch umstellen
- Gehen Sie zu Einstellungen → Allgemein
- Wählen Sie "Deutsch" als Sprache
- 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.po13.7 Häufige Fehler
Fehler: Übersetzungen werden nicht angezeigt
Lösung:
- Überprüfen Sie, ob
Text Domaininstyle.cssdefiniert ist - Überprüfen Sie, ob
load_theme_textdomain()infunctions.phpaufgerufen wird - Überprüfen Sie, ob die
.moDatei 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:
- Ersetzen Sie alle hartkodierten Zeichenketten durch
__()oder_e() - Fügen Sie
load_theme_textdomain()infunctions.phphinzu - Generieren Sie eine
.potDatei - Erstellen Sie eine deutsche Übersetzung (
.po,.mo)
✅ Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅ Was Internationalisierung ist
- ✅
__()und_e()zu verwenden - ✅
.pot,.po,.moDateien zu erstellen - ✅ Ihr Theme ins Deutsche zu übersetzen
Nächstes Kapitel: Wir lernen Sicherheit & Performance.
