Come preparare una traduzione di plugin per WordPress?


19

Qual è il modo migliore per creare un plugin pronto per la traduzione?

Non deve essere tradotto dall'inizio, ma deve essere facilmente traducibile in modo che i colleghi sviluppatori di culture diverse possano partecipare al processo di localizzazione del plugin.

Risposte:


38

1. Scrivi pensando alla localizzazione

Non usare echoo print()per produrre output di testo, invece usa le funzioni di WordPress __()e _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()e __()fornirà la traduzione - nella lingua corrente - del testo fornito come primo parametro. _e()produrrà il testo mentre __()lo restituirà.

Il secondo parametro è il dominio di testo , lo userai per dire a WordPress che il testo fornito come primo parametro appartiene a questo plugin, puoi usare qualsiasi nome tu voglia ma preferisco usare lo stesso nome che ho usato per il plugin file di directory, lo trovo più intuitivo.

Come generare un testo dinamico come: "Ciao <nomeutente>"?

Con __()e sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Preparare i file .pot / .po / .mo

definizioni

  • Il file .pot : è messo a tua disposizione dallo sviluppatore del plug-in e viene utilizzato come punto di partenza per creare nuove traduzioni, WordPress non lo utilizza.
  • Un file .po : è un file di traduzione che tu o qualcun altro hai iniziato e forse completato, WordPress non lo utilizza.
  • File A.mo : viene creato automaticamente da Poedit ogni volta che salvi un file .po, tutto ciò che puoi fare con questi file è caricarli o ricaricarli ogni volta che crei o aggiorni un file .po. WordPress ottiene traduzioni dai file .mo .

Apri Poedit e crea un nuovo catalogo (File ›New Catallog ...) con queste impostazioni:

  • Informazioni sul progetto: utilizza le tue informazioni (o il tuo team), la lingua e il paese devono corrispondere alla lingua predefinita del plug-in
  • percorsi:
    • Percorso di base: .
    • Percorsi: rimuovi tutto e aggiungi .., (memorizzeremo il file della lingua in una sottodirectory del plugin chiamata lingue)
  • Parole chiave: rimuovi tutto e aggiungi __e_e

Salvare il catalogo come ed eseguire la scansione dei file del plugin per il testo traducibile premendo il pulsante di aggiornamento. Al termine dell'aggiornamento vicino a quel catalogo, non sarà necessario aggiornare quel file a meno che non si aggiungano nuove stringhe traducibili (ovvero racchiuse tra o ) al plug-in./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Ora creiamo la prima traduzione (userò fr_FR):

Usando Podeit , crea un catalogo da un file POT (File ›Nuovo catalogo da file POT ...) :

  • Informazioni sul progetto: usa le tue informazioni (o il tuo team), cambia la lingua e il paese , userò il francese e la Francia
  • Percorsi: non cambiare
  • Parole chiave: non chage

Salva il catalogo come . Traduci alcune o tutte le stringhe, salva nuovamente il file .po, carica sia i file .po che i file .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Si noti che ogni volta che si salva un file .po viene generato un file .mo con lo stesso nome, il nome file del file .po è cruciale , è composto dalla concatenazione del dominio di testo del plugin (my-plugin) e dalle impostazioni locali della lingua ( fr_FR), dai sempre il nome ai tuoi file .po per plugin come questo: [textdomain] - [locale] .po , ecco alcuni esempi:

  • Italiano / Italia: wpcf7-it_IT.po
  • Portoghese / Brasile: wpcf7-pt_BR.po
  • Arabo: wpcf7-ar.po... Sì!

Ogni volta che il plug-in viene aggiornato con nuovo testo, aggiorna il file po, traduci nuove stringhe e riavvia i file .po e .mo

3. Indicare al plug-in di caricare il testo tradotto per la lingua corrente

Da qualche parte nel tuo plugin, devi dire a WordPress di usare il tuo file .mo, puoi farlo usando questo codice all'inizio del tuo file plugin:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Sostituisci my-plugincon il nome del tuo plugin nel 1 ° e 3 ° parametro della load_plugin_textdomainfunzione.

