Internationaliser un plugin avec une demi-douzaine de codes courts tels que:
function plugin_show_schedule( $atts, )
{
extract( shortcode_atts( array(
'type' => __('week', 'mz-mindbody-api')
), $atts ) );
//Do stuff
return $something;
}
add_shortcode('plugin-show-schedule', 'plugin_show_schedule');
Et trouvé un article décrivant quelques façons de traduire des codes abrégés comme ceci:
function plugin_show_schedule( $atts, )
{
extract( shortcode_atts( array(
__('type', 'my-plugin') => __('week', 'mz-mindbody-api')
), $atts ) );
$type = ${__('type', 'mz-mindbody-api')};
//Do stuff
return $something;
}
add_shortcode(__('plugin-show-schedule', 'my-plugin'), 'plugin_show_schedule');
Je peux obtenir que type
traduise comme prévu, mais plugin-show-schedule
reste dans en_EN
et l'article ci-dessus contient des commentaires disant:
De ma compréhension, l'anglais est le langage fondamental de la programmation, mais mon expérience est également assez anglo-centrique. Les plugins internationalisés sont-ils censés avoir des codes abrégés traduits, et si est recommandé, pourquoi mon code ne fonctionne-t-il pas?
MODIFIER:
Sur la base de la réponse ci-dessous, une méthode de remplacement pour extract
:
$atts = shortcode_atts( array(
'type' => '1'
), $atts );
$type = $atts['type'];
(La source de $type
est maintenant visible dans la portée actuelle.)
Avant de commencer, vous ne devriez jamais utiliser extract()
. Il n'est pas fiable et extrêmement difficile à déboguer en cas d'échec. Pour ces raisons spécifiques, il a été (presque) complètement supprimé du noyau et du codex. Pour plus de détails, voir le billet de train 22400 . Avec query_posts
, ce sont les deux fonctions les plus couramment utilisées et les deux pires fonctions à utiliser.
Revenons au point réel. Les noms de code abrégé et les clés d'attribut ne doivent jamais être traduits, et doivent toujours être en anglais. C'est une mauvaise pratique et une erreur de le faire autrement.
Si un nom de code abrégé est rendu traduisible, tout texte peut être utilisé comme nom de code abrégé. Cela implique ce qui suit:
J'ai un shortcode [somename]
. Maintenant, je peux décider de l’utiliser comme suit, [anothername]
. Je télécharge un plugin qui a un shortcode appelé [anothername]
. COUP!!! Vous avez un conflit d'affectation de noms. Quel shortcode doit être chargé
Les mots ayant la même orthographe ont différentes significations dans différentes langues, mais l'orthographe du mot est un mot valide en anglais. Prenez le simple mot bang . En anglais, est un mot qui décrit le son d’une explosion. En afrikaans, ma langue maternelle, cela signifie peur s’il est traduit en anglais. Maintenant, j'ai un shordcode [afraid]
. Parce que je suis Afrikaans, je le veux [bang]
. Je télécharge un plugin explosif avec un shortcode [bang]
, et BOOM !!! va tout. ( boom est le mot afrikaans pour l'arbre , encore un autre mot valide en anglais et une autre langue avec des significations différentes
PHP n'autorise pas les clés en double. Prenons le scénario suivant
J'ai un shortcode suivant: [someshortcode key='value']
. Dans mon shortcode, mes attributs sont __( 'key' ) => 'default'
et 'somekey' => 'some other value'
. Comme je peux entrer n'importe quel texte pour key
, j'ai décidé d'utiliser somekey
comme valeur traduite. BOOM!!! Votre shortcode échoue et donne une sortie inattendue et vous ne savez pas pourquoi. Vous passez des heures à déboguer et maudire juste pour découvrir que votre traduction en est le coupable
Les attributs de code court peuvent être filtrés si le troisième paramètre shortcode_atts
est défini. Rendre les clés d'attribut traduisibles peut avoir des résultats inattendus lors du filtrage des attributs à travers ces filtres
Ce ne sont là que quelques remarques importantes sur la nécessité de rendre les noms et les attributs de shortcode traduisibles.
Vous devez uniquement rendre le texte traduisible qui sera envoyé à l'écran et ce qui sera visible par l'utilisateur final. Et rappelez-vous, même si cela n’a aucun sens pour vous, restez en anglais lorsque vous développez des thèmes et des plugins