WPML

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 “raggruppate” 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 individualmente.

Ad esempio, ecco come gli utenti tradurrebbero i campi personalizzati utente, con e senza un pacchetto di stringhe:

Senza un pacchetto di stringhe

I quattro campi come stringhe separate, in WPML → Traduzioni → Stringhe
I quattro campi come stringhe separate, in WPML → Traduzioni → Stringhe

Gli utenti devono tradurre le stringhe una per una, senza l'opzione della traduzione automatica.

Con un pacchetto di stringhe

Gli stessi quattro campi come un unico pacchetto, nella Dashboard di traduzione
Gli stessi quattro campi come un unico pacchetto, nella Dashboard di traduzione

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 personalizzati utente 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 del pacchetto di stringhe che trattiamo nei passaggi seguenti, dai un'occhiata a questo repo GitHub (si apre in una nuova scheda) contenente il plugin di test che abbiamo utilizzato.

1. Identifica i contenuti traducibili

Il primo passaggio è 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 a plugin attivi e a tradurre solo quei pacchetti.

Per fare un confronto, questo filtro funziona per i pacchetti di stringhe esattamente 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 (si apre in una nuova scheda):

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 a kind per i pacchetti.
plural – la forma plurale del titolo.
slug – lo slug del tipo, dovrebbe essere uguale a kind_slug per i pacchetti.

3. Crea un pacchetto e registra le stringhe

Successivamente, devi creare un pacchetto e registrare le stringhe che andrà a raggruppare utilizzando l'hook wpml_register_string (si apre in una nuova scheda):

$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 “kind”.
$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.

Anche se non è necessario, puoi includere anche 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 (si apre in una nuova scheda):

$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 i contenuti, dovresti rimuovere anche il pacchetto di stringhe associato. Questo include tutte le stringhe, le traduzioni e i lavori di traduzione correlati. Effettuando questa pulizia, ti assicuri che il sito rimanga efficiente senza dati residui che ingombrano il database.

Per rimuovere un pacchetto di stringhe, agganciati a un'azione appropriata all'interno del tuo plugin o tema e chiama la funzione wpml_delete_package (si apre in una nuova scheda):

$userId = 123;

do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_SLUG );

Risorse aggiuntive

Scritto daAmir