Un domaine de texte est-il nécessaire pour un thème enfant

8

Désolé pour la question noob.

Un domaine de texte est-il nécessaire pour un thème enfant? Je construis un thème enfant simple sans domaine de texte déclaré. Donc, lorsque j'utilise des chaînes à traduire, dois-je utiliser le domaine de texte du thème parent (oui, le thème parent a un domaine de texte chargé et a également des fichiers .mo / .po).

Par exemple, ajouter cette ligne dans mon modèle de thème enfant

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

La chaîne au-dessus sera-t-elle traduite?

Merci d'avance

Ayanize
la source

Réponses:

7

TL; DR: si vous utilisez des chaînes qui sont dans le thème parent, exactement comment elles sont utilisées dans le thème parent, vous n'avez pas besoin d'avoir un domaine de texte pour votre thème enfant.

Mais si vous utilisez des chaînes qui ne sont pas utilisées dans le thème parent, pour les rendre traduisibles, vous aurez besoin d'un autre domaine de texte avec des .mofichiers de traduction ( ) associés .


Flux de travail de traduction

Lorsque WordPress rencontre une chaîne dans une fonction de traduction, cela:

  1. Vérifie si une traduction pour le domaine de texte requis a été chargée (via load_plugin_textdomainou load_theme_textdomainou load_textdomain), si c'est le cas, passez au point 3.
  2. Vérifie si le dossier de traductions (par défaut wp-content/languages) contient un fichier de domaine de texte correspondant. Fichier correspondant textdomain est "{$domain}-{$locale}.mo"$domainest le domaine de texte de la chaîne à traduire et $localeest le lieu actuel pour le site Web. Si ce fichier est introuvable, la chaîne d'origine est renvoyée, sinon il est chargé et WP passe au point suivant.
  3. Lorsque le domaine de texte est chargé, WP recherche si la chaîne requise est contenue dans ce fichier, sinon la chaîne d'origine est retournée, sinon WP passe au point suivant.
  4. Si la chaîne traduite trouvée a besoin d'une résolution singulière / plurielle (par exemple lors de l'utilisation _n()), cela est fait. Sinon, WP passe au point suivant.
  5. Les crochets de filtre sont appliqués sur la chaîne traduite (voir https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook ) et enfin le résultat est renvoyé.

Donc?

Lorsque vous utilisez le domaine de texte du thème parent dans la fonction de traduction à partir du thème enfant (en supposant que le thème parent expédie et charge le fichier de domaine de texte, ou qu'il a un fichier de traduction dans le dossier de traductions), WordPress arrivera au point 3. dans la liste ci-dessus, et donc si la chaîne est disponible dans le fichier (car utilisée dans le thème parent) elle sera traduite, sinon pas.

Cela signifie que les chaînes personnalisées dans le thème parent ont besoin de leur propre fichier de traduction.

En théorie, il est possible d'utiliser le domaine de texte parent dans un autre fichier de traduction, car WordPress est capable de charger plusieurs fois le même domaine de texte, en les "fusionnant", mais cela pose problème car un seul fichier peut exister au format "{$domain}-{$locale}.mo"dans les dossiers de traduction ( voir point 2. dans la liste ci-dessus).

Donc, en conclusion, la seule façon viable de rendre un thème enfant traduisible, s'il contient des chaînes non utilisées dans le thème parent, est d'utiliser son propre domaine de texte et son propre fichier de traduction.

gmazzap
la source
Excellente réponse! Une autre question - disons que le thème parent a cette chaîne "background-color" et chez l'enfant aussi, cette chaîne existe. Donc, dans ce cas, je peux utiliser en toute sécurité le domaine de texte du thème parent? __ ('background-color', 'parent-text-domain')?
Ayanize
oui @Ayanize si le thème parent a, __('background-color', 'parent-text-domain')vous pouvez utiliser le même dans le thème enfant sans avoir besoin de faire autre chose pour le faire traduire.
gmazzap
0

Si votre thème enfant contient des chaînes différentes de celles du thème parent.

La bonne façon d'utiliser un domaine de texte différent dans un thème enfant est la load_child_theme_textdomain()fonction maintenant. Vous pouvez l'utiliser de la même manière que les autres fonctions de chargement du domaine de texte _..._.

Il faut se méfier!

Contrairement aux fichiers de langue du plugin, un nom comme my_child_theme-de_DE.mo ne fonctionnera PAS. Bien que les fichiers de langue du plugin vous permettent de spécifier le domaine de texte dans le nom de fichier, cela ne fonctionnera PAS avec les thèmes et les thèmes enfants. Les fichiers de langue pour les thèmes doivent inclure le raccourci linguistique UNIQUEMENT .

docker
la source