¿Cómo mantener los complementos traducidos después de las actualizaciones?

9

http://wordpress.org/extend/plugins/bbpress/ bbpress 'carpeta de idioma (wp-content / plugins / bbpress / bbp-languages) tienen esa advertencia:

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

En realidad, este no es un problema nuevo y sí, tienen razón. Este es un gran problema si está utilizando complementos de WordPress con un idioma que no es inglés.

Básicamente traduje bbpress y creé archivos .po y .mo. Los archivos funcionan si los pongo en su carpeta normal wp-content / plugins / bbpress / bbp-languages. Pero como la advertencia anterior dice que se eliminará cuando se actualice. Pero el problema es que la traducción no funciona si los pongo en wp-content / languages ​​/ folder como se sugiere en bbpress.

Creo que debe haber un gancho o algo que pueda activarlo, pero ¿cuál es la mejor solución para ello? Simplemente quiero mantener los archivos de idioma del complemento en wp-content / languages ​​/

Ünsal Korkmaz
fuente
bueno ... después de revisar los códigos de bbpress ... parece que necesito poner archivos en / wp-content / languages ​​/ bbpress / not in direct / wp-content / languages ​​/ Ahora funciona para bbpress pero la pregunta todavía necesita respuesta para otros plugins imo
Ünsal Korkmaz

Respuestas:

3

Debe reemplazar la llamada al archivo de idioma de BBpress.

Un buen lugar para hacerlo es un archivo de idioma específico en su directorio de idiomas generales. Para turco probablemente sería un archivo llamado tr_TR.php. Esto se cargará automáticamente y solo si coincide con el idioma de su blog. No se sobrescribirá.

BBPress no usa la función load_plugin_textdomain, sino que la usa load_textdomain. Aquí puedes encontrar un filtro:

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

Entonces, en su archivo php de idioma, simplemente agregue un filtro para cambiar la ruta:

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
fuente
parece que hay un error ... bbpress.trac.wordpress.org/ticket/1647 buscándolo ... Usaré la carpeta de idioma predeterminada wp-content / languages ​​/ ¿Cuál es su sugerencia para 'FULL_PATH_TO_YOUR_FILE'?
Ünsal Korkmaz
La ruta a su directorio de idiomas ( WP_LANG_DIR) más su archivo mo.
fuxia
1
Buena respuesta. Nota para los desarrolladores de complementos: haga sus load_plugin_textdomain()llamadas durante la acción "init", de lo contrario no podremos conectarnos al filtro "load_textdomain_mofile". Ya será demasiado tarde.
Geert
2

Lo que debe hacer es crear un complemento simple que gestione el dominio de texto de los complementos instalados. Si no desea tener una solución global, puede agregar el código a functions.php en su tema.

La idea es instruir a WordPress sobre dónde encontrar traducciones. Internamente en todos los complementos esto se hace usando algo similar a

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

Esta es la función que utilizará. Como puede ver aquí , el último argumento se usa para establecer la ruta relativa al complemento, donde residen los archivos de traducción.

Puede hacer lo que quiera colocando una línea para cada complemento que desee modificar su carpeta de idiomas de la siguiente manera.

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

esto le indicará a WordPress que cargue sus archivos de traducción personalizados desde una carpeta al lado de la pluginscarpeta que tiene una carpeta llamada bbpressque tiene los archivos de traducción usando EXACTAMENTE el mismo nombre que usa cada complemento.

Su método, que indica los dominios de texto para todos los complementos, debe ejecutarse en la initfase de la siguiente manera

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

(No olvide marcar esto como respuesta si lo encuentra útil)

Odys
fuente
0

Para que esto funcione, debe tener los archivos de traducción de WordPress en WP_LANG_DIR y tener la configuración regional global configurada en ese idioma. Si solo incluye traducciones para bbPress sin cambiar la configuración regional o sin tener presentes los archivos de traducción centrales de WordPress, nada se traducirá a pesar de que los haya cargado.

Si desea anular la configuración regional solo para bbPress, debe agregar un filtro a 'bbpress_locale' que le permite anular el archivo bbPress mo.

Si bien es cierto que bbPress 2.0 usa la función load_textdomain (), load_plugin_textdomain () es solo un contenedor para load_textdomain () de todos modos. El método bbPress 2.0 es más robusto y permite la colocación global de archivos de traducción, por lo que no los perderá durante la actualización del complemento.

John James Jacoby
fuente
-1

En mi caso, crear una traducción personalizada permanente para el complemento requiere los siguientes pasos (ejemplos para la traducción del complemento ACF):

  1. crear wp-content/languages/plugins/directorio
  2. copie el archivo de traducción seleccionado .pode la lang/carpeta del complemento (o cualquier otro con traducciones) a creado wp-content/languages/plugins/(por ejemplo, de lang/acf-pl_PL.poa wp-content/languages/plugins/acf-pl_PL.po)
  3. personalizar la traducción con, por ejemplo, Poedit o cualquier otro programa para editar .poarchivos y luego generar .moy guardar en wp-content/languages/plugins/(por ejemplo wp-content/languages/plugins/acf-pl_PL.mo)

De esta manera, la traducción debe conservarse incluso después de la actualización del complemento.

No estoy seguro de si esta estrategia funcionará para todos los complementos, pero definitivamente vale la pena intentarlo.

jmarceli
fuente