setlocale() always returns "C"

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • yogeshmk

    setlocale() always returns "C"

    I'm writing an application which is required to function with many
    languages and also compile on Linux & windows. Here's how I find the
    locale ..

    # include <stdio.h>
    # include <locale.h>

    int
    main(void)
    {
    unsigned char* loc = NULL;
    loc = setlocale(LC_ME SSAGES, NULL);

    puts (loc);
    return 0;
    }

    Depending upon what string 'loc' contains, I need to write "hello
    world" (or any other message) in the corrosponding language (there are
    separate header files with texts in different languages coded in a
    struct.

    I've ran this piece of code on RedHat linux (en_US.UTF-8), Windows XP
    (??) and Ubuntu linux (on which the `locale` *command* returns
    "en_IN.UTF-8" which is correct). However, I observe that the function
    always returns "C" as the locale.

    Q1. What explains this behaviour of 'setlocale()'
    Q2. Any other way to find out the currently set language on the
    computer?

    cheers!
    --
    ~ yogesh kulkarni.

  • Huibert Bol

    #2
    Re: setlocale() always returns &quot;C&quot ;

    yogeshmk wrote:
    I'm writing an application which is required to function with many
    languages and also compile on Linux & windows. Here's how I find the
    locale ..
    >
    # include <stdio.h>
    # include <locale.h>
    >
    int
    main(void)
    {
    unsigned char* loc = NULL;
    loc = setlocale(LC_ME SSAGES, NULL);
    >
    puts (loc);
    return 0;
    }
    >
    I've ran this piece of code on RedHat linux (en_US.UTF-8), Windows XP
    (??) and Ubuntu linux (on which the `locale` *command* returns
    "en_IN.UTF-8" which is correct). However, I observe that the function
    always returns "C" as the locale.
    >
    Q1. What explains this behaviour of 'setlocale()'
    Q2. Any other way to find out the currently set language on the
    computer?
    A program's locale at startup will always be "C", so that's all you're going
    to get without explicitly setting it to something else.

    To change the current locale you want to use something like:

    setlocale(LC_ME SSAGES, "");

    - Huibert.

    --
    Okay... really not something I needed to see. --Raven

    Comment

    • yogeshmk

      #3
      Re: setlocale() always returns &quot;C&quot ;

      On Aug 10, 5:12 pm, Huibert Bol <huibert....@qu icknet.nlwrote:
      yogeshmk wrote:
      I'm writing an application which is required to function with many
      languages and also compile on Linux & windows. Here's how I find the
      locale ..
      >
      # include <stdio.h>
      # include <locale.h>
      >
      int
      main(void)
      {
          unsigned char* loc = NULL;
          loc = setlocale(LC_ME SSAGES, NULL);
      >
          puts (loc);
          return 0;
      }
      >
      I've ran this piece of code on RedHat linux (en_US.UTF-8), Windows XP
      (??) and Ubuntu linux (on which the `locale` *command* returns
      "en_IN.UTF-8" which is correct). However, I observe that the function
      always returns "C" as the locale.
      >
      Q1. What explains this behaviour of 'setlocale()'
      Q2. Any other way to find out the currently set language on the
      computer?
      >
      A program's locale at startup will always be "C", so that's all you're going
      to get without explicitly setting it to something else.
      >
      To change the current locale you want to use something like:
      >
        setlocale(LC_ME SSAGES, "");
      >
       - Huibert.
      >
      --
      Okay... really not something I needed to see.  --Raven
      Ummm....I was under the impression that 'setlocale()' with second
      param NULL will query and return the current locale of the OS.

      If what you say is right, then I have to set the locale myself, but
      the question is which? I don't know whether my program is running on a
      computer with spanish locale settings so I need to print "Hola Terra!"
      instead of "Hello World!"?

      --
      ~yogesh kulkarni.

      Comment

      • Huibert Bol

        #4
        Re: setlocale() always returns &quot;C&quot ;

        yogeshmk wrote:
        On Aug 10, 5:12 pm, Huibert Bol <huibert....@qu icknet.nlwrote:
        >To change the current locale you want to use something like:
        >>
        > setlocale(LC_ME SSAGES, "");
        If what you say is right, then I have to set the locale myself, but
        the question is which? I don't know whether my program is running on a
        computer with spanish locale settings so I need to print "Hola Terra!"
        instead of "Hello World!"?
        Using an empty string (like in the example above), will set the locale
        "correctly" . Under POSIX systems, for example, it will use the LC_*
        environment variables.

        --
        Okay... really not something I needed to see. --Raven

        Comment

        • yogeshmk

          #5
          Re: setlocale() always returns &quot;C&quot ;

          On Aug 10, 5:51 pm, yogeshmk <yogesh.m.kulka ...@gmail.comwr ote:
          On Aug 10, 5:12 pm, Huibert Bol <huibert....@qu icknet.nlwrote:
          >
          >
          >
          yogeshmk wrote:
          I'm writing an application which is required to function with many
          languages and also compile on Linux & windows. Here's how I find the
          locale ..
          >
          # include <stdio.h>
          # include <locale.h>
          >
          int
          main(void)
          {
              unsigned char* loc = NULL;
              loc = setlocale(LC_ME SSAGES, NULL);
          >
              puts (loc);
              return 0;
          }
          >
          I've ran this piece of code on RedHat linux (en_US.UTF-8), Windows XP
          (??) and Ubuntu linux (on which the `locale` *command* returns
          "en_IN.UTF-8" which is correct). However, I observe that the function
          always returns "C" as the locale.
          >
          Q1. What explains this behaviour of 'setlocale()'
          Q2. Any other way to find out the currently set language on the
          computer?
          >
          A program's locale at startup will always be "C", so that's all you're going
          to get without explicitly setting it to something else.
          >
          To change the current locale you want to use something like:
          >
            setlocale(LC_ME SSAGES, "");
          >
           - Huibert.
          >
          --
          Okay... really not something I needed to see.  --Raven
          >
          Ummm....I was under the impression that 'setlocale()' with second
          param NULL will query and return the current locale of the OS.
          >
          If what you say is right, then I have to set the locale myself, but
          the question is which? I don't know whether my program is running on a
          computer with spanish locale settings so I need to print "Hola Terra!"
          instead of "Hello World!"?
          >
          --
          ~yogesh kulkarni.
          I anyway tried the setlocale() call again.

          loc = setlocale(LC_AL L /* any LC_* catagories are ok here */, "" /
          *instead of NULL */);

          returns me the current locale set on my system.
          Thanks for the reply.

          cheers!
          --
          ~ yogesh kulkarni.

          Comment

          • santosh

            #6
            Re: setlocale() always returns &quot;C&quot ;

            yogeshmk wrote:
            On Aug 10, 5:12 pm, Huibert Bol <huibert....@qu icknet.nlwrote:
            >yogeshmk wrote:
            I'm writing an application which is required to function with many
            languages and also compile on Linux & windows. Here's how I find
            the locale ..
            >>
            # include <stdio.h>
            # include <locale.h>
            >>
            int
            main(void)
            {
            unsigned char* loc = NULL;
            loc = setlocale(LC_ME SSAGES, NULL);
            >>
            puts (loc);
            return 0;
            }
            >>
            I've ran this piece of code on RedHat linux (en_US.UTF-8), Windows
            XP (??) and Ubuntu linux (on which the `locale` *command* returns
            "en_IN.UTF-8" which is correct). However, I observe that the
            function always returns "C" as the locale.
            >>
            Q1. What explains this behaviour of 'setlocale()'
            Q2. Any other way to find out the currently set language on the
            computer?
            >>
            >A program's locale at startup will always be "C", so that's all
            >you're going to get without explicitly setting it to something else.
            >>
            >To change the current locale you want to use something like:
            >>
            >setlocale(LC_M ESSAGES, "");
            >>
            >- Huibert.
            >>
            >--
            >Okay... really not something I needed to see.  --Raven
            >
            Ummm....I was under the impression that 'setlocale()' with second
            param NULL will query and return the current locale of the OS.
            >
            If what you say is right, then I have to set the locale myself, but
            the question is which? I don't know whether my program is running on a
            computer with spanish locale settings so I need to print "Hola Terra!"
            instead of "Hello World!"?
            You can usually get the locale being used from environment variables,
            for example the LANG variable under Unix system. For more details ask
            in a group targetting your system like comp.unix.progr ammer or
            comp.os.ms-windows.program mer.win32, since C leaves it entirely upto
            the implementation to assign the semantics for locales other than "C".
            In a production program you'll probably want to use a tried and tested
            internationalis ation package rather than reinvent on your own.

            Comment

            Working...