web-dev-qa-db-fra.com

Wp-content/langages/themes avec un thème enfant

Je souhaite créer un thème enfant pour le thème TwentyFifteen, qui personnalisera de nombreuses choses, y compris la traduction. Lorsque j'installe WordPress dans ma langue (farsi), il inclut les fichiers de langue TwentyFifteen dans wp-content/languages/themes

Ainsi, lorsque je crée un dossier languages dans mon thème enfant, que je lui ajoute des fichiers de langue personnalisés et que je ajoute load_theme_textdomain( 'twentyfifteen', get_stylesheet_directory() . '/languages' ) à functions.php de mon thème enfant, mes fichiers de langue personnalisés ne se chargent pas et à la place, les fichiers à charger wp-content/languages/themes. Que puis-je faire pour remplacer ces fichiers?

1
Omid Mohammadi

Puisque WP 4.6 4.6 load_theme_textdomain() (et par conséquent load_child_theme_textdomain()) donnera la priorité aux fichiers .mo téléchargés à partir de la plate-forme de traduction en ligne de WP (translate.wordpress.org). En raison de nouveaux codes ( ici, à la ligne 769 ), ces fonctions ignoreront complètement vos fichiers .mo locaux si textdomain se trouve dans le répertoire général languages ​​/ .

Vous pouvez cependant utiliser la fonction plus élémentaire load_textdomain() pour charger directement votre fichier .mo et remplacer les chaînes du domaine d'origine, comme ceci:

$domain = 'textdomain-to-override';
$path = get_stylesheet_directory() . '/languages/'; // adjust to the location of your .mo file

$locale = apply_filters( 'theme_locale', get_locale(), $domain );
load_textdomain( $domain, $path . $locale . '.mo' );
2
Henrique Vianna

Voici une citation de la source de load_textdomain (in WP 4.6):

Si le domaine de texte existe déjà, les traductions seront fusionnées. Si les deux ensembles ont la même chaîne, la traduction de la valeur d'origine sera prise.

En d'autres termes, pour que votre traduction annule celle de TwentyFifteen, vous devez vous assurer que vos mo-fichiers sont chargés en premier, ils seront donc considérés comme "l'original". Pour ce faire, vous pouvez utiliser le fait que le functions.php d'un thème enfant est chargé avant celui du parent.

Dans le thème parent, recherchez la fonction qui charge le textdomain. Il utilise probablement le hook after_setup_theme. Assurez-vous que votre thème enfant utilise le même domaine de texte que le parent. Puis chargez votre textdomain avec load_child_theme_textdomain sur le même hook, mais avec une priorité supérieure .

1
cjbj