web-dev-qa-db-fra.com

Localiser des chaînes qui fabriquent de l'extérieur du plugin?

Le plug-in interroge l'API distante et, dans certaines circonstances (principalement des erreurs), affiche des messages textuels à partir des réponses de l'API. Tous les messages des réponses de l'API sont en anglais, mais étant donné qu'ils sont plus ou moins intégrés dans le plugin, il serait logique de les rendre localisés et pouvant être affichés dans une langue différente pour correspondre à l'interface du plugin.

Question théorique - ces messages doivent-ils être localisés ou ne peuvent-ils pas être localisés?

Question de codage - comment localisez-vous un tel logiciel et conservez-vous la compatibilité avec les outils associés? Est-ce que quelque chose comme __( $message ); a même un sens?

Dans le passé, j’utilisais la localisation de Codestyling qui repose sur l’analyse du source du plugin pour extraire les chaînes ... Mais il n’ya rien à extraire car les chaînes ne sont pas contenues dans le plugin. corps.

3
Rarst

Ces messages doivent-ils être localisés ou sont-ils hors de portée pour la localisation?

Oui, ils devraient être localisés ... mais ne dépendent pas du texte renvoyé par l'API.

Est-ce que quelque chose comme __( $message ); a même un sens?

Pas vraiment. Tout d'abord, vous ne fournissez pas de domaine de texte que la chaîne utilisera pour la localisation. Cela devrait vraiment être __( $message, 'my-text-domain' );. Même dans ce cas, si vous ne possédez pas de liste statique pour $message, la localisation est un point discutable.

Que pouvez-vous faire à la place

Le principe de robustesse est une bonne chose à garder à l'esprit lorsque vous intégrez du contenu à partir d'une API externe. Vous ne pouvez jamais avoir entièrement confiance en ce que l'API vous offre… les propriétaires d'origine peuvent changer les choses sans vous en informer, ou leur système peut tomber en panne et fournir des informations erronées. Donc, vous devriez toujours:

Soyez conservateur dans ce que vous envoyez. soyez libéral dans ce que vous acceptez.

Si vous connaissez déjà le contenu renvoyé par l'API (c'est-à-dire une liste statique de chaînes), insérez-le dans votre plug-in. Ensuite, utilisez une méthode d'assainissement pour mapper ce que l'API a renvoyé à vos chaînes localisées.

Par exemple:

$map = array( 
    'This is one return' => __( 'This is one return', 'my-text-domain' ),
    'This is another' => __( 'This is another', 'my-text-domain' )
);

sanitize_api_feedback( $api_sent ) {
    return $map[$api_sent];
}

De cette manière, vous n'utilisez jamais réellement la sortie brute de l'API externe , mais l'exécutez toujours via votre propre filtre. Vous avez un contrôle total sur les chaînes de texte utilisées et pouvez également les exécuter à travers les filtres de localisation standard.

Si le retour de l'API est de forme libre

Si vous n'avez pas de liste de chaînes statiques renvoyées par l'API, cela ne fonctionnera pas. Là encore, si l'API renvoie du contenu de forme libre, vous devez soit:

  1. Laisser la localisation jusqu'à l'API elle-même (si possible)
  2. Fournissez à l'utilisateur final un autre service de traduction ... peut-être Google Translate

Il n’ya aucun moyen pour votre plug-in d’être responsable de la traduction à la volée de chaînes de forme libre. Mais une liste statique de messages d'erreur facilement attendus? C'est certainement quelque chose que vous pouvez et devez faire.

5
EAMann