| \section{\module{locale} --- |
| Internationalization services} |
| |
| \declaremodule{standard}{locale} |
| \modulesynopsis{Internationalization services.} |
| \moduleauthor{Martin von L\"owis}{loewis@informatik.hu-berlin.de} |
| \sectionauthor{Martin von L\"owis}{loewis@informatik.hu-berlin.de} |
| |
| |
| The \module{locale} module opens access to the \POSIX{} locale |
| database and functionality. The \POSIX{} locale mechanism allows |
| programmers to deal with certain cultural issues in an application, |
| 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{excdesc}{Error} |
| Exception raised when \function{setlocale()} fails. |
| \end{excdesc} |
| |
| \begin{funcdesc}{setlocale}{category\optional{, locale}} |
| If \var{locale} is specified, it may be a string, a tuple of the |
| form \code{(\var{language code}, \var{encoding})}, or \code{None}. |
| If it is a tuple, it is converted to a string using the locale |
| aliasing engine. If \var{locale} is given and not \code{None}, |
| \function{setlocale()} 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 \var{locale} is omitted or \code{None}, the current setting for |
| \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 \envvar{LANG} environment |
| variable). If the locale is not changed thereafter, using |
| multithreading should not cause problems. |
| |
| \versionchanged[Added support for tuple values of the \var{locale} |
| parameter]{2.0} |
| \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{tableiii}{l|l|p{3in}}{constant}{Key}{Category}{Meaning} |
| \lineiii{LC_NUMERIC}{\code{'decimal_point'}} |
| {Decimal point character.} |
| \lineiii{}{\code{'grouping'}} |
| {Sequence of numbers specifying which relative positions |
| the \code{'thousands_sep'} is expected. If the sequence is |
| terminated with \constant{CHAR_MAX}, no further grouping |
| is performed. If the sequence terminates with a \code{0}, |
| the last group size is repeatedly used.} |
| \lineiii{}{\code{'thousands_sep'}} |
| {Character used between groups.}\hline |
| \lineiii{LC_MONETARY}{\code{'int_curr_symbol'}} |
| {International currency symbol.} |
| \lineiii{}{\code{'currency_symbol'}} |
| {Local currency symbol.} |
| \lineiii{}{\code{'mon_decimal_point'}} |
| {Decimal point used for monetary values.} |
| \lineiii{}{\code{'mon_thousands_sep'}} |
| {Group separator used for monetary values.} |
| \lineiii{}{\code{'mon_grouping'}} |
| {Equivalent to \code{'grouping'}, used for monetary |
| values.} |
| \lineiii{}{\code{'positive_sign'}} |
| {Symbol used to annotate a positive monetary value.} |
| \lineiii{}{\code{'negative_sign'}} |
| {Symbol used to annotate a nnegative monetary value.} |
| \lineiii{}{\code{'frac_digits'}} |
| {Number of fractional digits used in local formatting |
| of monetary values.} |
| \lineiii{}{\code{'int_frac_digits'}} |
| {Number of fractional digits used in international |
| formatting of monetary values.} |
| \end{tableiii} |
| |
| 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{\constant{LC_MAX}}{Nothing is specified in this locale.} |
| \end{tableii} |
| \end{funcdesc} |
| |
| \begin{funcdesc}{nl_langinfo}{option} |
| |
| Return some locale-specific information as a string. This function is |
| not available on all systems, and the set of possible options might |
| also vary across platforms. The possible argument values are numbers, |
| for which symbolic constants are available in the locale module. |
| |
| \end{funcdesc} |
| |
| \begin{funcdesc}{getdefaultlocale}{\optional{envvars}} |
| Tries to determine the default locale settings and returns |
| them as a tuple of the form \code{(\var{language code}, |
| \var{encoding})}. |
| |
| According to \POSIX, a program which has not called |
| \code{setlocale(LC_ALL, '')} runs using the portable \code{'C'} |
| locale. Calling \code{setlocale(LC_ALL, '')} lets it use the |
| default locale as defined by the \envvar{LANG} variable. Since we |
| do not want to interfere with the current locale setting we thus |
| emulate the behavior in the way described above. |
| |
| To maintain compatibility with other platforms, not only the |
| \envvar{LANG} variable is tested, but a list of variables given as |
| envvars parameter. The first found to be defined will be |
| used. \var{envvars} defaults to the search path used in GNU gettext; |
| it must always contain the variable name \samp{LANG}. The GNU |
| gettext search path contains \code{'LANGUAGE'}, \code{'LC_ALL'}, |
| \code{'LC_CTYPE'}, and \code{'LANG'}, in that order. |
| |
| Except for the code \code{'C'}, the language code corresponds to |
| \rfc{1766}. \var{language code} and \var{encoding} may be |
| \code{None} if their values cannot be determined. |
| \versionadded{2.0} |
| \end{funcdesc} |
| |
| \begin{funcdesc}{getlocale}{\optional{category}} |
| Returns the current setting for the given locale category as |
| tuple (language code, encoding). \var{category} may be one of the |
| \constant{LC_*} values except \constant{LC_ALL}. It defaults to |
| \constant{LC_CTYPE}. |
| |
| Except for the code \code{'C'}, the language code corresponds to |
| \rfc{1766}. \var{language code} and \var{encoding} may be |
| \code{None} if their values cannot be determined. |
| \versionadded{2.0} |
| \end{funcdesc} |
| |
| \begin{funcdesc}{normalize}{localename} |
| Returns a normalized locale code for the given locale name. The |
| returned locale code is formatted for use with |
| \function{setlocale()}. If normalization fails, the original name |
| is returned unchanged. |
| |
| If the given encoding is not known, the function defaults to |
| the default encoding for the locale code just like |
| \function{setlocale()}. |
| \versionadded{2.0} |
| \end{funcdesc} |
| |
| \begin{funcdesc}{resetlocale}{\optional{category}} |
| Sets the locale for \var{category} to the default setting. |
| |
| The default setting is determined by calling |
| \function{getdefaultlocale()}. \var{category} defaults to |
| \constant{LC_ALL}. |
| \versionadded{2.0} |
| \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}} |
| 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 |
| \refmodule{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} |
| |
| The \function{nl_langinfo} function accepts one of the following keys. |
| Most descriptions are taken from the corresponding description in the |
| GNU C library. |
| |
| \begin{datadesc}{CODESET} |
| Return a string with the name of the character encoding used in the |
| selected locale. |
| \end{datadesc} |
| |
| \begin{datadesc}{D_T_FMT} |
| Return a string that can be used as a format string for strftime(3) to |
| represent time and date in a locale-specific way. |
| \end{datadesc} |
| |
| \begin{datadesc}{D_FMT} |
| Return a string that can be used as a format string for strftime(3) to |
| represent a date in a locale-specific way. |
| \end{datadesc} |
| |
| \begin{datadesc}{T_FMT} |
| Return a string that can be used as a format string for strftime(3) to |
| represent a time in a locale-specific way. |
| \end{datadesc} |
| |
| \begin{datadesc}{T_FMT_AMPM} |
| The return value can be used as a format string for `strftime' to |
| represent time in the am/pm format. |
| \end{datadesc} |
| |
| \begin{datadesc}{DAY_1 ... DAY_7} |
| Return name of the n-th day of the week. \warning{This |
| follows the US convention of \constant{DAY_1} being Sunday, not the |
| international convention (ISO 8601) that Monday is the first day of |
| the week.} |
| \end{datadesc} |
| |
| \begin{datadesc}{ABDAY_1 ... ABDAY_7} |
| Return abbreviated name of the n-th day of the week. |
| \end{datadesc} |
| |
| \begin{datadesc}{MON_1 ... MON_12} |
| Return name of the n-th month. |
| \end{datadesc} |
| |
| \begin{datadesc}{ABMON_1 ... ABMON_12} |
| Return abbreviated name of the n-th month. |
| \end{datadesc} |
| |
| \begin{datadesc}{RADIXCHAR} |
| Return radix character (decimal dot, decimal comma, etc.) |
| \end{datadesc} |
| |
| \begin{datadesc}{THOUSEP} |
| Return separator character for thousands (groups of three digits). |
| \end{datadesc} |
| |
| \begin{datadesc}{YESEXPR} |
| Return a regular expression that can be used with the regex |
| function to recognize a positive response to a yes/no question. |
| \warning{The expression is in the syntax suitable for the |
| \cfunction{regex()} function from the C library, which might differ |
| from the syntax used in \refmodule{re}.} |
| \end{datadesc} |
| |
| \begin{datadesc}{NOEXPR} |
| Return a regular expression that can be used with the regex(3) |
| function to recognize a negative response to a yes/no question. |
| \end{datadesc} |
| |
| \begin{datadesc}{CRNCYSTR} |
| Return the currency symbol, preceded by "-" if the symbol should |
| appear before the value, "+" if the symbol should appear after the |
| value, or "." if the symbol should replace the radix character. |
| \end{datadesc} |
| |
| \begin{datadesc}{ERA} |
| The return value represents the era used in the current locale. |
| |
| Most locales do not define this value. An example of a locale which |
| does define this value is the Japanese one. In Japan, the traditional |
| representation of dates includes the name of the era corresponding to |
| the then-emperor's reign. |
| |
| Normally it should not be necessary to use this value directly. |
| Specifying the \code{E} modifier in their format strings causes the |
| \function{strftime} function to use this information. The format of the |
| returned string is not specified, and therefore you should not assume |
| knowledge of it on different systems. |
| \end{datadesc} |
| |
| \begin{datadesc}{ERA_YEAR} |
| The return value gives the year in the relevant era of the locale. |
| \end{datadesc} |
| |
| \begin{datadesc}{ERA_D_T_FMT} |
| This return value can be used as a format string for |
| \function{strftime} to represent dates and times in a locale-specific |
| era-based way. |
| \end{datadesc} |
| |
| \begin{datadesc}{ERA_D_FMT} |
| This return value can be used as a format string for |
| \function{strftime} to represent time in a locale-specific era-based |
| way. |
| \end{datadesc} |
| |
| \begin{datadesc}{ALT_DIGITS} |
| The return value is a representation of up to 100 values used to |
| represent the values 0 to 99. |
| \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\xe4n', '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 |
| \refmodule{string}\refstmodindex{string} module 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} 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 |
| gives the Python programmer 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 affects 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. |