Es un dominio de texto necesario para un tema secundario

8

Perdón por la pregunta novata.

¿Es necesario un dominio de texto para un tema secundario? Estoy creando un tema secundario simple sin dominio de texto declarado. Entonces, cuando uso cadenas que deben traducirse, ¿debo usar el dominio de texto del tema principal (sí, el tema principal tiene cargado el dominio de texto y también tiene archivos .mo / .po).

Por ejemplo, agregar esta línea en mi plantilla de tema hijo

<?php __('Some String', 'parent-text-domain');> 

¿Se traducirá la cadena anterior?

Gracias por adelantado

Ayanize
fuente

Respuestas:

7

TL; DR: si usa cadenas que están en el tema principal, por ejemplo, cómo se usan en el tema principal, no necesita tener un dominio de texto para el tema secundario.

Pero si usa cadenas que no se usan en el tema principal, para que sean traducibles, necesitará otro dominio de texto con .moarchivos de traducción ( ) relacionados .


Flujo de trabajo de traducción

Cuando WordPress encuentra una cadena en una función de traducción, esta:

  1. Comprueba si se ha cargado una traducción para el dominio texto requerido (a través de load_plugin_textdomaino load_theme_textdomaino load_textdomain), si es así vaya al punto 3.
  2. Comprueba si la carpeta de traducciones (por defecto wp-content/languages) contiene un archivo de dominio de texto coincidente. El archivo de dominio de texto coincidente es "{$domain}-{$locale}.mo"donde $domainestá el dominio de texto de la cadena a traducir y $localees la configuración regional actual del sitio web. Si no se encuentra ese archivo, se devuelve la cadena original; de lo contrario, se carga y WP reenvía al siguiente punto.
  3. Cuando se carga el dominio de texto, WP busca si la cadena requerida está contenida en ese archivo, si no se devuelve la cadena original, de lo contrario, WP reenvía al siguiente punto.
  4. Si la cadena traducida encontrada necesita alguna resolución singular / plural (p. Ej., Cuando se usa _n()), ya está. De lo contrario, WP reenvía al siguiente punto.
  5. Los ganchos de filtro se aplican en la cadena traducida (consulte https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook ) y finalmente se devuelve el resultado.

¿Entonces?

Cuando usa el dominio de texto del tema principal en la función de traducción del tema secundario (suponiendo que el tema principal se envía y carga el archivo de dominio de texto, o tiene un archivo de traducción en la carpeta de traducciones), WordPress llegará al punto 3. en la lista anterior, y así si la cadena está disponible en el archivo (porque se usa en el tema principal) se traducirá, de lo contrario no será así.

Significa que las cadenas personalizadas en el tema principal necesitan un archivo de traducción propio.

En teoría, es posible usar el dominio de texto principal en otro archivo de traducción, porque WordPress es capaz de cargar más veces el mismo dominio de texto, "fusionándolos", pero eso tiene problemas porque solo puede existir un archivo en el formato "{$domain}-{$locale}.mo"en las carpetas de traducción ( ver punto 2. en la lista anterior).

En conclusión, la única forma viable de hacer que un tema secundario sea traducible, si contiene cadenas que no se usan en el tema principal, es usar un dominio de texto propio y un archivo de traducción propio.

gmazzap
fuente
Excelente respuesta! Una pregunta más: digamos que el tema principal tiene esta cadena "background-color" y en el elemento secundario también existe esta cadena. Entonces, en este caso, ¿puedo usar con seguridad el dominio de texto del tema principal? __ ('background-color', 'parent-text-domain')?
Ayanize
sí @Ayanize si el tema principal lo tiene __('background-color', 'parent-text-domain'), puede usar el mismo tema secundario sin necesidad de hacer nada más para traducirlo.
gmazzap
0

Si el tema de su hijo contiene cadenas diferentes que el tema principal.

La forma correcta de usar un dominio de texto diferente en un tema secundario es la load_child_theme_textdomain()función ahora. Puede usarlo de la misma manera que otras funciones de carga _..._ textdomain.

¡Tener cuidado!

A diferencia de los archivos de idioma del complemento, un nombre como my_child_theme-de_DE.mo NO funcionará. Aunque los archivos de idioma del complemento le permiten especificar el dominio de texto en el nombre del archivo, esto NO funcionará con temas y temas secundarios. Los archivos de idioma para los temas deben incluir el acceso directo de idioma SOLAMENTE .

estibador
fuente