Anular la traducción básica predeterminada de WordPress


11

WordPress está configurado en idioma holandés. Cuando uso get_the_archive_title()mi tema correctamente, aparece "Categoría: nombre de categoría" en una página de archivo de categoría. Sin embargo, me gustaría que lea "Sectie: Nombre de categoría".

No quiero cambiar el archivo de idioma holandés en la carpeta wp-content / languages, porque eso se actualizará con las actualizaciones de WordPress.

Intenté copiar ese archivo de traducción, alterando la traducción de "categoría" y colocando el nuevo archivo nl_NL.mo en my-theme / languages. Esto no tuvo ningún efecto.

¿Cómo puedo lograr una traducción diferente para algunas cadenas sin alterar los archivos de traducción principales?

Respuestas:


15

Puede usar el 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;
}

Si necesita filtrar una traducción con contexto, use gettext_with_contextfilter :

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 traducción con contexto significa que se proporciona un contexto en la función gettext utilizada para traducir la cadena. Por ejemplo, esto es sin contexto:

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

Y esto es con contexto:

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

Hay filtros similares disponibles para traducciones en plural ( [_n()][2]y [_nx()][2]): ngettexty ngettext_with_context.


1
¡Eso funciono! Tuve que hacer "Categoría:% s" y "Sectie:% s" porque el texto tiene que ser exactamente como en el archivo de traducción.
— Florian

Oh sí, eso es correcto. No sabía el texto exacto para traducir.
— cybmeta

1
Excelente código: solo tenga en cuenta que el gettextfiltro no detectará las traducciones que usan una cadena de "contexto", esas necesitarán gettext_with_context .
— Manu

Gracias por esta gran solución. Cuando estoy creando un tema secundario y estoy dispuesto a anular algunas de las traducciones del tema principal, sustituí el cuerpo de la función propuesta con la siguiente línea return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. De esta manera, puedo mantener las traducciones primordiales en el archivo PO del tema secundario en lugar de tenerlas cableadas en el código de función.
— Franco

Gracias cybmeta! Utilicé esta técnica para cambiar el texto principal con un complemento que publiqué en el repositorio. He acreditado esta publicación en el código. wordpress.org/plugins/…
— John Dee
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.