web-dev-qa-db-fra.com

Les shorcodes dans les plugins i18n doivent-ils être traduits et si oui, comment?

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:

  1. "En traduisant la balise shortcode, un autre plugin ne pourrait pas s’accrocher de manière fiable à ce filtre"
  2. "En tant que traducteur avec 36 ans d’expérience, je ne peux que sourire - tout traducteur professionnel digne de ce nom sera capable de repérer des codes courts et ne les traduira évidemment PAS!"

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.)

1
MikeiLL

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.

RAISONS (NOMS DE CODES COURTS)

  • 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

RAISONS (ATTRIBUER LES CLÉS)

  • 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

2
Pieter Goosen