Ricerca di traduzioni mancanti nel tuo plugin o tema WordPress

Se alcune parti del tuo plugin o tema appaiono non tradotte dopo aver utilizzato PTC, usa questa guida per verificare se la stringa fa parte del tuo progetto e se WordPress sta caricando il file corretto.

Verifica se la stringa è disponibile in PTC

Dalla dashboard di PTC, vai alla scheda Traduzioni e cerca la stringa originale. Se non la vedi, PTC non l’ha ricevuta. Questo di solito significa una delle seguenti cose:

  • La stringa manca dal tuo file POT

Se il tuo file POT non include tutte le stringhe traducibili, ricrealo usando WP-CLI. Quindi, segui i passaggi nella nostra guida all’internazionalizzazione di temi e plugin WordPress dall’inizio.

  • Il testo non è racchiuso in una funzione GetText

Assicurati che tutto il testo traducibile sia racchiuso in __() o _e() e utilizzi il text domain corretto.

Esempio:

__('Hello, world!', 'your-plugin');

Per maggiori dettagli, consulta il Passaggio 2 della nostra guida alla traduzione di temi e plugin WordPress.

  • Le stringhe JavaScript non sono state contrassegnate come traducibili

Se il tuo plugin include testo traducibile in JavaScript:

  1. Vai su PTC → Impostazioni e clicca su File monitorati. Modifica il file di risorse pertinente e abilita “Questo è un progetto WordPress con JavaScript localizzabile?”
Indicare a PTC che il tuo prodotto include testo traducibile in Javascript

Questo indica a PTC di scansionare i file JavaScript alla ricerca di stringhe traducibili. Rigenererà le traduzioni e creerà una nuova merge request con i file aggiornati.

  1. Assicurati che WordPress sappia dove caricare i file di traduzione .json creati da PTC.

Se i file .json sono posizionati all’interno della directory /languages/ del tuo plugin o tema, chiama wp_set_script_translations() con il percorso corretto.

Per i plugin:

wp_set_script_translations( 'script-handle', 'text-domain', plugin_dir_path( __FILE__ ) . 'languages' );

Per i temi:

wp_set_script_translations( 'script-handle', 'text-domain', get_template_directory() . '/languages' );

Questo indica esplicitamente a WordPress di caricare i file .json dalla cartella del tuo plugin o tema.

Conferma che WordPress stia caricando i tuoi file di traduzione

Se la stringa tradotta appare in PTC ma non viene ancora visualizzata nel tuo plugin, è possibile che WordPress non stia caricando il file di traduzione corretto. Controlla quanto segue:

  • Il text domain viene caricato correttamente

Se stai utilizzando plugin incorporati o domini multipli, assicurati che ognuno sia caricato utilizzando load_plugin_textdomain() o load_theme_textdomain().

  • Le traduzioni da PTC non vengono sovrascritte

Per impostazione predefinita, WordPress dà la priorità ai file di traduzione in /wp-content/languages/. Se il tuo plugin o tema ha traduzioni create dalla community di WordPress, queste possono sovrascrivere i tuoi file .mo in bundle.

Per assicurarti che WordPress carichi invece i tuoi file .mo, applica il filtro load_textdomain_mofile.

Esempio di utilizzo per i plugin

Aggiungi la funzione di filtro al file PHP principale del tuo plugin (ad esempio, my-plugin.php):

function my_plugin_load_embedded_translation_file( $mofile, $domain ) {
  // Replace 'my-domain' with your actual plugin's text domain
	if ( 'my-domain' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/plugins/' ) ) {
		$locale = apply_filters( 'plugin_locale', determine_locale(), $domain );
		$local_mofile = WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) . '/languages/' . $domain . '-' . $locale . '.mo';
		
		if ( file_exists( $local_mofile ) ) {
			return $local_mofile; // Use bundled translation if available
		}		
	}
	return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_plugin_load_embedded_translation_file', 10, 2 );

Esempio di utilizzo per i temi

Aggiungi la funzione di filtro nel file functions.php del tuo tema:

function my_theme_load_embedded_translation_file( $mofile, $domain ) {
    // Replace 'my-domain' with your actual theme's text domain
    if ( 'my-domain' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/themes/' ) ) {
        $locale = apply_filters( 'theme_locale', determine_locale(), $domain );
        $local_mofile = get_template_directory() . '/languages/' . $locale . '.mo';
        
        if ( file_exists( $local_mofile ) ) {
            return $local_mofile; // Use bundled translation if available
        }
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_theme_load_embedded_translation_file', 10, 2 );

Assicurati che la denominazione dei file MO corrisponda alle aspettative di WordPress

WordPress si aspetta diverse convenzioni di denominazione per i file .mo a seconda di dove li memorizzi.

  • Se i tuoi file di traduzione si trovano all’interno della cartella del tema, usa:

{locale}.mo
Esempio
: de_DE.mo (abbinato a de_DE.po)

  • Se hai posizionato i file nella directory globale della lingua di WordPress (wp-content/languages/themes/), usa:

{text-domain}-{locale}.mo
Esempio
: my-theme-de_DE.mo (abbinato a my-theme-de_DE.po)

Scorri verso l'alto