Je développe un site Web qui peut utiliser le russe et l'anglais comme langue principale. Le thème a traduit des chaînes dans les deux langues.
Maintenant, mon problème est que, chaque fois que j'utilise un crochet lorsque je suis connecté (par exemple, accrocher pour publier), les chaînes sont traduites en fonction de la localisation de l'utilisateur, pas du site Web. Ces chaînes sont enregistrées en tant que métadonnées, je ne peux donc pas les modifier après leur enregistrement.
Cela se produit également lorsque quelqu'un envoie une demande à l'aide de admin-ajax
. La réponse utilisera les paramètres régionaux de l'utilisateur au lieu des frontaux. Donc, je n'ai aucun contrôle sur elle.
Exemple:
add_action('wp_ajax_my_ajax', 'my_ajax_function');
function my_ajax_function(){
_e('Hello!','text-domain');
}
Je souhaite que la chaîne Hello!
soit dans la langue du site Web, et non de l'utilisateur.
Exemple 2:
add_action( 'publish_post', 'example_hook' );
function example_hook($post_id){
$data = __('Hello!','text-domain');
add_post_meta($post_id, 'my_metadata', $data);
}
Cela enregistre une traduction de Hello!
basée sur la langue de l'utilisateur qui a publié le message, ce qui n'est pas cool et devrait être basée sur la langue du site Web.
Est-il possible de définir tout ce qui se passe dans le thème (y compris les gestionnaires ajax dans functions.php) pour utiliser les paramètres régionaux du site Web?
(ce genre de problème explique en partie pourquoi ma recommandation standard est de ne pas avoir de langage frontal avec deux langues)
La raison principale du problème est que votre ajax renvoie du texte. AJAX devrait être traité comme une API qui fournit des valeurs au niveau de la machine que le front-end traduit en texte humain. Lorsque votre code est construit de la sorte, vous obtenez également un code meilleur et plus flexible puisque votre logique métier est découplée de celle de la présentation.
Vous devez donc inclure une valeur dans la traduction de texte dans le JS qui gère le AJAX (si vous manquez de temps de développement, utilisez plutôt le texte anglais comme "valeur" plutôt que le texte brut. texte.
Cela encombre évidemment le JS, il est donc probablement préférable d'utiliser le wp_localize_script
pour ne mettre en file d'attente que ce qui est nécessaire en fonction du contexte, mais le fait de l'avoir dans le JS lui-même n'est pas la fin du monde. (cette évidence dépend beaucoup de la manière dont vous obtenez la traduction, si elle se trouve dans le fichier word ordinaire .mo, la seule option est la première).
(pour les personnes qui pensent wtf ?, même si votre site est en anglais, vous aurez probablement besoin de localiser la date et l'heure, et cela ne peut se faire que du côté du navigateur, même chose pour la devise, séparateur de milliers, donc l'idée de la localisation du côté JS , même s’ils ne sont pas très populaires en WP, ont des problèmes réels qui ne peuvent être résolus que de cette manière, l’extension de la localisation dans JS devrait donc être une chose naturelle)