Scopri come creare pacchetti di stringhe per i tuoi plugin e temi per aiutare gli utenti a tradurre facilmente i contenuti con WPML.
I pacchetti di stringhe sono gruppi di stringhe “raggruppati” insieme in un contesto specifico. Il loro scopo è aiutare gli utenti finali a tradurre i contenuti in modo più efficiente, eliminando la necessità di tradurre ogni stringa singolarmente.
Ad esempio, ecco come gli utenti tradurrebbero i campi utente personalizzati, con e senza un pacchetto di stringhe:
Senza un pacchetto di stringhe

Gli utenti devono tradurre le stringhe una per una, senza l’opzione della traduzione automatica.
Con un pacchetto di stringhe

Gli utenti possono tradurre più stringhe insieme in una sola volta, con l’opzione della traduzione automatica.
Come puoi vedere, i pacchetti di stringhe semplificano il processo di traduzione permettendo agli utenti di tradurre più campi utente personalizzati contemporaneamente. Per offrire ai tuoi utenti la migliore esperienza di traduzione, segui i passaggi seguenti per creare i tuoi pacchetti di stringhe.
Se vuoi vedere l’implementazione completa dei pacchetti di stringhe che trattiamo nei passaggi seguenti, dai un’occhiata a questo repository GitHub che contiene il plugin di test che abbiamo utilizzato.
1. Identifica il contenuto traducibile
Il primo passaggio consiste nell’identificare i contenuti che gli utenti vorranno tradurre, come titoli, etichette e contenuti generati dagli utenti.
2. Dichiara il tipo di pacchetto
Successivamente, devi dichiarare il tipo di pacchetto. Questo passaggio aiuta WPML a rilevare quali pacchetti di stringhe sono collegati ai plugin attivi e a tradurre solo quei pacchetti.
Per fare un confronto, questo filtro funziona per i pacchetti di stringhe proprio come il filtro register_post_types funziona per i tipi di post.
Per dichiarare un tipo di pacchetto, usa il filtro 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;
} );
Definizione degli argomenti
title – il titolo del tipo, dovrebbe essere uguale al tipo (kind) dei pacchetti.plural – la forma plurale del titolo.slug – lo slug del tipo, dovrebbe essere uguale al kind_slug dei pacchetti.
3. Crea un pacchetto e registra le stringhe
Successivamente, devi creare un pacchetto e registrare le stringhe che raggrupperà utilizzando l’hook wpml_register_string:
$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' );
}
Definizione degli argomenti
$kind – l’etichetta del namespace dell’entità (ad es., Gravity Forms).$kind_slug – lo slug del namespace dell’entità (ad es., gravity-form). Se mancante, sarà una versione slug del “tipo”.$name – l’identificatore univoco dell’entità all’interno del tipo, può essere una stringa (ad es., slug) o un numero intero (ad es., ID).$title – il titolo dell’entità all’interno del tipo. Si consiglia di utilizzare il titolo dell’entità reale.
Sebbene non sia necessario, puoi anche includere due argomenti aggiuntivi:$edit_link – un URL per modificare l’oggetto.$view_link – un URL per visualizzare l’oggetto.
4. Recupera le traduzioni
Infine, per visualizzare le traduzioni sul front-end, devi usare l’hook wpml_translate_string:
$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 );
}
Aggiornare e rimuovere le stringhe
Ogni volta che gli utenti aggiornano i contenuti, WPML deve essere in grado di identificare le nuove stringhe, così come quelle che sono state rimosse. Per notificare a WPML queste modifiche, racchiudi il tuo codice di registrazione con due funzioni:
$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 );
Eliminare i pacchetti di stringhe
Quando gli utenti rimuovono dei contenuti, dovresti rimuovere anche il pacchetto di stringhe associato. Questo include tutte le stringhe, le traduzioni e i lavori di traduzione correlati. Facendo questa pulizia, ti assicuri che il sito rimanga efficiente senza che dati residui ingombrino il database.
Per rimuovere un pacchetto di stringhe, agganciati tramite un hook a un’azione appropriata all’interno del tuo plugin o tema e chiama la funzione wpml_delete_package:
$userId = 123; do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_TITLE );
Risorse aggiuntive
- File di configurazione della lingua di WPML – una guida sull’uso di wpml-config.xml, il file che indica quali testi WPML deve tradurre nei plugin e nei temi.
- Multilingual Tools – uno strumento per testare la tua configurazione e confermare la compatibilità con WPML.