\section{Standard Module \sectcode{locale}}
\stmodindex{locale}

\label{module-locale}

The \code{locale} module opens access to the \POSIX{} locale database
and functionality. The \POSIX{} locale mechanism allows applications
to integrate certain cultural aspects into an applications, without
requiring the programmer to know all the specifics of each country
where the software is executed.

The \code{locale} module is implemented on top of the \code{_locale}
module, which in turn uses an ANSI \C{} locale implementation if
available.
\refbimodindex{_locale}

The \code{locale} module defines the following functions:

\setindexsubitem{(in module locale)}

\begin{funcdesc}{setlocale}{category\optional{\, value}}
If \var{value} is specified, modifies the locale setting for the
\var{category}. The available categories are listed in the data
description below. The value is the name of a locale. An empty string
specifies the user's default settings. If the modification of the
locale fails, the exception \code{locale.Error} is
raised. If successful, the new locale setting is returned.

If no \var{value} is specified, the current setting for the
\var{category} is returned.

\code{setlocale()} is not thread safe on most systems. Applications
typically start with a call of
\begin{verbatim}
import locale
locale.setlocale(locale.LC_ALL,"")
\end{verbatim}
This sets the locale for all categories to the user's default setting
(typically specified in the \code{LANG} environment variable). If the
locale is not changed thereafter, using multithreading should not
cause problems.
\end{funcdesc}

\begin{funcdesc}{localeconv}{}
Returns the database of of the local conventions as a dictionary. This
dictionary has the following strings as keys:
\begin{itemize}
\item \code{decimal_point} specifies the decimal point used in
floating point number representations for the \code{LC_NUMERIC}
category.
\item \code{grouping} is a sequence of numbers specifying at which
relative positions the \code{thousands_sep} is expected. If the
sequence is terminated with \code{locale.CHAR_MAX}, no further
grouping is performed. If the sequence terminates with a \code{0}, the last
group size is repeatedly used.
\item \code{thousands_sep} is the character used between groups.
\item \code{int_curr_symbol} specifies the international currency
symbol from the \code{LC_MONETARY} category.
\item \code{currency_symbol} is the local currency symbol.
\item \code{mon_decimal_point} is the decimal point used in monetary
values.
\item \code{mon_thousands_sep} is the separator for grouping of
monetary values.
\item \code{mon_grouping} has the same format as the \code{grouping}
key; it is used for monetary values.
\item \code{positive_sign} and \code{negative_sign} gives the sign
used for positive and negative monetary quantities.
\item \code{int_frac_digits} and \code{frac_digits} specify the number
of fractional digits used in the international and local formatting
of monetary values.
\item \code{p_cs_precedes} and \code{n_cs_precedes} specifies whether
the currency symbol precedes the value for positive or negative
values.
\item \code{p_sep_by_space} and \code{n_sep_by_space} specifies
whether there is a space between the positive or negative value and
the currency symbol.
\item \code{p_sign_posn} and \code{n_sign_posn} indicate how the
sign should be placed for positive and negative monetary values. 
\end{itemize}
The possible values for \code{p_sign_posn} and \code{n_sign_posn}
are given below.
\begin{itemize}
\item 0 - Currency and value are surrounded by parentheses.
\item 1 - The sign should precede the value and currency symbol.
\item 2 - The sign should follow the value and currency symbol.
\item 3 - The sign should immediately precede the value.
\item 4 - The sign should immediately follow the value.
\item LC_MAX - nothing is specified in this locale.
\end{itemize}
\end{funcdesc}

\begin{funcdesc}{strcoll}{string1,string2}
Compares two strings according to the current \code{LC_COLLATE}
setting. As any other compare function, returns a negative, or a
positive value, or \code{0}, depending on whether \var{string1}
collates before or after \var{string2} or is equal to it.
\end{funcdesc}

\begin{funcdesc}{strxfrm}{string}
Transforms a string to one that can be used for the builtin function
\code{cmp()}, and still returns locale-aware results. This function can be
used when the same string is compared repeatedly, e.g. when collating
a sequence of strings.
\end{funcdesc}

\begin{funcdesc}{format}{format,val\optional{grouping=0}}
Formats a number \var{val} according to the current \code{LC_NUMERIC}
setting. The format follows the conventions of the \code{\%} operator. For
floating point values, the decimal point is modified if
appropriate. If \var{grouping} is true, also takes the grouping into
account.
\end{funcdesc}

\begin{funcdesc}{str}{float}
Formats a floating point number using the same format as the built-in
function \code{str(\var{float})}, but takes the decimal point into
account.
\end{funcdesc}

\begin{funcdesc}{atof}{string}
Converts a string to a floating point number, following the \code{LC_NUMERIC}
settings.
\end{funcdesc}

\begin{funcdesc}{atoi}{string}
Converts a string to an integer, following the \code{LC_NUMERIC} conventions.
\end{funcdesc}

\begin{datadesc}{LC_CTYPE}
\refstmodindex{string}
Locale category for the character type functions. Depending on the
settings of this category, the functions of module \code{string}
dealing with case change their behaviour.
\end{datadesc}

\begin{datadesc}{LC_COLLATE}
Locale category for sorting strings. The functions \code{strcoll()} and
\code{strxfrm()} of the \code{locale} module are affected.
\end{datadesc}

\begin{datadesc}{LC_TIME}
Locale category for the formatting of time. The function
\code{time.strftime()} follows these conventions.
\end{datadesc}

\begin{datadesc}{LC_MONETARY}
Locale category for formatting of monetary values. The available
options are available from the \code{localeconv()} function.
\end{datadesc}

\begin{datadesc}{LC_MESSAGES}
Locale category for message display. Python currently does not support
application specific locale-aware messages. Messages displayed by the
operating system, like those returned by \code{posix.strerror()} might
be affected by this category.
\end{datadesc}

\begin{datadesc}{LC_NUMERIC}
Locale category for formatting numbers. The functions
\code{format()}, \code{atoi()}, \code{atof()} and \code{str()} of the
\code{locale} module are affected by that category. All other numeric
formatting operations are not affected.
\end{datadesc}

\begin{datadesc}{LC_ALL}
Combination of all locale settings. If this flag is used when the
locale is changed, setting the locale for all categories is
attempted. If that fails for any category, no category is changed at
all. When the locale is retrieved using this flag, a string indicating
the setting for all categories is returned. This string can be later
used to restore the settings.
\end{datadesc}

\begin{datadesc}{CHAR_MAX}
This is a symbolic constant used for different values returned by
\code{localeconv()}.
\end{datadesc}

\begin{excdesc}{Error}
Exception raised when \code{setlocale()} fails.
\end{excdesc}

Example:

\begin{verbatim}
>>> import locale
>>> locale.open(locale.LC_ALL,"de") #setting locale to German
>>> locale.strcoll("f\344n","foo")  #comparing a string containing an umlaut 
>>> can.close()
\end{verbatim}
