Erfahren Sie, wie Sie String-Pakete für Ihre Plugins und Themes erstellen, um Benutzern zu helfen, Inhalte mit WPML einfach zu übersetzen.
String-Pakete sind Gruppen von Strings, die in einem bestimmten Kontext „gebündelt“ sind. Ihr Zweck ist es, Endbenutzern zu helfen, Inhalte effizienter zu übersetzen, indem die Notwendigkeit entfällt, jeden String einzeln zu übersetzen.
Hier sehen Sie zum Beispiel, wie Benutzer benutzerdefinierte Benutzerfelder mit und ohne ein String-Paket übersetzen würden:
Ohne ein String-Paket

Benutzer müssen Strings einzeln übersetzen, ohne die Option der automatischen Übersetzung.
Mit einem String-Paket

Benutzer können mehrere Strings in einem Durchgang zusammen übersetzen, mit der Option der automatischen Übersetzung.
Wie Sie sehen, vereinfachen String-Pakete den Übersetzungsprozess, indem sie es Benutzern ermöglichen, mehrere benutzerdefinierte Benutzerfelder auf einmal zu übersetzen. Um Ihren Benutzern das beste Übersetzungserlebnis zu bieten, befolgen Sie die unten stehenden Schritte, um Ihre eigenen String-Pakete zu erstellen.
Wenn Sie die vollständige Implementierung von String-Paketen sehen möchten, die wir in den folgenden Schritten behandeln, sehen Sie sich dieses GitHub-Repo an, das das von uns verwendete Test-Plugin enthält.
1. Übersetzbare Inhalte identifizieren
Der erste Schritt besteht darin, Inhalte zu identifizieren, die Benutzer übersetzen möchten, wie z. B. Titel, Beschriftungen und benutzergenerierte Inhalte.
2. Die Paketart deklarieren
Als Nächstes müssen Sie Ihre Paketart deklarieren. Dieser Schritt hilft WPML zu erkennen, welche String-Pakete mit aktiven Plugins verbunden sind, und nur diese Pakete zu übersetzen.
Zum Vergleich: Dieser Filter funktioniert für String-Pakete genauso, wie der Filter register_post_types für Beitragstypen funktioniert.
Um eine Paketart zu deklarieren, verwenden Sie den Filter wpml_active_string_package_kinds:
define( 'FOO_USER_FIELD_PACKAGE_KIND_TITLE', 'OTGS Foo User Fields' );
define( 'FOO_USER_FIELD_PACKAGE_KIND_SLUG', 'otgs-foo-user-fields' );
add_filter( 'wpml_active_string_package_kinds', function( $kinds ) {
$kinds[ FOO_USER_FIELD_PACKAGE_KIND_SLUG ] = [
'title' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
'slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
'plural' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
];
return $kinds;
} );
Definition der Argumente
title – der Titel der Art, sollte derselbe sein wie die Art (kind) für Pakete.plural – die Pluralform des Titels.slug – der Slug der Art, sollte derselbe sein wie der kind_slug für Pakete.
3. Ein Paket erstellen und Strings registrieren
Als Nächstes müssen Sie ein Paket erstellen und die Strings, die es gruppieren soll, mit dem Hook wpml_register_string registrieren:
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
Definition der Argumente
$kind – die Namespace-Beschriftung der Entität (z. B. Gravity Form).$kind_slug – der Namespace-Slug der Entität (z. B. gravity-form). Wenn dieser fehlt, wird eine Slug-Version der „Art“ (kind) verwendet.$name – die eindeutige Kennung der Entität innerhalb der Art, kann ein String (z. B. Slug) oder ein Integer (z. B. ID) sein.$title – der Titel der Entität innerhalb der Art. Es wird empfohlen, den Titel der echten Entität zu verwenden.
Obwohl nicht zwingend erforderlich, können Sie auch zwei zusätzliche Argumente einschließen:$edit_link – eine URL zum Bearbeiten des Objekts.$view_link – eine URL zum Anzeigen des Objekts.
4. Übersetzungen abrufen
Um schließlich Übersetzungen im Frontend anzuzeigen, müssen Sie den Hook wpml_translate_string verwenden:
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
$translatedFieldValues = [];
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
$translatedFieldValues[ $fooUserField ] = apply_filters( 'wpml_translate_string', $fieldValue, sanitize_key( $fooUserField ), $package );
}
Strings aktualisieren und entfernen
Wann immer Benutzer Inhalte aktualisieren, muss WPML in der Lage sein, die neuen Strings sowie die entfernten zu identifizieren. Um WPML über diese Änderungen zu benachrichtigen, umschließen Sie Ihren Registrierungscode mit zwei Funktionen:
$userId = 123;
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
// The 'title' key is not not required in the "translate" context.
];
do_action( 'wpml_start_string_package_registration', $package );
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
do_action( 'wpml_delete_unused_package_strings',$package );
String-Pakete löschen
Wenn Benutzer Inhalte entfernen, sollten Sie auch das zugehörige String-Paket entfernen. Dies umfasst alle zugehörigen Strings, Übersetzungen und Übersetzungsaufträge. Durch diese Bereinigung stellen Sie sicher, dass die Website effizient bleibt, ohne dass verbleibende Daten die Datenbank überladen.
Um ein String-Paket zu entfernen, klinken Sie sich in eine geeignete Aktion innerhalb Ihres Plugins oder Themes ein und rufen Sie die Funktion wpml_delete_package auf:
$userId = 123; do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_SLUG );
Zusätzliche Ressourcen
- WPML-Sprachkonfigurationsdatei – eine Anleitung zur Verwendung der wpml-config.xml, der Datei, die angibt, welche Texte WPML in Plugins und Themes übersetzen soll.
- Multilingual Tools – ein Tool zum Testen Ihrer Konfigurationseinrichtung und zur Bestätigung der Kompatibilität mit WPML.