Provided by: manpages-posix-dev_2013a-2_all bug

PROLOG

       This  manual  page  is part of the POSIX Programmer's Manual.  The Linux implementation of this interface
       may differ (consult the corresponding Linux manual page for details of Linux behavior), or the  interface
       may not be implemented on Linux.

NAME

       setlocale — set program locale

SYNOPSIS

       #include <locale.h>

       char *setlocale(int category, const char *locale);

DESCRIPTION

       The  functionality  described  on  this  reference  page is aligned with the ISO C standard. Any conflict
       between the requirements described  here  and  the  ISO C  standard  is  unintentional.  This  volume  of
       POSIX.1‐2008 defers to the ISO C standard.

       The setlocale() function selects the appropriate piece of the global locale, as specified by the category
       and locale arguments, and can be used to change or query the entire global locale  or  portions  thereof.
       The  value LC_ALL for category names the entire global locale; other values for category name only a part
       of the global locale:

       LC_COLLATE  Affects the behavior of regular expressions and the collation functions.

       LC_CTYPE    Affects the behavior of regular expressions, character classification,  character  conversion
                   functions, and wide-character functions.

       LC_MESSAGES Affects  the  affirmative and negative response expressions returned by nl_langinfo() and the
                   way message catalogs are located. It may also affect the behavior of functions that return or
                   write message strings.

       LC_MONETARY Affects the behavior of functions that handle monetary values.

       LC_NUMERIC  Affects the behavior of functions that handle numeric values.

       LC_TIME     Affects the behavior of the time conversion functions.

       The  locale argument is a pointer to a character string containing the required setting of category.  The
       contents of this string are implementation-defined. In addition, the following preset  values  of  locale
       are defined for all settings of category:

       "POSIX"     Specifies  the  minimal  environment  for C-language translation called the POSIX locale. The
                   POSIX locale is the default global locale at entry to main().

       "C"         Equivalent to "POSIX".

       ""          Specifies an implementation-defined native environment.  The determination of the name of the
                   new  locale  for  the  specified  category depends on the value of the associated environment
                   variables, LC_* and LANG; see the Base Definitions volume of POSIX.1‐2008, Chapter 7,  Locale
                   and Chapter 8, Environment Variables.

       A null pointer
                   Directs  setlocale()  to  query  the current global locale setting and return the name of the
                   locale if category is not LC_ALL, or a string which encodes the locale name(s) for all of the
                   individual categories if category is LC_ALL.

       Setting  all  of  the  categories of the global locale is similar to successively setting each individual
       category of the global locale, except that all error checking is done before any actions  are  performed.
       To set all the categories of the global locale, setlocale() can be invoked as:

           setlocale(LC_ALL, "");

       In  this  case,  setlocale() shall first verify that the values of all the environment variables it needs
       according to the precedence rules (described in the Base Definitions volume of POSIX.1‐2008,  Chapter  8,
       Environment  Variables)  indicate  supported  locales.  If the value of any of these environment variable
       searches yields a locale that is not supported (and non-null), setlocale() shall return  a  null  pointer
       and  the  global  locale  shall  not  be  changed.  If  all environment variables name supported locales,
       setlocale() shall proceed as if it had been called for each category, using the  appropriate  value  from
       the associated environment variable or from the implementation-defined default if there is no such value.

       The global locale established using setlocale() shall only be used in threads for which no current locale
       has been set using uselocale() or  whose  current  locale  has  been  set  to  the  global  locale  using
       uselocale(LC_GLOBAL_LOCALE).

       The  implementation  shall  behave  as  if  no  function  defined  in  this  volume of POSIX.1‐2008 calls
       setlocale().

RETURN VALUE

       Upon successful completion, setlocale() shall return the string associated with  the  specified  category
       for the new locale. Otherwise, setlocale() shall return a null pointer and the global locale shall not be
       changed.

       A null pointer for locale shall cause setlocale() to return a pointer to the string associated  with  the
       specified category for the current global locale. The global locale shall not be changed.

       The  string  returned  by  setlocale() is such that a subsequent call with that string and its associated
       category shall restore that part of the global locale.  The  application  shall  not  modify  the  string
       returned.  The returned string pointer might be invalidated or the string content might be overwritten by
       a subsequent call to setlocale().

ERRORS

       No errors are defined.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       The following code illustrates how a  program  can  initialize  the  international  environment  for  one
       language,  while  selectively  modifying  the  global  locale  such  that  regular expressions and string
       operations can be applied to text recorded in a different language:

           setlocale(LC_ALL, "De");
           setlocale(LC_COLLATE, "Fr@dict");

       Internationalized programs can initiate language operation according  to  environment  variable  settings
       (see the Base Definitions volume of POSIX.1‐2008, Section 8.2, Internationalization Variables) by calling
       setlocale() as follows:

           setlocale(LC_ALL, "");

       Changing the setting of LC_MESSAGES has no effect on catalogs that have already been opened by  calls  to
       catopen().

       In order to make use of different locale settings while multiple threads are running, applications should
       use uselocale() in preference to setlocale().

