web-dev-qa-db-fra.com

PHPCS: les chaînes doivent avoir un contenu traduisible

Je valide le plugin pour le rendre compatible avec WPCS. une fonction qui contient gettext placeholder renvoyant une erreur lorsque j’exécute la commande phpcs. Le code source et la capture d'écran de l'erreur sont joints pour référence. Peut-être que je manque quelque chose ou le faire de manière incorrecte?

/**
 * Add Error.
 *
 * @package Mypackage
 * @since 0.1.0
 *
 * @param string $code Error Code.
 * @param string $message Error Message.
 * @return object WP_Error Returns Error Object.
 */
function mypackage_add_error( $code, $message ) {

    /* translators: %s: Error Message */
    return new WP_Error( $code, sprintf( esc_html__( '%s', 'mypackage' ), $message ) );
}

Capture d'écran de Error. enter image description here 

1
Anwer AR

Il y a plusieurs problèmes avec votre code

  1. Il n'y a pas besoin de traduction ici. Le message aurait dû être traduit avant d'être transmis à cette fonction. À cette fonction, il n'y a pas du tout de contexte pour créer une traduction différente de %s

  2. L'échappement devrait se produire à la sortie. Vous devriez échapper au résultat de la variable sprintf et de la traduction.

Et gardez à l'esprit que WPCS est un outil pour vous aider, pas la bible. Au moins à son stade actuel, il manque trop de fonctionnalités pour le suivre aveuglément tout le temps. Certaines des erreurs qu'il émet actuellement sont dues à une mauvaise analyse de PHP moderne ou à des fonctionnalités manquantes. Par conséquent, si vous êtes sûr à 100% que, dans votre cas particulier, %s devrait pouvoir être traduit, allez-y.

3
Mark Kaplun

Vous essayez de traduire un espace réservé %s qui n'est pas un contenu traduisible et il sera remplacé par une variable ultérieurement. Il est préférable de transmettre le $message traduit au lieu d'un $message à traduire.

Vous devriez écrire la définition de la fonction de cette façon

function mypackage_add_error( $code, $message ) {
    return new WP_Error( $code, $message );
}

Et la fonction mypackage_add_error() devrait être utilisée de cette façon

mypackage_add_error( 'test-error', esc_html__( 'Test error message', 'text-domain' ) );
3
obiPlabon