Liste de contrôle du fonctionnement du programme
- Le programme affiche-t-il des messages traduisibles à l'utilisateur, directement ou indirectement ? Un exemple de messages indirects est celui des messages stockés dans les bibliothèques.
Si oui :
- Ces messages sont-ils externalisés du programme au moyen des sous-routines de messagerie ?
- Avez-vous fourni des fichiers source de messages pour tous ces messages ?
- Quel est l'environnement local sous lequel le programme s'exécute ?
- S'il s'exécute dans l'environnement local déterminé par les variables d'environnement local, avez-vous appelé la sous-routine setlocale de la manière suivante ?
setlocale(LC_ALL, "")Remarque: Les catégories d'environnement local, dans leur ordre hiérarchique prédéfini, sont: LC_ALL, LC_COLLATE, TYPE_LOGIQUE, LC_MESSAGES, LC_MONÉTAIRE, LC_NUMÉRIQUEet LC_HEURE. - Si le programme s'exécute dans l'environnement local "C", à l'exception de l'affichage des messages dans l'environnement local spécifié par les variables d'environnement local, avez-vous appelé la sous-routine setlocale de la manière suivante ?
setlocale(LC_MESSAGES, "") - Après avoir appelé la sous-routine setlocale, avez-vous appelé la sous-routine catopen de la manière suivante ?
catopen(catalog_name, NL_CAT_LOCALE) - Avez-vous appelé la sous-routine catopen avec le nom de catalogue approprié ?
- Pour plus d'informations sur les messages traduisibles, voir Fonction de message .
- S'il s'exécute dans l'environnement local déterminé par les variables d'environnement local, avez-vous appelé la sous-routine setlocale de la manière suivante ?
- Le programme compare-t-il les chaînes de texte ?
Si oui :
- Les chaînes sont-elles comparées uniquement pour vérifier l'égalité ?
Si oui :
- Utilisez la sous-routine strcmp ou strncmp.
- N'utilisez pas la sous-routine strcoll ou strxfrm.
- Les chaînes sont-elles comparées pour voir lesquelles sont triées avant les autres, comme défini dans l'environnement local actuel ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Utilisez la sous-routine strcoll, strxfrm, wcscoll ou wcsxfrm.
- N'utilisez pas la sous-routine strxfrm ou strncmp.
- Appelez la sous-routine setlocale de la manière suivante :
- Les chaînes sont-elles comparées uniquement pour vérifier l'égalité ?
- Le programme fait-il une analyse syntaxique des noms de chemin des fichiers ?
Si oui :
- Si vous recherchez / (barre oblique), utilisez la sous-routine strchr.
- Si vous recherchez des caractères, sachez que les noms de fichier peuvent inclure des caractères multi-octets. Dans ce cas, appelez la sous-routine setlocale de la manière suivante, puis utilisez les sous-routines de recherche appropriées :
setlocale(LC_ALL, "")
- Le programme utilise-t-il des noms de système, tels que des noms de nœud, des noms d'utilisateur, des noms d'imprimante et des noms de file d'attente ?
Si oui :
- Les noms de système peuvent contenir des caractères multi-octets.
- Pour identifier un caractère multi-octets, appelez d'abord la sous-routine setlocale de la manière suivante, puis utilisez les sous-routines appropriées dans la bibliothèque.
setlocale(LC_ALL, "")
- Le programme utilise-t-il des propriétés de classe de caractères, telles que majuscule, minuscule et alphabétique ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Ne faites pas d'hypothèses sur les propriétés des caractères. Utilisez toujours des sous-routines système pour déterminer les propriétés des caractères.
- Les caractères sont-ils limités aux jeux de codes à un octet ?
Si oui :
- Utilisez l'une des sous-routines ctype : isalnum, isalpha, iscntrl, isdigit, isgraph, isprint, isspace ou isxdigit.
Sinon, les caractères peuvent être des caractères multi-octets :
- Utilisez la sous-routine iswalnum, iswalpha, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper ou iswxdigit.
- Utilisez l'une des sous-routines ctype : isalnum, isalpha, iscntrl, isdigit, isgraph, isprint, isspace ou isxdigit.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme convertit-il la casse (majuscule ou minuscule) des caractères ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Les caractères sont-ils limités aux jeux de codes à un octet ?
Si oui :
- Utilisez ces sous-routines conv : _tolower, _toupper, tolower ou toupper.
- Utilisez la sous-routine towlower ou towupper.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme garde-t-il une trace du mouvement du curseur sur un terminal tty ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Vous devrez peut-être déterminer la largeur de colonne d'affichage des caractères. Utilisez la sous-routine wcwidth ou wcswidth.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme effectue-t-il des E-S de caractère ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Les caractères sont-ils limités aux jeux de codes à un octet ?
Si oui :
- Utiliser les familles de sous-routines suivantes :
- fgetc, getc, getchar, getw
- fgets, gets
- fputc, putc, putchar, putw
- printf, scanf
- Utiliser les familles de sous-routines suivantes :
- fgetwc, getwc, getwchar
- fgetws, getws
- fputwc, putwc, putwchar
- Utiliser les familles de sous-routines suivantes :
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme parcourt-il un tableau de caractères ?
Si oui :
- Le tableau est-il limité aux caractères à un octet uniquement ?
Si oui :
- Ne nécessite pas
setlocale(LC_ALL, "") - Si p est le pointeur vers ce tableau de caractères à un octet, parcourez ce tableau en utilisant p++.
- Ne nécessite pas
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Utilisez la sous-routine mblen ou wcslen.
- Le tableau est-il limité aux caractères à un octet uniquement ?
- Le programme a-t-il besoin de connaître le nombre maximal d'octets utilisés pour coder un caractère dans le jeu de codes ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Utilisez la macro MB_CUR_MAX.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme formate-t-il des quantités numériques de date ou d'heure ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Utilisez la sous-routine nl_langinfo ou localeconv pour obtenir les informations spécifiques à l'environnement local.
- Utilisez la sous-routine strftime ou strptime.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme formate-t-il des quantités numériques ?
Si oui :
- Appelez la
sous-routine de la manière suivante :setlocalesetlocale(LC_ALL, "") - Utilisez la sous-routine nl_langinfo ou localeconv pour obtenir les informations spécifiques à l'environnement local.
- Utilisez la paire de sous-routines suivante, le cas échéant : printf, scanf.
- Appelez la
- Le programme formate-t-il des quantités monétaires ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Utilisez la sous-routine nl_langinfo ou localeconv pour obtenir les informations spécifiques à l'environnement local.
- Utilisez la sous-routine strfmon pour formater des quantités monétaires.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme recherche-t-il des chaînes ou des caractères ?
Si oui :
- Recherchez-vous des caractères à un octet dans du texte à un octet ?
- Ne nécessite pas
setlocale(LC_ALL, "") - Utilisez des sous-routines de chaîne libc standard telles que la sous-routine strchr.
- Ne nécessite pas
- Recherchez-vous des caractères dans la plage 0x00-0x3F (la plage de points de code unique) ?
- Ne nécessite pas
setlocale(LC_ALL, "") - Utilisez des sous-routines de chaîne libc standard telles que les sous-routines strchr, strcspn, strpbrk, strrchr, strspn, strstr, strtok et memchr.
- Recherchez-vous des caractères dans la plage 0x00-0xFF ?
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Deux méthodes sont disponibles :
Utilisez la sous-routine mblen pour ignorer les caractères multi-octets. Ensuite, lorsque vous rencontrez des caractères à un octet, vérifiez l'égalité. Voir l'élément 2 de la liste de contrôle.
OR
Convertissez le caractère de recherche et la chaîne recherchée en caractères larges, puis utilisez des sous-routines de recherche de caractères larges.
- Recherchez-vous des caractères à un octet dans du texte à un octet ?
- Le programme effectue-t-il une correspondance de modèle d'expression régulière ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Utilisez la sous-routine regcomp, regexec ou regerror.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme demande-t-il à l'utilisateur des réponses affirmatives/négatives ?
Si oui :
- Appelez la sous-routine setlocale de la manière suivante :
setlocale(LC_ALL, "") - Placez l'invite dans le catalogue de messages. Utilisez les sous-routines catopen et catgets pour extraire le catalogue et afficher l'invite.
- Utilisez la sous-routine rpmatch pour correspondre à la réponse de l'utilisateur.
- Appelez la sous-routine setlocale de la manière suivante :
- Le programme utilise-t-il des caractères de dessin de boîtes spéciaux ?
Si oui :
- N'utilisez pas de caractères de dessin de boîtes spécifiques à un jeu de codes.
- Utilisez plutôt les caractères de dessin de boîtes et les attributs spécifiés dans le fichier terminfo.
- Le programme effectue-t-il un traitement spécifique à la culture ou à l'environnement local qui n'est pas abordé ici ?
Si oui :
- Externalisez les modules spécifiques à la culture. Ne les incluez pas au programme exécutable.
- Chargez les modules lors de l'exécution à l'aide des sous-routines fournies par le système, telles que la sous-routine load.
- Si le système ne fournit pas de telles installations, reliez-les de manière statique mais fournissez-les de manière modulaire.