RATIONALE

       References to the international environment or locale in the following text relate to the  global  locale
       for the process. This can be overridden for individual threads using uselocale().

       The  ISO C  standard  defines a collection of functions to support internationalization.  One of the most
       significant aspects of these functions is a facility to set and query the international environment.  The
       international  environment  is  a  repository  of  information  that  affects  the  behavior  of  certain
       functionality, namely:

        1. Character handling

        2. Collating

        3. Date/time formatting

        4. Numeric editing

        5. Monetary formatting

        6. Messaging

       The setlocale() function provides the application developer with the ability  to  set  all  or  portions,
       called  categories,  of  the  international  environment.   These  categories  correspond to the areas of
       functionality mentioned above. The syntax for setlocale() is as follows:

           char *setlocale(int category, const char *locale);

       where category is the name of one of following categories, namely:

              LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME

       In addition, a special value called LC_ALL directs setlocale() to set all categories.

       There are two primary uses of setlocale():

        1. Querying the international environment to find out what it is set to

        2. Setting the international environment, or locale, to a specific value

       The behavior of setlocale() in these two areas is described below. Since it is difficult to describe  the
       behavior in words, examples are used to illustrate the behavior of specific uses.

       To  query  the  international  environment,  setlocale() is invoked with a specific category and the null
       pointer as the locale. The null pointer is a special directive to setlocale()  that  tells  it  to  query
       rather  than  set  the  international environment.  The following syntax is used to query the name of the
       international environment:

           setlocale({LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, \
               LC_NUMERIC, LC_TIME},(char *) NULL);

       The setlocale() function shall return the string corresponding to the current international  environment.
       This value may be used by a subsequent call to setlocale() to reset the international environment to this
       value. However, it should be noted that the return value from setlocale() may be a pointer  to  a  static
       area  within  the  function  and  is not guaranteed to remain unchanged (that is, it may be modified by a
       subsequent call to setlocale()).  Therefore, if the purpose of calling setlocale() is to save  the  value
       of the current international environment so it can be changed and reset later, the return value should be
       copied to an array of char in the calling program.

       There are three ways to set the international environment with setlocale():

       setlocale(category, string)
             This usage sets  a  specific  category  in  the  international  environment  to  a  specific  value
             corresponding to the value of the string.  A specific example is provided below:

                 setlocale(LC_ALL, "fr_FR.ISO-8859-1");

             In  this  example,  all  categories  of  the  international  environment  are  set  to  the  locale
             corresponding to the string "fr_FR.ISO-8859-1", or to the French language as spoken in France using
             the ISO/IEC 8859‐1:1998 standard codeset.

             If  the  string  does not correspond to a valid locale, setlocale() shall return a null pointer and
             the international environment is not changed. Otherwise, setlocale() shall return the name  of  the
             locale just set.

       setlocale(category, "C")
             The ISO C standard states that one locale must exist on all conforming implementations. The name of
             the locale is C and corresponds to a minimal international environment  needed  to  support  the  C
             programming language.

       setlocale(category, "")
             This  sets a specific category to an implementation-defined default.  This corresponds to the value
             of the environment variables.

FUTURE DIRECTIONS

       None.

SEE ALSO

       catopen(), exec, fprintf(), fscanf(), isalnum(), isalpha(), isblank(), iscntrl(), isdigit(), isgraph(),
       islower(), isprint(), ispunct(), isspace(), isupper(), iswalnum(), iswalpha(), iswblank(), iswcntrl(),
       iswctype(), iswdigit(), iswgraph(), iswlower(), iswprint(), iswpunct(), iswspace(), iswupper(),
       iswxdigit(), isxdigit(), localeconv(), mblen(), mbstowcs(), mbtowc(), nl_langinfo(), perror(),
       psiginfo(), setlocale(), strcoll(), strerror(), strfmon(), strsignal(), strtod(), strxfrm(), tolower(),
       toupper(), towlower(), towupper(), uselocale(), wcscoll(), wcstod(), wcstombs(), wcsxfrm(), wctomb()

       The  Base  Definitions  volume  of  POSIX.1‐2008,  Chapter  7,  Locale, Chapter 8, Environment Variables,
       <langinfo.h>, <locale.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2013 Edition,
       Standard  for  Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 7, Copyright (C) 2013 by the Institute of Electrical and Electronics Engineers,  Inc
       and  The  Open Group.  (This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) In the event
       of any discrepancy between this version and the original IEEE and The Open Group Standard,  the  original
       IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at
       http://www.unix.org/online.html .

       Any typographical or formatting errors that appear in this page are most likely to have  been  introduced
       during   the   conversion  of  the  source  files  to  man  page  format.  To  report  such  errors,  see
       https://www.kernel.org/doc/man-pages/reporting_bugs.html .