IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Messages d'erreurs en français avec strerror


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 300
    Par défaut Messages d'erreurs en français avec strerror
    bonjour,

    Je cherche à utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(stderr,"%s\n",strerror(errno));
    en ayant les messages en français.

    Si je tapes locale, j'ai la valeur :
    LC_MESSAGES="fr_FR.UTF-8"

    si quelqu'un peut m'expliquer, je vous en remercie d'avance.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour;

    deux possibilités :

    • utiliser la variable d'environnement LANGUAGE :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      $ls /truc
      ls: cannot access /truc: No such file or directory
      $LC_MESSAGES=fr ls /truc
      ls: cannot access /truc: No such file or directory
      $LANGUAGE=fr ls /truc
      ls: impossible d'accéder à /truc: Aucun fichier ou dossier de ce type
    • installer le package de traduction des messages de la libc en Français. Avec ma distribution les traductions se trouvent dans /usr/share/locale/fr/LC_MESSAGES/libc.mo


    EDIT:

    une troisième possibilité :
    • utiliser setlocale (je supposais que tu l'avais fait ...)
      Un code pas trop trop popre pour l'exemple
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <errno.h>
      #include <locale.h>
       
      int main (int argc, char *argv[]) {
       
        char *loc;
       
        char *old_loc=setlocale (LC_ALL, NULL);
        printf ("old locale = %s\n", old_loc?old_loc:"not defined");
       
        if ( (argc>1) && argv[1]) {
          if ( (loc=setlocale (LC_ALL, argv[1])) == NULL ) {
            printf( "'%s' not a valid locale string\n", argv[1]);
          } else {
            printf ("new locale = %s\n", loc);
          }
        }
       
        printf ("EINVAL -> %s\n", strerror(EINVAL));
       
        return 0;
      }
      Donne à l'exécution :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      $ ./err 
      old locale = C
      EINVAL -> Invalid argument
      $ 
      $ LANGUAGE=fr_FR.utf8 ./err
      old locale = C
      EINVAL -> Invalid argument
      $ 
      $ ./err fr_FR.utf8
      old locale = C
      new locale = fr_FR.utf8
      EINVAL -> Argument invalide
      $ 
      $ LANGUAGE=en ./err fr_FR.utf8
      old locale = C
      new locale = fr_FR.utf8
      EINVAL -> Invalid argument

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 300
    Par défaut
    Merci Picodev,

    ça fonctionne en ajoutant ceci à mon code :

    J'ai cru comprendre que cette commande prend les infos de locale du système. Pourquoi cela n'est pas fait par défaut ? mon système étant en français.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    La locale par défaut est probablement l'équivalent de setlocale (LC_ALL,"C");
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Dans la doc de la glibc :
    7.4 How Programs Set the Locale

    A C program inherits its locale environment variables when it starts up. This happens automatically. However, these variables do not automatically control the locale used by the library functions, because ISO C says that all programs start by default in the standard ‘C’ locale. To use the locales specified by the environment, you must call setlocale. Call it as follows:

    setlocale (LC_ALL, "");
    to select a locale based on the user choice of the appropriate environment variables.

    You can also use setlocale to specify a particular locale, for general use or for a specific category.
    Le comportement découle de ce qui est requis par la norme POSIX.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 494
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    J'ai trouvé cette discussion intéressante et j'ai donc voulu testé tout ça. J'ai donc écrit un petit bout de C, que je compile avec GCC sous OS X.

    Voici le code C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <errno.h>
    #include <locale.h>
    #include <stdio.h>
    #include <string.h>
     
    int main(int argc, char **argv)
    {
    	errno = 0;
     
    	// Show current locale
    	char *loc = setlocale(LC_ALL, NULL);
    	printf("When program starts, the locale is: %s\n", loc);
    	puts("Let's change the locale...");
     
    	// Try to change the locale and print a localized message in case of success
    	loc = setlocale(LC_ALL, "fr_FR");
    	if(loc == NULL)
    	{
    		perror("Error: impossible to set locale properly");
    	}
    	else
    	{
    		printf("The new locale is: %s\n", loc);
    		printf("Checking the current locale: %s\n", setlocale(LC_ALL, NULL));
    		puts("The next message should be localized");
    		printf("%s\n", strerror(EINVAL));
    	}
    }
    Le problème est que le message fourni par strerror n'est jamais traduit. J'ai essayé avec es_ES et j'obtiens aussi un message en anglais. Un exemple en console :
    $ ./C
    When program starts, the locale is: C
    Let's change the locale...
    The new locale is: fr_FR
    Checking the current locale: fr_FR
    The next message should be localized
    Invalid argument
    
    Avez-vous une idée de ce qui m'échappe ? : /
    Merci d'avance.

Discussions similaires

  1. Messages d'erreur en français
    Par rambc dans le forum Général Python
    Réponses: 11
    Dernier message: 18/06/2010, 16h35
  2. Réponses: 0
    Dernier message: 06/08/2009, 13h13
  3. message d'erreur sous eclipse avec jdom
    Par kayenne77 dans le forum XML/XSL et SOAP
    Réponses: 13
    Dernier message: 03/07/2009, 14h11
  4. PDO_MySQL + Message d'erreur en français
    Par ToxiZz dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 14/06/2006, 10h50
  5. [IB6] Messages d'erreur en Français ?
    Par qi130 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/02/2005, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo