Come mantenere il plugin si traduce dopo gli aggiornamenti?


9

La cartella della lingua http://wordpress.org/extend/plugins/bbpress/ bbpress (wp-content / plugins / bbpress / bbp-languages) contiene questo avviso:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

In realtà questo non è un nuovo problema e sì, hanno ragione. Questo è un grosso problema se stai usando plugin wordpress con una lingua non inglese.

Fondamentalmente ho tradotto bbpress e creato file .po e .mo. I file funzionano se li inserisco nella loro normale cartella wp-content / plugins / bbpress / bbp-languages. Ma come sopra, l'avviso dice che verrà eliminato durante l'aggiornamento. Ma il problema è che la traduzione non funziona se li inserisco nella cartella wp-content / languages ​​/ come suggerito in bbpress.

Penso che ci debba essere un hook o qualcosa che posso attivarlo, ma qual è la soluzione migliore per questo? Voglio semplicemente mantenere i file della lingua dei plugin in wp-content / languages ​​/


bene .. dopo aver controllato i codici bbpress .. sembra che devo inserire i file in / wp-content / lingue / bbpress / non direttamente / wp-content / lingue / Ora funziona per bbpress ma la domanda deve ancora avere risposta per altri plugin imo
Ünsal Korkmaz

Risposte:


3

Devi sostituire la chiamata al file della lingua di BBpress.

Un buon posto per farlo è un file specifico della lingua nella directory delle lingue generali. Per il turco sarebbe probabilmente un file chiamato tr_TR.php. Questo verrà caricato automaticamente e solo se corrisponde alla lingua del tuo blog. Non verrà sovrascritto.

BBPress non usa la funzione load_plugin_textdomain, usa load_textdomaininvece. Qui puoi trovare un filtro:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

Quindi nella tua lingua file php basta aggiungere un filtro per cambiare il percorso:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );

sembra che ci sia un bug .. bbpress.trac.wordpress.org/ticket/1647 esaminandolo .. userò la cartella della lingua predefinita wp-content / languages ​​/ quindi qual è il tuo suggerimento per 'FULL_PATH_TO_YOUR_FILE'?
Ünsal Korkmaz,

Il percorso della directory della tua lingua ( WP_LANG_DIR) più il tuo mo-file.
fuxia

1
Buona risposta. Nota per gli sviluppatori di plug-in: load_plugin_textdomain()esegui le chiamate durante l'azione "init", altrimenti non possiamo collegarci al filtro "load_textdomain_mofile". Sarà troppo tardi già allora.
Geert

2

Quello che devi fare è creare un semplice plugin che gestirà il text_domain dei plugin installati. Se non vuoi avere una soluzione globale, puoi aggiungere il codice a Functions.php nel tuo tema.

L'idea è di istruire wordpress su dove trovare le traduzioni. Internamente in tutti i plugin questo viene fatto usando qualcosa di simile a

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

questa è la funzione che userete. Come puoi vedere qui , l'ultimo argomento è usato per impostare il relativo al percorso del plugin, dove risiedono i file di traduzione.

Puoi fare quello che vuoi mettendo una riga per ogni plugin che desideri modificare la cartella delle lingue come segue.

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

questo indicherà a wordpress di caricare i file di traduzione personalizzati da una cartella accanto alla pluginscartella che ha una cartella denominata bbpressche ha i file di traduzione usando lo stesso nome EXACT usato da ogni plugin.

Il tuo metodo, che indica i domini di testo per tutti i plugin, dovrebbe essere eseguito nella initfase come segue

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(Non dimenticare di contrassegnarlo come risposta se lo hai trovato utile)


0

Affinché ciò funzioni, è necessario disporre già dei file di traduzione di WordPress in WP_LANG_DIR e l'impostazione internazionale globale deve essere impostata su quella lingua. Se includi solo traduzioni per bbPress senza modificare le impostazioni locali o se sono presenti i file di traduzione di base di WordPress, nulla verrà tradotto nonostante tu li carichi.

Se si desidera sovrascrivere le impostazioni locali solo per bbPress, è necessario aggiungere un filtro a 'bbpress_locale' che consente di sovrascrivere il file bbPress mo.

Mentre è vero che bbPress 2.0 utilizza la funzione load_textdomain (), load_plugin_textdomain () è comunque solo un wrapper per load_textdomain (). Il metodo bbPress 2.0 è più robusto e consente il posizionamento globale dei file di traduzione, quindi non li perdi durante l'aggiornamento del plugin.


-1

Nel mio caso la creazione di una traduzione personalizzata permanente per il plug-in richiede i seguenti passaggi (esempi per la traduzione del plug-in ACF):

  1. crea wp-content/languages/plugins/directory
  2. copia il file di traduzione selezionato .podalla lang/cartella del plugin (o qualsiasi altro con le traduzioni) in creato wp-content/languages/plugins/(ad es. da lang/acf-pl_PL.poa wp-content/languages/plugins/acf-pl_PL.po)
  3. personalizzare la traduzione con ad esempio Poedit o qualsiasi altro programma per la modifica dei .pofile e quindi generare .moe salvare in wp-content/languages/plugins/(ad esempio wp-content/languages/plugins/acf-pl_PL.mo)

In questo modo la traduzione dovrebbe essere preservata anche dopo l'aggiornamento del plugin.

Non sono sicuro che questa strategia funzionerà per tutti i plugin, ma vale sicuramente la pena provare.

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.