diff options
author | Fred Drake <fdrake@acm.org> | 1998-05-07 01:49:07 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 1998-05-07 01:49:07 (GMT) |
commit | cda63cc875f54b047018cad362aa23d5493b97f3 (patch) | |
tree | f43f888293bb4046a7622dffefd561b669e993c2 /Doc/liblocale.tex | |
parent | bbe33c559403c7e06642111c494bd32d9abe528f (diff) | |
download | cpython-cda63cc875f54b047018cad362aa23d5493b97f3.zip cpython-cda63cc875f54b047018cad362aa23d5493b97f3.tar.gz cpython-cda63cc875f54b047018cad362aa23d5493b97f3.tar.bz2 |
Relocating file to Doc/lib/
Diffstat (limited to 'Doc/liblocale.tex')
-rw-r--r-- | Doc/liblocale.tex | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/Doc/liblocale.tex b/Doc/liblocale.tex deleted file mode 100644 index 07361b8..0000000 --- a/Doc/liblocale.tex +++ /dev/null @@ -1,274 +0,0 @@ -\section{Standard Module \module{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 \module{locale} module is implemented on top of the -\module{_locale}\refbimodindex{_locale} module, which in turn uses an -ANSI \C{} locale implementation if available. - -The \module{locale} module defines the following exception and -functions: - - -\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 \exception{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. - -\function{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{excdesc}{Error} -Exception raised when \function{setlocale()} fails. -\end{excdesc} - -\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{tableii}{c|l}{code}{Value}{Explanation} -\lineii{0}{Currency and value are surrounded by parentheses.} -\lineii{1}{The sign should precede the value and currency symbol.} -\lineii{2}{The sign should follow the value and currency symbol.} -\lineii{3}{The sign should immediately precede the value.} -\lineii{4}{The sign should immediately follow the value.} -\lineii{LC_MAX}{Nothing is specified in this locale.} -\end{tableii} -\end{funcdesc} - -\begin{funcdesc}{strcoll}{string1,string2} -Compares two strings according to the current \constant{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 built-in function -\function{cmp()}\bifuncindex{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\code{ = 0}}} -Formats a number \var{val} according to the current -\constant{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 -\constant{LC_NUMERIC} settings. -\end{funcdesc} - -\begin{funcdesc}{atoi}{string} -Converts a string to an integer, following the \constant{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 \module{string} -dealing with case change their behaviour. -\end{datadesc} - -\begin{datadesc}{LC_COLLATE} -Locale category for sorting strings. The functions -\function{strcoll()} and \function{strxfrm()} of the \module{locale} -module are affected. -\end{datadesc} - -\begin{datadesc}{LC_TIME} -Locale category for the formatting of time. The function -\function{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 \function{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 \function{os.strerror()} -might be affected by this category. -\end{datadesc} - -\begin{datadesc}{LC_NUMERIC} -Locale category for formatting numbers. The functions -\function{format()}, \function{atoi()}, \function{atof()} and -\function{str()} of the \module{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 -\function{localeconv()}. -\end{datadesc} - -Example: - -\begin{verbatim} ->>> import locale ->>> loc = locale.setlocale(locale.LC_ALL) # get current locale ->>> locale.setlocale(locale.LC_ALL, "de") # use German locale ->>> locale.strcoll("f\344n", "foo") # compare a string containing an umlaut ->>> locale.setlocale(locale.LC_ALL, "") # use user's preferred locale ->>> locale.setlocale(locale.LC_ALL, "C") # use default (C) locale ->>> locale.setlocale(locale.LC_ALL, loc) # restore saved locale -\end{verbatim} - -\subsection{Background, details, hints, tips and caveats} - -The C standard defines the locale as a program-wide property that may -be relatively expensive to change. On top of that, some -implementation are broken in such a way that frequent locale changes -may cause core dumps. This makes the locale somewhat painful to use -correctly. - -Initially, when a program is started, the locale is the \samp{C} locale, no -matter what the user's preferred locale is. The program must -explicitly say that it wants the user's preferred locale settings by -calling \code{setlocale(LC_ALL, "")}. - -It is generally a bad idea to call \function{setlocale()} in some library -routine, since as a side effect it affects the entire program. Saving -and restoring it is almost as bad: it is expensive and affects other -threads that happen to run before the settings have been restored. - -If, when coding a module for general use, you need a locale -independent version of an operation that is affected by the locale -(e.g. \function{string.lower()}, or certain formats used with -\function{time.strftime()})), you will have to find a way to do it -without using the standard library routine. Even better is convincing -yourself that using locale settings is okay. Only as a last resort -should you document that your module is not compatible with -non-\samp{C} locale settings. - -The case conversion functions in the -\module{string}\refstmodindex{string} and -\module{strop}\refbimodindex{strop} modules are affected by the locale -settings. When a call to the \function{setlocale()} function changes -the \constant{LC_CTYPE} settings, the variables -\code{string.lowercase}, \code{string.uppercase} and -\code{string.letters} (and their counterparts in \module{strop}) are -recalculated. Note that this code that uses these variable through -`\keyword{from} ... \keyword{import} ...', e.g. \code{from string -import letters}, is not affected by subsequent \function{setlocale()} -calls. - -The only way to perform numeric operations according to the locale -is to use the special functions defined by this module: -\function{atof()}, \function{atoi()}, \function{format()}, -\function{str()}. - -\subsection{For extension writers and programs that embed Python} -\label{embedding-locale} - -Extension modules should never call \function{setlocale()}, except to -find out what the current locale is. But since the return value can -only be used portably to restore it, that is not very useful (except -perhaps to find out whether or not the locale is \samp{C}). - -When Python is embedded in an application, if the application sets the -locale to something specific before initializing Python, that is -generally okay, and Python will use whatever locale is set, -\emph{except} that the \constant{LC_NUMERIC} locale should always be -\samp{C}. - -The \function{setlocale()} function in the \module{locale} module contains -gives the Python progammer the impression that you can manipulate the -\constant{LC_NUMERIC} locale setting, but this not the case at the \C{} -level: \C{} code will always find that the \constant{LC_NUMERIC} locale -setting is \samp{C}. This is because too much would break when the -decimal point character is set to something else than a period -(e.g. the Python parser would break). Caveat: threads that run -without holding Python's global interpreter lock may occasionally find -that the numeric locale setting differs; this is because the only -portable way to implement this feature is to set the numeric locale -settings to what the user requests, extract the relevant -characteristics, and then restore the \samp{C} numeric locale. - -When Python code uses the \module{locale} module to change the locale, -this also affect the embedding application. If the embedding -application doesn't want this to happen, it should remove the -\module{_locale} extension module (which does all the work) from the -table of built-in modules in the \file{config.c} file, and make sure -that the \module{_locale} module is not accessible as a shared library. |