\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. 

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

\renewcommand{\indexsubitem}{(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
\bcode\begin{verbatim}
import locale
locale.setlocale(locale.LC_ALL,"")
\end{verbatim}\ecode
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 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 LC_COLLATE setting. As
any other compare function, returns a negative, or a positive value,
or 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 LC_NUMERIC
setting. The format follows the conventions of the \% 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
\code{string.str}, but takes the decimal point into account.
\end{funcdesc}

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

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

\begin{datadesc}{LC_CTYPE}
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 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 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:

\bcode\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}\ecode
