So internationalisieren Sie Ihre WordPress-Website
Veröffentlicht: 2022-03-10Am 30. September 2017 kam die internationale WordPress-Community für 24 Stunden zusammen, um das WordPress-Ökosystem zu übersetzen. Zum dritten Mal verschmolz der #WPTranslationDay einen ganztägigen Übersetzungsmarathon mit digitalen und Contributor-Day-Events, die darauf abzielten, den Wert der Schaffung zugänglicher Erfahrungen für globale Benutzer zu fördern, besser bekannt als „Lokalisierung“.
Als Open-Source-Community sollten wir uns alle bemühen, unsere Open-Source-Beiträge zu lokalisieren. Bevor Sie Ihre digitalen Assets jedoch transkribieren können, müssen Sie Ihre Codebasis internationalisieren.
Die Begriffe „Internationalisierung“ und „Lokalisierung“ werden oft synonym verwendet, obwohl sie technisch gesehen zwei unterschiedliche Aspekte des Übersetzungsprozesses darstellen.
- Internationalisierung (I18N) ist der Prozess der Internationalisierung oder Anpassung Ihres Themes oder Plugins, um es in jede Sprache der Welt zu übersetzen.
- Lokalisierung (L10N) ist der nachfolgende Prozess der Lokalisierung oder Übersetzung Ihrer internationalisierten Tools in eine bestimmte Sprache.
WordPress ist derzeit für über 65 Sprachen vollständig lokalisiert und bietet Teilübersetzungen für weitere 95 Sprachen. Die internationale Nutzung nimmt weiter zu, da mehr Lokalisierungen eingeführt werden.
Nicht-englischsprachige WordPress-Benutzer übertrafen 2014 die englischsprachigen Benutzer, und sie verwässern unbeabsichtigt weiterhin den Anteil der englischen Benutzer am Kuchen im Jahr 2017, da Bemühungen wie #WPTranslateDay wachsen.
Da WordPress sprachlich immer zugänglicher wird, ist die Kenntnis von I18N & L10N für Plugin- und Theme-Entwickler unerlässlich, um in der globalen WordPress-Wirtschaft erfolgreich zu sein. Für die Skalierung von Unternehmen können diese Entwicklungsfähigkeiten Türen zu ausländischen Märkten öffnen. Die Barrierefreiheit im Internet, einschließlich der sprachlichen Barrierefreiheit, ist gut fürs Geschäft und besser für die Menschen.
Als Fortsetzung des #WPTranslationDay finden Sie hier eine aktualisierte Anleitung zur Internationalisierung Ihrer WordPress-Plugins und -Themes.
Hier ist ein kurzer Überblick über den Prozess, den wir heute untersuchen werden.
- Entdeckung
- Lernen Sie Übersetzungsdateien kennen
- POT-Datei
- PO-Datei
- MO-Datei
- GlotPress & Sprachpakete
- Sichern und bereiten Sie Ihre Umgebung vor
- Lernen Sie Übersetzungsdateien kennen
- Plugin I18N
- Plugin-Header
- Textdomäne laden
- Zeichenfolgen-Audit
- POT-Datei generieren
- Thema I18N
- Thema-Kopfzeile
- Textdomäne laden
- Zeichenfolgen-Audit
- POT-Datei generieren
- JavaScript I18N
- Zusätzliche Ressourcen
Entdeckung
Lernen Sie Übersetzungsdateien kennen
WordPress verwendet die GNU gettext-Bibliothek, um I18N zu erleichtern.
Machen wir uns zunächst mit den Gettext-Übersetzungsdateien vertraut, die während des Prozesses generiert werden.
Portable Object Template File (POT)
Während des I18N-Prozesses verwenden wir ein Tool, um internationalisierte Zeichenfolgen zu finden und eine POT-Datei zu generieren, die den gesamten übersetzbaren Text in Ihren Plugins und Ihrem Design enthält.
Portable Objektdatei (PO)
Im Aussehen gibt es keine bemerkenswerten Unterschiede zwischen einer POT-Datei und einer PO-Datei . Sie sind syntaktisch gleich und unterscheiden sich nur durch ihre beabsichtigten Zwecke.
Nach dem Generieren einer POT-Datei sollten Textzeichenfolgen von einem Übersetzer in Ihre bevorzugte Sprache interpretiert werden. Die PO-Datei enthält schließlich Textzeichenfolgen in Ihrer Muttersprache sowie die entsprechenden Übersetzungen.
Maschinenobjektdatei (MO)
Schließlich wird die PO-Datei in ein maschinenlesbares Dokument oder eine Maschinenobjektdatei umgewandelt. Diese Datei wird in deinem Theme- oder Plugin-Verzeichnis gespeichert, damit WordPress sie aufrufen kann, wenn es an der Zeit ist, eine übersetzte Version bereitzustellen.
Sichern und bereiten Sie Ihre Umgebung vor
Bevor Sie ein Markup ändern, erstellen Sie eine Sicherungskopie Ihres Plugins, Designs oder Ihrer gesamten Website (was auch immer Sie internationalisieren!) und bringen Sie Ihre Entwicklungsumgebungen in Ordnung.
Stellen Sie sicher, dass Sie ein schnelles Plugin-Audit durchführen, wenn Sie planen, Ihre Website zu lokalisieren. Löschen oder deaktivieren Sie alle Plugins, die Sie nicht mehr aktiv verwenden. Dieses schnelle Audit wird Ihnen langfristig Zeit sparen.
Internationalisieren Sie Ihre Plugins
PLUGIN-KOPF
Zuerst aktualisieren wir den Plugin-Header. Insbesondere die Textdomäne und der Domänenpfad .
Beispiel-Plugin-Header
/* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */
Textdomäne
Die Textdomäne ist eine eindeutige Kennung für WordPress, um den gesamten Text zu erkennen, der zu einem Plugin gehört, und muss mit dem Slug des Plugins übereinstimmen .
Dies ist besonders wichtig, wenn Ihr Plugin auf WordPress.org gehostet wird; diese müssen übereinstimmen, damit GlotPress Übersetzungen für Ihr Plugin richtig importieren kann.
In unserem Beispiel heißt die Plugin-Datei rad-plugin.php und die Textdomäne ist rad-plugin
Möglicherweise haben Sie bereits eine Textdomäne festgelegt. Wenn Sie dies nicht tun, denken Sie daran, Bindestriche und keine Unterstriche zu verwenden.
Domänenpfad
Der Domänenpfad ist der Ordner, in dem die endgültigen Übersetzungsdateien gespeichert werden. Sie sollten einen neuen Ordner innerhalb des Plugin-Verzeichnisses erstellen, z. B. /languages/ , und den Domänenpfad aktualisieren, damit WordPress genau weiß, wo es nach Übersetzungsdateien suchen muss.
TEXTDOMÄNE LADEN
Als nächstes laden wir die Textdomäne, indem wir die folgende Funktion zu unserem Code hinzufügen.
load_plugin_textdomain()
load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );
Wenn eine Übersetzungsdatei für die Sprache des Benutzers verfügbar ist, weist die Funktion Textdomäne laden WordPress an, sie zu liefern.
Parameter
- $domain — Textdomain (erforderlich)
- $abs_rel_path — false (optional, veraltet)
- $plugin_rel_path — /languages/ (optional, dies ist der relative Pfad zu dem Verzeichnis, das Ihre Übersetzungsdateien enthält. In unserem Beispiel /languages/. Ab Version 4.6 sucht WordPress nach diesen Dateien im /languages/-Verzeichnis des Plugins, falls dies der Fall ist bleibt unbestimmt.)
Rad-Plugin-Beispiel
Um die Textdomäne zu laden, hängen wir uns in die Aktion „plugins_loaded“ ein.
add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }
STRINGS-PRÜFUNG
Der nächste Schritt besteht darin, alle Textzeichenfolgen des Plugins in Übersetzungsfunktionen einzuschließen.
Die gebräuchlichsten Übersetzungsfunktionen sind __()
zum Zurückgeben einer übersetzten Zeichenfolge und _e()
zum Zurückgeben einer übersetzten Zeichenfolge.
Rad-Plugin-Beispiel
__() $text = __( 'Super Rad!', 'rad-plugin' );
Diese Funktion funktioniert für einfache Übersetzungen. Es berücksichtigt zwei Parameter; die Textzeichenfolge und die Textdomäne .
_e( 'Super Rad!', 'rad-plugin' );
Diese Funktion gibt einfach den Wert wieder. Ansonsten funktioniert es genauso wie die vorherige Funktion.
Es gibt eine Reihe zusätzlicher Übersetzungsfunktionen, die bei Bedarf ebenfalls verwendet werden sollten.
Andere grundlegende Funktionen
__() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()
Datums- und Zahlenfunktionen
number_format_i18n() date_i18n()
Escape-Funktionen
Vergessen Sie nicht, alle ausgegebenen Daten mit den folgenden Escape-Funktionen zu maskieren.
esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()
In unserem Rad-Beispiel könnten wir eine Plug-in-Code-Zeile haben, die so aussieht:
function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }
ERSTELLEN SIE EINE POT-DATEI
Der letzte Schritt besteht darin, eine POT-Datei zu erstellen. Es gibt ein paar verschiedene Tools, um diese Art von Datei zu generieren, aber für dieses Tutorial halten wir uns an die Empfehlungen aus dem WordPress-Codex und verwenden Poedit, eine benutzerfreundliche GUI zum Verwalten von Übersetzungen.
Hinweis : Wenn sich Ihr Plugin oder Design bereits im WordPress.org-Repository befindet, können Sie diesen Vorgang überspringen und eine POT-Datei von der Admin-Seite generieren. In diesem Fall ist es nicht erforderlich, für jede Sprache eine .po-Datei zu generieren. Die Einführung von GlotPress und Sprachpaketen im Jahr 2015 vereinfachte den Übersetzungsprozess; Alles, was für GlotPress benötigt wird, ist die .pot-Datei, die von WordPress.org importiert und den Übersetzern über das translate.wordpress.org-Dashboard bereitgestellt wird. Mitarbeiter aus der ganzen Welt werden dieses Dashboard verwenden, um am #WPTranslateDay Übersetzungen bereitzustellen.
Laden Sie Poedit herunter
Poedit konfigurieren
Übersetzungseigenschaften
Gehen Sie zunächst zu Datei > Neu . Wählen Sie dann die Muttersprache Ihres Plugins und klicken Sie auf OK .
Wählen Sie als Nächstes Katalog > Neu aus. Geben Sie den Projektnamen, die Version, den Ansprechpartner und die Sprache ein.
Pfade
Wählen Sie als Nächstes die Registerkarte Quellpfade aus. Wenn es sich um eine neue Datei handelt, müssen Sie die Datei zuerst speichern.
Nach unserem Beispiel würden wir Datei > Speichern unter auswählen, um als .po-Datei im Verzeichnis /languages/ innerhalb des rad-plugins zu speichern. Auch hier sollte der Dateiname mit dem Slug Ihres Plugins übereinstimmen.
rad-plugin.po
Geben Sie nach dem Speichern den relativen Pfad zu dem Verzeichnis ein, in dem sich Ihre Übersetzungsdateien befinden werden. In diesem Szenario Sprachen .
Schlüsselwörter
Wählen Sie die Registerkarte Quellen-Keywords aus. Klicken Sie auf das Symbol + , um die entsprechenden Funktionsnamen hinzuzufügen.
Spickzettel
__ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x
Anschließend können Sie auf OK und dann auf Datei > Speichern klicken.
Poedit speichert sowohl eine .mo- als auch eine .po-Datei. Sie können die .pot-Datei erstellen, indem Sie die .po-Datei kopieren und eine .pot-Erweiterung hinzufügen. Internationale Benutzer können die .pot-Vorlagendatei verwenden, um die Zeichenfolgen in ihre Sprache zu übersetzen.
Internationalisieren Sie Ihr Thema
Der Prozess zur Internationalisierung Ihres Themes ist praktisch identisch mit I18N für Plugins. Wir beginnen mit der Überprüfung des Theme-Headers und enden mit der Generierung einer weiteren POT-Datei.
THEMENKOPF
Überprüfen Sie Ihren Design-Header noch einmal, um sicherzustellen, dass Ihre Textdomäne und Ihr Domänenpfad festgelegt sind.
Beispiel-Design-Header
/* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */
TEXTDOMÄNE LADEN
Der nächste Schritt besteht darin, diesmal eine Textdomain in die Datei functions.php Ihres Themes zu laden.
load_theme_textdomain()
load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );
Damit diese Dateien geladen werden können, müssen Sie sie mit der Aktion after_setup_theme registrieren.
add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }
STRINGS-PRÜFUNG
Zeit für ein weiteres Streicher-Audit! An dieser Stelle sollten Sie mit den grundlegenden Übersetzungsfunktionen vertraut sein.
Werfen wir einen Blick auf einige kniffligere Übersetzungen.
Platzhalter
PHP-Variablen wie im Beispiel unten werden ohne die Verwendung von Platzhaltern nicht richtig übersetzt.
echo "We added $count rad points.";
printf() & sprintf()
Diese Funktionen verwenden Platzhalter wie %s oder %d für Ganzzahlen, um eine Textzeichenfolge mit dynamischem Inhalt zu interpolieren.
Rad-Design-Beispiel
/* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );
Plural
Die Funktion _n()
kann komplexere Zeichenfolgenübersetzungen wie Pluralformen verarbeiten, wird jedoch aufgrund ihrer Einschränkungen innerhalb von Übersetzungssoftware nicht empfohlen. Stattdessen können Sie eine einfache if-Anweisung schreiben, um zwischen Wörtern im Singular und Plural zu unterscheiden.
Rad-Plugin-Beispiel
If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }
POT-DATEI ERZEUGEN
Der Prozess zum Generieren von Themen-POT-Dateien ist derselbe wie zum Generieren von Plugin-POT-Dateien. Erkunden Sie unten einige Methoden.
Befehlszeile
Wenn WordPress Trunk und das GNU-Paket gettext installiert sind, können Sie diesen Schritt im Handumdrehen erledigen, indem Sie das Skript makepot.php in der Befehlszeile ausführen.
Öffnen Sie die Befehlszeile und navigieren Sie zum I18N-Tools-Verzeichnis.
cd wpdev/tools/i18n/
Das Skript sollte in etwa so aussehen:
php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot
Das Skript erledigt seine Aufgabe und die fertige Datei rad-theme.pot landet im aktuellen Verzeichnis.
Grunt-Aufgaben
Eine andere Methode zum Erstellen einer POT-Datei besteht darin, Grunt-Tasks mit grunt-wp-i18n oder grunt-pot auszuführen. Task-Runner wie Grunt können viele mühsame Aufgaben automatisieren, wie z. B. das Generieren von POT-Dateien.
Um Ihre POT-Datei zu erstellen, stellen Sie sicher, dass Sie zuerst node.js installiert haben. Installieren Sie dann Grunt über die Befehlszeile in Ihrem Sprachverzeichnis, und los geht's. Jetzt können Sie diese I18N-Befehle schnell ausführen und Ihre Übersetzungsdatei erstellen, ohne den Komfort der Befehlszeile verlassen zu müssen.
JavaScript I18N
Wenn Sie ein moderner Theme- oder Plugin-Entwickler sind, verwenden Sie wahrscheinlich JavaScript, um einige Komponenten Ihres Projekts zu handhaben. wp_localize_script ist eine effektive Funktion zum Extrahieren von PHP-Daten, um sie Ihren Skripten bereitzustellen, und es ist die einzige Möglichkeit, JavaScript innerhalb von WordPress zu übersetzen.
WP_LOCALIZE_SCRIPT()
Diese Funktion ermöglicht es uns, Zeichenfolgen serverseitig in PHP zu lokalisieren und Textzeichenfolgen als JavaScript-Objekt für das Skript bereitzustellen.
wp_localize_script( $handle, $name, $data );
PARAMETER
- $handle – Skript-Handle, für das die Daten verfügbar sein müssen (erforderlich – muss mit dem Handle des Skripts übereinstimmen, für das diese Daten bestimmt sind, siehe Beispiel unten)
- $name — Name des Objekts, das die Daten enthalten soll (erforderlich — sollte eindeutig sein)
- $data — ein Array von Daten, die an das Skript übergeben werden (erforderlich) .
RAD-PLUGIN-BEISPIEL
add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }
ZUGANGSDATEN IN JAVASCRIPT
Das folgende einfache Code-Snippet ist ein Beispiel dafür, wie Sie auf diese Daten in Ihrer JavaScript-Datei zugreifen können.
alert( rad-I18n.message );
Zusätzliche Ressourcen
- I18N für WordPress-Entwickler
- WordPress-Theme-Handbuch: Internationalisierung
- WordPress-Plugin-Handbuch: Internationalisierung
- WordPress.tv: I18N
Verpacken
Glückwünsche! Sie haben gerade Ihr Design und/oder Plugin internationalisiert und es für Menschen aller Muttersprachen zugänglich gemacht, um davon zu profitieren. Unabhängig davon, ob Ihr Projekt über das WordPress-Repository verteilt oder speziell für die Website Ihrer Organisation entwickelt wurde, hat die Internationalisierung Ihrer Dateien von Anfang an nur Vorteile.
- Machen Sie Ihre Open-Source-Beiträge weltweit zugänglich.
- Führen Sie Gespräche mit neuen Kunden in ausländischen Märkten.
- Sparen Sie Zeit und reduzieren Sie zukünftig mühsame Updates.
Immer internationalisieren.