Sostituisci la traduzione di base di WordPress predefinita


11

WordPress è impostato in lingua olandese. Quando uso il get_the_archive_title()mio tema, genera correttamente "Categorie: nome-categoria" in una pagina di archivio delle categorie. Comunque mi piacerebbe che leggessi "Sectie: nome-categoria".

Non voglio cambiare il file della lingua olandese nella cartella wp-content / languages, perché verrà aggiornato dagli aggiornamenti di WordPress.

Ho provato a copiare quel file di traduzione, alterando la traduzione di "categoria" e inserendo il nuovo file nl_NL.mo in my-theme / languages. Questo non ha avuto alcun effetto.

Come posso ottenere una traduzione diversa per alcune stringhe senza alterare i file di traduzione di base?

Risposte:


15

È possibile utilizzare il filtro gettext :

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Se è necessario filtrare una traduzione con contesto, utilizzare il gettext_with_contextfiltro :

add_filter( 'gettext_with_context', 'cyb_filter_gettext_with_context', 10, 4 );
function cyb_filter_gettext_with_context( $translated, $original, $context, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

Una traduzione con contesto significa che viene fornito un contesto nella funzione gettext utilizzata per tradurre la stringa. Ad esempio, questo è senza contesto:

$translated = __( 'Search', 'textdomain' );

E questo è con il contesto:

$translated = _x( 'Search', 'form placeholder', 'textdomain' );

Filtri simili sono disponibili per traduzioni plurali ( [_n()][2]e [_nx()][2]): ngettexte ngettext_with_context.


1
Ha funzionato! Ho dovuto fare "Categorie:% s" e "Sectie:% s" perché il testo deve essere esattamente come nel file di traduzione.
Florian,

Oh sì, è corretto. Non conoscevo il testo esatto da tradurre.
cybmeta,

1
Ottimo pezzo di codice: basta essere consapevoli del fatto che il gettextfiltro non rileverà le traduzioni che usano una stringa "contesto", queste avranno bisogno di gettext_with_context .
Manu,

Grazie per questa ottima soluzione. Mentre sto costruendo un tema figlio e sono disposto a scavalcare alcune delle traduzioni del tema genitore, ho sostituito il corpo della funzione proposta con la seguente riga return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. In questo modo, posso gestire le traduzioni prioritarie nel file PO del tema figlio invece di averle cablate nel codice funzione.
Franco,

Grazie cybmeta! Ho usato questa tecnica per cambiare il testo principale con un plugin che ho pubblicato nel repository. Ho accreditato questo post nel codice. wordpress.org/plugins/…
John Dee,
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.