J'ai parcouru tous les thèmes similaires que je peux trouver et je pense que je devrais avoir tous les éléments en place pour que les chaînes traduites apparaissent, mais ils ne sont pas. Je suis sur le point de tirer mes cheveux!
Voici ce que j'ai à faire - je crée un thème personnalisé (basé sur le démarreur _s) et j'ai ajouté des modèles pour certains types de publication personnalisés (créés dans mes propres plugins). J'ai installé le plugin Loco Translate pour créer et éditer des fichiers po/mo. Les fichiers sont stockés dans 'mytheme/languages'.
Dans le functions.php de mon thème, j'ai:
/**
* Load theme text domain for translations
*/
function mytheme_load_theme_textdomain() {
if (load_theme_textdomain('mytheme', get_template_directory() . '/languages')) {
error_log("Text Domain loaded.");
}
}
add_action('after_setup_theme', 'mytheme_load_theme_textdomain');
Dans mon fichier de pièce modèle, j'ai les chaînes configurées pour l'affichage comme ceci:
<?php _e('My String Text', 'mytheme'); ?>
Lorsque je charge la page contenant les chaînes traduites, puis examinez le fichier debug.log, le message "Domaine texte chargé" apparaît. Donc, cette partie devrait fonctionner. Loco Translate voit correctement les chaînes et me permet de les traduire. Donc, tout dans le fichier .mo devrait être correct.
J'ai essayé de coder en dur les paramètres régionaux dans wp-config.php (juste pour vérifier) en ajoutant define('WPLANG', 'es_ES');
et en renvoyant la variable globale $locale
au journal de débogage à partir de la fonction décrite ci-dessus. Cela fonctionne correctement.
Edit: ajout de la sortie du plugin debug-mo-translations
Debug MO Translations (Version 1.0)
Locale: es_ES
Domain: mytheme
File: /wp-content/languages/themes/mytheme-es_ES.mo (not found)
Called in: /wp-includes/l10n.php line 792 load_textdomain
Domain: mytheme
File: /wp-content/languages/loco/themes/mytheme-es_ES.mo (not found)
Called in: /wp-content/plugins/loco-translate/src/hooks/LoadHelper.php line 103 load_textdomain
Domain: mytheme
File: /wp-content/themes/mytheme/languages/es_ES.mo (0.62kb)
Called in: /wp-includes/l10n.php line 800 load_textdomain
Ainsi, j'ai des chaînes traduisibles dans mon fichier de modèle, des traductions dans des fichiers .po/.mo dans mon thème, les paramètres régionaux sont correctement définis et je charge le domaine de texte de mon thème dans mon fichier functions.php. Mais les cordes n'apparaissent toujours pas sous forme traduite au début! Qu'est-ce que je rate?
Merci d'avance!
Eh bien, il me semble avoir tout réglé maintenant. Dans mon cas, je suis revenu et ai actualisé le fichier de modèle .pot en effectuant une petite modification et en enregistrant (en utilisant Loco Translate). Ensuite, je suis retourné à l'écran de l'éditeur de fichier .po, re-synchronisé avec le fichier .pot et enregistré pour mettre à jour le fichier .mo. Les traductions apparaissent maintenant dans mon thème. Woo hoo!
J'espère que cela pourrait aider la prochaine personne à se retrouver dans une situation similaire!
Vous devriez analyser le chemin du fichier de langue, est-ce correct?
Plugins utiles pour ce travail:
Vous devriez vérifier la fonction pour obtenir le chemin. La fonction get_template_directory
récupère le chemin du thème parent, pas un thème enfant. Si vous souhaitez utiliser votre fichier de traduction d'un thème enfant, utilisez get_stylesheet_directory_uri
. Cette fonction obtient toujours le chemin de la feuille de style active.