SETLOCALE(3C) Standard C Library Functions SETLOCALE(3C)
NAME
setlocale - modify and query a program's locale
SYNOPSIS
#include <locale.h>
char *setlocale(
int category,
const char *locale);
DESCRIPTION
The
setlocale() function selects the appropriate piece of the
program's locale as specified by the
category and
locale arguments.
The
category argument may have the following values:
LC_CTYPE,
LC_NUMERIC,
LC_TIME,
LC_COLLATE,
LC_MONETARY,
LC_MESSAGES, and
LC_ALL. These names are defined in the <
locale.h> header. The
LC_ALL variable names all of a program's locale categories.
The
LC_CTYPE variable affects the behavior of character handling
functions such as
isdigit(3C) and
tolower(3C), and multibyte
character functions such as
mbtowc(3C) and
wctomb(3C).
The
LC_NUMERIC variable affects the decimal point character and
thousands separator character for the formatted input/output
functions and string conversion functions.
The
LC_TIME variable affects the date and time format as delivered by
ascftime(3C),
cftime(3C),
getdate(3C),
strftime(3C), and
strptime(3C).
The
LC_COLLATE variable affects the sort order produced by collating
functions such as
strcoll(3C) and
strxfrm(3C).
The
LC_MONETARY variable affects the monetary formatted information
returned by
localeconv(3C).
The
LC_MESSAGES variable affects the behavior of messaging functions
such as
dgettext(3C),
gettext(3C), and
gettxt(3C).
A value of "C" for
locale specifies the traditional
UNIX system
behavior. At program startup, the equivalent of
setlocale(LC_ALL, "C") is executed. This has the effect of initializing each category to the
locale described by the environment "C".
A value of "" for
locale specifies that the locale should be taken
from environment variables. The order in which the environment
variables are checked for the various categories is given below:
+-------------+-------------+-------------+-------------+
| Category | 1st Env Var | 2nd Env Var | 3rd Env Var |
+-------------+-------------+-------------+-------------+
|LC_CTYPE: | LC_ALL | LC_CTYPE | LANG |
+-------------+-------------+-------------+-------------+
|LC_COLLATE: | LC_ALL | LC_COLLATE | LANG |
+-------------+-------------+-------------+-------------+
|LC_TIME: | LC_ALL | LC_TIME | LANG |
+-------------+-------------+-------------+-------------+
|LC_NUMERIC: | LC_ALL | LC_NUMERIC | LANG |
+-------------+-------------+-------------+-------------+
|LC_MONETARY: | LC_ALL | LC_MONETARY | LANG |
+-------------+-------------+-------------+-------------+
|LC_MESSAGES: | LC_ALL | LC_MESSAGES | LANG |
+-------------+-------------+-------------+-------------+
If a pointer to a string is given for
locale,
setlocale() attempts to
set the locale for the given category to
locale. If
setlocale() succeeds,
locale is returned. If
setlocale() fails, a null pointer is
returned and the program's locale is not changed.
For category
LC_ALL, the behavior is slightly different. If a pointer
to a string is given for
locale and
LC_ALL is given for
category,
setlocale() attempts to set the locale for all the categories to
locale. The
locale may be a simple locale, consisting of a single
locale, or a composite locale. If the locales for all the categories
are the same after all the attempted locale changes,
setlocale() will
return a pointer to the common simple locale. If there is a mixture
of locales among the categories,
setlocale() will return a composite
locale.
RETURN VALUES
Upon successful completion,
setlocale() returns the string associated
with the specified category for the new locale. Otherwise,
setlocale() returns a null pointer and the program's locale is not
changed.
A null pointer for
locale causes
setlocale() to return a pointer to
the string associated with the
category for the program's current
locale. The program's locale is not changed.
The string returned by
setlocale() is such that a subsequent call
with that string and its associated
category will restore that part
of the program's locale. The string returned must not be modified by
the program, but may be overwritten by a subsequent call to
setlocale().
ERRORS
No errors are defined.
FILES
/usr/lib/locale/locale locale database directory for
localeATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-------------------------+
|CSI | Enabled |
+--------------------+-------------------------+
|Interface Stability | Standard |
+--------------------+-------------------------+
|MT-Level | MT-Safe with exceptions |
+--------------------+-------------------------+
SEE ALSO
locale(1),
ctype(3C),
getdate(3C) gettext(3C),
gettxt(3C),
isdigit(3C),
libc(3LIB),
localeconv(3C),
mbtowc(3C),
strcoll(3C),
strftime(3C),
strptime(3C) strxfrm(3C) tolower(3C),
wctomb(3C),
attributes(7),
environ(7),
locale(7),
standards(7)NOTES
It is unsafe for any thread to change locale (by calling
setlocale() with a non-null locale argument) in a multithreaded application while
any other thread in the application is using any locale-sensitive
routine. To change locale in a multithreaded application,
setlocale() should be called prior to using any locale-sensitive routine. Using
setlocale() to query the current locale is safe and can be used
anywhere in a multithreaded application except when some other thread
is changing locale.
It is the user's responsibility to ensure that mixed locale
categories are compatible. For example, setting
LC_CTYPE=C and
LC_TIME=ja (where
ja indicates Japanese) will not work, because
Japanese time cannot be represented in the "C" locale's ASCII
codeset.
September 19, 2005 SETLOCALE(3C)