web-dev-qa-db-fra.com

Est-ce qu'un text-domain est nécessaire pour un thème enfant

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 text-domain déclaré. Ainsi, lorsque j’utilise des chaînes à traduire, dois-je utiliser le thème parent text-domain (oui le thème parent a text-domain chargé et contient également des fichiers .mo/.po).

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

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

Sera au-dessus de la chaîne être traduit?

Merci d'avance

8
Ayanize

TL; DR: Si vous utilisez des chaînes qui se trouvent dans le thème parent, quelle que soit leur utilisation dans le thème parent, vous n'avez pas besoin de domaine de texte pour votre thème enfant.

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


Flux de traduction

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

  1. Vérifie si la traduction du domaine de texte requis a été chargée (via load_plugin_textdomain ou load_theme_textdomain ou load_textdomain ), le cas échéant, passez au point 3.
  2. Vérifie si le dossier de traductions (par défaut wp-content/languages) contient un fichier textdomain correspondant. Le fichier textdomain correspondant est "{$domain}-{$locale}.mo", où $domain est le domaine de texte de la chaîne à traduire et $locale est la langue actuelle du site Web. Si ce fichier n'est pas trouvé, la chaîne d'origine est renvoyée. Sinon, il est chargé et WP est transféré au point suivant.
  3. Lorsque le textdomain est chargé, WP recherche si la chaîne requise est contenue dans ce fichier, si la chaîne d'origine n'est pas renvoyée, sinonWP avance au point suivant.
  4. Si la chaîne traduite trouvée nécessite une résolution singulière/plurielle (par exemple, lorsque vous utilisez _n() ), celles-ci sont effectuées. Sinon, WP avance 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 le résultat est finalement renvoyé.

Alors?

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 soit envoyé et charge le fichier textdomain, ou qu'il ait un fichier de traduction dans le dossier des traductions), WordPress arrive au point 3. du liste ci-dessus, et donc si la chaîne est disponible dans le fichier (car utilisé 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 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 le point 2. dans la liste ci-dessus).

Donc, en conclusion, le seul moyen viable de rendre un thème enfant traduisible, s'il contient des chaînes non utilisées dans le thème parent, consiste à utiliser son propre domaine de texte et son propre fichier de traduction.

6
gmazzap

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

La méthode correcte pour utiliser un autre domaine de texte dans un thème enfant est la fonction load_child_theme_textdomain(). Vous pouvez l'utiliser de la même manière que d'autres fonctions load _..._ textdomain.

Il faut se méfier!

Contrairement aux fichiers de langue de plug-in, un nom tel que my_child_theme-de_DE.mo NE fonctionnera PAS. Bien que les fichiers de langue de plug-in vous permettent de spécifier le domaine de texte dans le nom du 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 de langue UNIQUEMENT .

0
docker