4. Test e risoluzione dei problemi

Alcuni motivi potrebbero non funzionare:

  • Le stringhe non vengono importate nel file .pot o .po
    • → Impostazioni del catalogo errate (percorso o parole chiave o entrambi)
  • Il testo non è tradotto sul sito WordPress
    • → File .mo per quella lingua mancante o con un nome file errato
    • → Dominio di testo non utilizzato (sostituire _e('my text')con _e('my text', 'my-plugin'))
    • → Dominio di testo non caricato (utilizzare l'esempio sopra con i parametri giusti, WP non ti avviserà degli errori)

3
+1 Nice write-up :) Dai un'occhiata a questo articolo: caricamento dei file di lingua di WordPress nel modo giusto , " Linee guida pratiche per eliminare le difficoltà nel caricamento di file di lingua in WordPress ". :::::: Anche Glotpress e il gruppo Polyglots possono essere menzionati.
brasofilo,

Grazie per questa bella istruzione! Vale la pena ricordare che load_plugin_textdomain () deve essere chiamato in ogni metodo, dove usi _e () e __ ()
Andreas

2

La risposta di Nabil è abbastanza completa ma c'è una semplice variazione fornita:

  1. Il tuo plugin si trova nel repository dei plugin di WordPress.org

  2. Sei disposto a richiedere che il tuo plugin funzioni solo con WordPress 4.6 o versioni successive.

I passaggi sono questi:

  1. Nel file readme.txt del plug-in, aggiungi Requires at least: 4.6. Vedi https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. se non lo è già, carica il tuo plugin nel repository dei plugin di WordPress. Vedi https://wordpress.org/plugins/developers/add/ .

  3. Trova il dominio slug / text del tuo plugin. Per fare ciò, vai alla pagina del tuo plugin nel repository dei plugin di WordPress. L'URL sarà come https://wordpress.org/plugins/your-plugin-slug/ . L'ultima parte dell'URL, "your-plugin-slug", è la lumaca del tuo plugin. Questo è quello che usi per il dominio di testo delle funzioni di traduzione.

  4. Usa le funzioni di traduzione di WordPress nel tuo plugin (come __e(‘hello’, ‘my-plugin-domain’);). Assicurati di utilizzare il dominio di testo del plugin corretto, acquisito nel passaggio precedente. Vedi https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ per maggiori informazioni.

Se esegui i passaggi precedenti, WordPress si occuperà di:

  • Analisi del plug-in per tutte le stringhe traducibili (non è necessario installare ed eseguire Poedit o altro)
  • Rendi facile per chiunque contribuire con le traduzioni del tuo plug-in su translate.wordpress.org (non è necessario che il tuo sito sia dedicato alla traduzione del tuo plug-in o abbia una procedura personalizzata per i traduttori che ti inviano le loro traduzioni)
  • quando qualcuno usa il tuo plugin, WordPress si occuperà di verificare se si traduce nella loro lingua e, in tal caso, mostrarlo nella loro lingua (non è necessario per loro, o per te, caricare i file di traduzione sul loro sito Web)

(Risposta dal mio post sul blog qui: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )


Non sono sicuro del motivo per cui questo è stato sottoposto a downgrade. È quello che ho fatto per preparare wordpress.org/plugins/print-my-blog alla traduzione (e il plugin è stato tradotto con successo)
thespacecamel il

Ciò significa che se un plug-in / tema non si trova nel repository dei plug-in di WordPress ma utilizza il dominio di testo di un plug-in lì, WordPress carica i file di traduzione sbagliati?
bodo,

Bella domanda @bodo. Se un plugin indica di utilizzare il dominio di testo di un altro plugin che si trova nel repository wp.org, penso che WordPress utilizzerà felicemente i file di traduzione del plugin wp.org. Ma scusa, non ne sono sicuro.
thespacecamel il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.