2009-08-14 8 views
0

Nous avons beaucoup de chaînes dans nos fichiers de ressources qui contient le format .egComment valider la chaîne de format

« {0} a déplacé {1} »

Ces chaînes sont transmises à String.Format() par les applications, parfois les traducteurs dérangent les "marqueurs de mise en forme" Par conséquent, je souhaite trouver/écrire un outil qui vérifie que toutes les chaînes dans le fichier de ressources a un format valide.

Je connais pour chaque clé les nombres d'arguments passés à String.Format afin qu'ils puissent également être utilisés dans les validations. Donc en plus de vérifier que le "{" correspond au "}", y a-t-il un moyen facile de trouver la plupart des erreurs dans les chaînes de format?

(J'utilise .NET, cette vérification sera bien sûr fait dans le cadre du processus de construction)

+0

Assurez-vous de ne pas manquer les accolades échappées, telles que "" Ceci est un format: {0}, ce n'est pas: {{text}} "' –

Répondre

1

Je suis venu avec une solution simple qui donne un résultat raisonnable, je sais le nombre d'arguments à l'instruction de format mais pas le type des arguments. Cependant, la plupart des arguments sont des chaînes.

Alors

if (numberOfArguments == 3) 
{ 
    try 
    { 
    String.Format(theTranslatorString, "", "", "") 
    } 
    catch 
    { 
    // tell the translator there is a problem with the string format 
    } 
} 

Bien sûr, ce serait écrit sans « si » pour chaque nombre d'arguments dans la vie réelle.

1

Cela ressemble à un scénario de test d'unité classique. Pouvez-vous conduire un test de construction/unité automatisé à partir du déclencheur de validation du code source pour ceux-ci? Le test unitaire vérifie simplement que chaque chaîne de format est toujours analysable.

+0

Juste ce que je pense, mais comment je "vérifier que chaque chaîne de format est toujours analysable. " –

+0

Ne va-t-il pas lancer une exception s'il ne peut pas l'analyser? Ou peut-être vous pouvez vérifier après le formatage que la chaîne contient les éléments que vous attendez. par exemple. essayer d'insérer -TEST1-, -TEST2- ou similaire ... –

+0

Je souhaite avoir un test unitaire qui vérifie le foramt de TOUTES les chaînes traduites. Nous n'avons pas de tests unitaires pour la plupart de notre interface utilisateur et la plupart des chaînes traduisibles sont utilisées dans l'interface utilisateur. –

1

On dirait que vous validez une chaîne dans l'expression, vous devez donc utiliser expressions régulières Look à link text

Questions connexes