Como manter o plugin traduz após atualizações?

9

A pasta de idiomas http://wordpress.org/extend/plugins/bbpress/ bbpress '(wp-content / plugins / bbpress / bbp-languages) tem esse aviso:

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

Na verdade, este não é um problema novo e sim, eles estão certos. Este é um grande problema se você estiver usando plugins wordpress com um idioma que não seja o inglês.

Basicamente, traduzi o bbpress e criei arquivos .po e .mo. Os arquivos estão funcionando se eu os colocar em sua pasta normal wp-content / plugins / bbpress / bbp-languages. Mas, como o aviso acima, diz que será excluído quando a atualização. Mas o problema é que a tradução não está funcionando se eu os colocar na pasta wp-content / languages ​​/, conforme sugerido no bbpress.

Eu acho que deve haver um gancho ou algo que eu possa ativá-lo, mas qual é a melhor solução para isso? Simplesmente quero manter os arquivos de idioma do plugin em wp-content / languages ​​/

Ünsal Korkmaz
fonte
bem .. depois de verificar os códigos bbpress .. parece que eu preciso colocar arquivos em / wp-content / languages ​​/ bbpress / não diretamente em / wp-content / languages ​​/ Agora funciona para bbpress, mas a pergunta ainda precisa ser respondida para outros plugins imo
Ünsal Korkmaz 8/08

Respostas:

3

Você precisa substituir a chamada para o arquivo de idioma do BBpress.

Um bom lugar para fazer isso é um arquivo específico do idioma no diretório de idiomas geral. Para o turco, provavelmente seria um arquivo chamado tr_TR.php. Isso será carregado automaticamente e somente se corresponder ao idioma do seu blog. Não será substituído.

O BBPress não usa a função load_plugin_textdomain, mas load_textdomainsim. Aqui você pode encontrar um filtro:

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

Portanto, no seu arquivo php do idioma, adicione um filtro para alterar o caminho:

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 );
fuxia
fonte
parece que houve um erro .. bbpress.trac.wordpress.org/ticket/1647 procurando por ele .. usarei a pasta de idiomas padrão wp-content / languages ​​/ então qual é a sua sugestão para 'FULL_PATH_TO_YOUR_FILE'?
Ünsal Korkmaz
O caminho para o diretório de idiomas ( WP_LANG_DIR) mais o seu arquivo mo.
fuxia
11
Boa resposta. Nota para desenvolvedores de plugins: faça suas load_plugin_textdomain()chamadas durante a ação "init", caso contrário, não podemos conectar-nos ao filtro "load_textdomain_mofile". Já será tarde demais então.
Geert
2

O que você precisa fazer é criar um plug-in simples que gerencie o domínio de texto dos plug-ins instalados. Se você não quiser ter uma solução global, adicione o código ao seu functions.php no seu tema.

A idéia é instruir o wordpress sobre onde encontrar traduções. Internamente em todos os plugins, isso é feito usando algo semelhante ao

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

esta é a função que você usará. Como você pode ver aqui , o último argumento é usado para definir o relativo ao caminho do plug-in, onde os arquivos de tradução residem.

Você pode fazer o que quiser colocando uma linha para cada plug-in que deseja alterar a pasta de idiomas da seguinte maneira.

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

isso instruirá o wordpress a carregar seus arquivos de tradução personalizados de uma pasta ao lado da pluginspasta que possui uma pasta chamada bbpressque possui os arquivos de tradução usando a mesma nomeação EXATA que cada plug-in usa.

Seu método, que instrui os domínios de texto para todos os plugins, deve ser executado na initfase da seguinte maneira

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

(Não esqueça de marcar isso como resposta se você achou útil)

Odys
fonte
0

Para que isso funcione, você precisa ter os arquivos de tradução do WordPress no WP_LANG_DIR e ter o código de idioma global definido para esse idioma. Se você estiver incluindo apenas traduções para o bbPress sem alterar o código do idioma ou sem os principais arquivos de tradução do WordPress, nada será traduzido apesar de você carregá-los.

Se você deseja substituir o código do idioma apenas pelo bbPress, é necessário adicionar um filtro a 'bbpress_locale' que permita substituir o arquivo mo do bbPress.

Embora seja verdade que o bbPress 2.0 usa a função load_textdomain (), load_plugin_textdomain () é apenas um invólucro para load_textdomain () de qualquer maneira. O método bbPress 2.0 é mais robusto e permite a colocação global de arquivos de tradução, para que você não os perca durante a atualização do plug-in.

John James Jacoby
fonte
-1

No meu caso, a criação de tradução personalizada permanente para o plug-in requer as seguintes etapas (exemplos para tradução de plug-in ACF):

  1. criar wp-content/languages/plugins/diretório
  2. copia o arquivo de tradução selecionado .poda lang/pasta do plug-in (ou qualquer outro com traduções) para o criado wp-content/languages/plugins/(por exemplo, de lang/acf-pl_PL.popara wp-content/languages/plugins/acf-pl_PL.po)
  3. personalize a tradução com, por exemplo, Poedit ou qualquer outro programa para editar .poarquivos e, em seguida, gere .moe salve em wp-content/languages/plugins/(por exemplo wp-content/languages/plugins/acf-pl_PL.mo)

Dessa forma, a tradução deve ser preservada mesmo após a atualização do plugin.

Não tenho certeza se essa estratégia funcionará para todos os plugins, mas definitivamente vale a pena tentar.

jmarceli
fonte