17db96d56Sopenharmony_ci:mod:`locale` --- Internationalization services
27db96d56Sopenharmony_ci===============================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: locale
57db96d56Sopenharmony_ci   :synopsis: Internationalization services.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Martin von Löwis <martin@v.loewis.de>
87db96d56Sopenharmony_ci.. sectionauthor:: Martin von Löwis <martin@v.loewis.de>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/locale.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe :mod:`locale` module opens access to the POSIX locale database and
157db96d56Sopenharmony_cifunctionality. The POSIX locale mechanism allows programmers to deal with
167db96d56Sopenharmony_cicertain cultural issues in an application, without requiring the programmer to
177db96d56Sopenharmony_ciknow all the specifics of each country where the software is executed.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci.. index:: pair: module; _locale
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciThe :mod:`locale` module is implemented on top of the :mod:`_locale` module,
227db96d56Sopenharmony_ciwhich in turn uses an ANSI C locale implementation if available.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ciThe :mod:`locale` module defines the following exception and functions:
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. exception:: Error
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci   Exception raised when the locale passed to :func:`setlocale` is not
307db96d56Sopenharmony_ci   recognized.
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci.. function:: setlocale(category, locale=None)
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci   If *locale* is given and not ``None``, :func:`setlocale` modifies the locale
367db96d56Sopenharmony_ci   setting for the *category*. The available categories are listed in the data
377db96d56Sopenharmony_ci   description below. *locale* may be a string, or an iterable of two strings
387db96d56Sopenharmony_ci   (language code and encoding). If it's an iterable, it's converted to a locale
397db96d56Sopenharmony_ci   name using the locale aliasing engine. An empty string specifies the user's
407db96d56Sopenharmony_ci   default settings. If the modification of the locale fails, the exception
417db96d56Sopenharmony_ci   :exc:`Error` is raised. If successful, the new locale setting is returned.
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   If *locale* is omitted or ``None``, the current setting for *category* is
447db96d56Sopenharmony_ci   returned.
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci   :func:`setlocale` is not thread-safe on most systems. Applications typically
477db96d56Sopenharmony_ci   start with a call of ::
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci      import locale
507db96d56Sopenharmony_ci      locale.setlocale(locale.LC_ALL, '')
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci   This sets the locale for all categories to the user's default setting (typically
537db96d56Sopenharmony_ci   specified in the :envvar:`LANG` environment variable).  If the locale is not
547db96d56Sopenharmony_ci   changed thereafter, using multithreading should not cause problems.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci.. function:: localeconv()
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci   Returns the database of the local conventions as a dictionary. This dictionary
607db96d56Sopenharmony_ci   has the following strings as keys:
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci   .. tabularcolumns:: |l|l|L|
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
657db96d56Sopenharmony_ci   | Category             | Key                                 | Meaning                        |
667db96d56Sopenharmony_ci   +======================+=====================================+================================+
677db96d56Sopenharmony_ci   | :const:`LC_NUMERIC`  | ``'decimal_point'``                 | Decimal point character.       |
687db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
697db96d56Sopenharmony_ci   |                      | ``'grouping'``                      | Sequence of numbers specifying |
707db96d56Sopenharmony_ci   |                      |                                     | which relative positions the   |
717db96d56Sopenharmony_ci   |                      |                                     | ``'thousands_sep'`` is         |
727db96d56Sopenharmony_ci   |                      |                                     | expected.  If the sequence is  |
737db96d56Sopenharmony_ci   |                      |                                     | terminated with                |
747db96d56Sopenharmony_ci   |                      |                                     | :const:`CHAR_MAX`, no further  |
757db96d56Sopenharmony_ci   |                      |                                     | grouping is performed. If the  |
767db96d56Sopenharmony_ci   |                      |                                     | sequence terminates with a     |
777db96d56Sopenharmony_ci   |                      |                                     | ``0``,  the last group size is |
787db96d56Sopenharmony_ci   |                      |                                     | repeatedly used.               |
797db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
807db96d56Sopenharmony_ci   |                      | ``'thousands_sep'``                 | Character used between groups. |
817db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
827db96d56Sopenharmony_ci   | :const:`LC_MONETARY` | ``'int_curr_symbol'``               | International currency symbol. |
837db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
847db96d56Sopenharmony_ci   |                      | ``'currency_symbol'``               | Local currency symbol.         |
857db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
867db96d56Sopenharmony_ci   |                      | ``'p_cs_precedes/n_cs_precedes'``   | Whether the currency symbol    |
877db96d56Sopenharmony_ci   |                      |                                     | precedes the value (for        |
887db96d56Sopenharmony_ci   |                      |                                     | positive resp. negative        |
897db96d56Sopenharmony_ci   |                      |                                     | values).                       |
907db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
917db96d56Sopenharmony_ci   |                      | ``'p_sep_by_space/n_sep_by_space'`` | Whether the currency symbol is |
927db96d56Sopenharmony_ci   |                      |                                     | separated from the value  by a |
937db96d56Sopenharmony_ci   |                      |                                     | space (for positive resp.      |
947db96d56Sopenharmony_ci   |                      |                                     | negative values).              |
957db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
967db96d56Sopenharmony_ci   |                      | ``'mon_decimal_point'``             | Decimal point used for         |
977db96d56Sopenharmony_ci   |                      |                                     | monetary values.               |
987db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
997db96d56Sopenharmony_ci   |                      | ``'frac_digits'``                   | Number of fractional digits    |
1007db96d56Sopenharmony_ci   |                      |                                     | used in local formatting of    |
1017db96d56Sopenharmony_ci   |                      |                                     | monetary values.               |
1027db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1037db96d56Sopenharmony_ci   |                      | ``'int_frac_digits'``               | Number of fractional digits    |
1047db96d56Sopenharmony_ci   |                      |                                     | used in international          |
1057db96d56Sopenharmony_ci   |                      |                                     | formatting of monetary values. |
1067db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1077db96d56Sopenharmony_ci   |                      | ``'mon_thousands_sep'``             | Group separator used for       |
1087db96d56Sopenharmony_ci   |                      |                                     | monetary values.               |
1097db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1107db96d56Sopenharmony_ci   |                      | ``'mon_grouping'``                  | Equivalent to ``'grouping'``,  |
1117db96d56Sopenharmony_ci   |                      |                                     | used for monetary values.      |
1127db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1137db96d56Sopenharmony_ci   |                      | ``'positive_sign'``                 | Symbol used to annotate a      |
1147db96d56Sopenharmony_ci   |                      |                                     | positive monetary value.       |
1157db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1167db96d56Sopenharmony_ci   |                      | ``'negative_sign'``                 | Symbol used to annotate a      |
1177db96d56Sopenharmony_ci   |                      |                                     | negative monetary value.       |
1187db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1197db96d56Sopenharmony_ci   |                      | ``'p_sign_posn/n_sign_posn'``       | The position of the sign (for  |
1207db96d56Sopenharmony_ci   |                      |                                     | positive resp. negative        |
1217db96d56Sopenharmony_ci   |                      |                                     | values), see below.            |
1227db96d56Sopenharmony_ci   +----------------------+-------------------------------------+--------------------------------+
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci   All numeric values can be set to :const:`CHAR_MAX` to indicate that there is no
1257db96d56Sopenharmony_ci   value specified in this locale.
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci   The possible values for ``'p_sign_posn'`` and ``'n_sign_posn'`` are given below.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1307db96d56Sopenharmony_ci   | Value        | Explanation                             |
1317db96d56Sopenharmony_ci   +==============+=========================================+
1327db96d56Sopenharmony_ci   | ``0``        | Currency and value are surrounded by    |
1337db96d56Sopenharmony_ci   |              | parentheses.                            |
1347db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1357db96d56Sopenharmony_ci   | ``1``        | The sign should precede the value and   |
1367db96d56Sopenharmony_ci   |              | currency symbol.                        |
1377db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1387db96d56Sopenharmony_ci   | ``2``        | The sign should follow the value and    |
1397db96d56Sopenharmony_ci   |              | currency symbol.                        |
1407db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1417db96d56Sopenharmony_ci   | ``3``        | The sign should immediately precede the |
1427db96d56Sopenharmony_ci   |              | value.                                  |
1437db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1447db96d56Sopenharmony_ci   | ``4``        | The sign should immediately follow the  |
1457db96d56Sopenharmony_ci   |              | value.                                  |
1467db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1477db96d56Sopenharmony_ci   | ``CHAR_MAX`` | Nothing is specified in this locale.    |
1487db96d56Sopenharmony_ci   +--------------+-----------------------------------------+
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci   The function temporarily sets the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
1517db96d56Sopenharmony_ci   locale or the ``LC_MONETARY`` locale if locales are different and numeric or
1527db96d56Sopenharmony_ci   monetary strings are non-ASCII. This temporary change affects other threads.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   .. versionchanged:: 3.7
1557db96d56Sopenharmony_ci      The function now temporarily sets the ``LC_CTYPE`` locale to the
1567db96d56Sopenharmony_ci      ``LC_NUMERIC`` locale in some cases.
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci.. function:: nl_langinfo(option)
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci   Return some locale-specific information as a string.  This function is not
1627db96d56Sopenharmony_ci   available on all systems, and the set of possible options might also vary
1637db96d56Sopenharmony_ci   across platforms.  The possible argument values are numbers, for which
1647db96d56Sopenharmony_ci   symbolic constants are available in the locale module.
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   The :func:`nl_langinfo` function accepts one of the following keys.  Most
1677db96d56Sopenharmony_ci   descriptions are taken from the corresponding description in the GNU C
1687db96d56Sopenharmony_ci   library.
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   .. data:: CODESET
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci      Get a string with the name of the character encoding used in the
1737db96d56Sopenharmony_ci      selected locale.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   .. data:: D_T_FMT
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci      Get a string that can be used as a format string for :func:`time.strftime` to
1787db96d56Sopenharmony_ci      represent date and time in a locale-specific way.
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci   .. data:: D_FMT
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci      Get a string that can be used as a format string for :func:`time.strftime` to
1837db96d56Sopenharmony_ci      represent a date in a locale-specific way.
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   .. data:: T_FMT
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci      Get a string that can be used as a format string for :func:`time.strftime` to
1887db96d56Sopenharmony_ci      represent a time in a locale-specific way.
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   .. data:: T_FMT_AMPM
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci      Get a format string for :func:`time.strftime` to represent time in the am/pm
1937db96d56Sopenharmony_ci      format.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   .. data:: DAY_1 ... DAY_7
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci      Get the name of the n-th day of the week.
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci      .. note::
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci         This follows the US convention of :const:`DAY_1` being Sunday, not the
2027db96d56Sopenharmony_ci         international convention (ISO 8601) that Monday is the first day of the
2037db96d56Sopenharmony_ci         week.
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci   .. data:: ABDAY_1 ... ABDAY_7
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci      Get the abbreviated name of the n-th day of the week.
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   .. data:: MON_1 ... MON_12
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci      Get the name of the n-th month.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   .. data:: ABMON_1 ... ABMON_12
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci      Get the abbreviated name of the n-th month.
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci   .. data:: RADIXCHAR
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci      Get the radix character (decimal dot, decimal comma, etc.).
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci   .. data:: THOUSEP
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci      Get the separator character for thousands (groups of three digits).
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci   .. data:: YESEXPR
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci      Get a regular expression that can be used with the regex function to
2287db96d56Sopenharmony_ci      recognize a positive response to a yes/no question.
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci   .. data:: NOEXPR
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci      Get a regular expression that can be used with the regex(3) function to
2337db96d56Sopenharmony_ci      recognize a negative response to a yes/no question.
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci      .. note::
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci         The regular expressions for :const:`YESEXPR` and
2387db96d56Sopenharmony_ci         :const:`NOEXPR` use syntax suitable for the
2397db96d56Sopenharmony_ci         :c:func:`regex` function from the C library, which might
2407db96d56Sopenharmony_ci         differ from the syntax used in :mod:`re`.
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   .. data:: CRNCYSTR
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci      Get the currency symbol, preceded by "-" if the symbol should appear before
2457db96d56Sopenharmony_ci      the value, "+" if the symbol should appear after the value, or "." if the
2467db96d56Sopenharmony_ci      symbol should replace the radix character.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   .. data:: ERA
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci      Get a string that represents the era used in the current locale.
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci      Most locales do not define this value.  An example of a locale which does
2537db96d56Sopenharmony_ci      define this value is the Japanese one.  In Japan, the traditional
2547db96d56Sopenharmony_ci      representation of dates includes the name of the era corresponding to the
2557db96d56Sopenharmony_ci      then-emperor's reign.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci      Normally it should not be necessary to use this value directly. Specifying
2587db96d56Sopenharmony_ci      the ``E`` modifier in their format strings causes the :func:`time.strftime`
2597db96d56Sopenharmony_ci      function to use this information.  The format of the returned string is not
2607db96d56Sopenharmony_ci      specified, and therefore you should not assume knowledge of it on different
2617db96d56Sopenharmony_ci      systems.
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci   .. data:: ERA_D_T_FMT
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci      Get a format string for :func:`time.strftime` to represent date and time in a
2667db96d56Sopenharmony_ci      locale-specific era-based way.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   .. data:: ERA_D_FMT
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci      Get a format string for :func:`time.strftime` to represent a date in a
2717db96d56Sopenharmony_ci      locale-specific era-based way.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci   .. data:: ERA_T_FMT
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci      Get a format string for :func:`time.strftime` to represent a time in a
2767db96d56Sopenharmony_ci      locale-specific era-based way.
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci   .. data:: ALT_DIGITS
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci      Get a representation of up to 100 values used to represent the values
2817db96d56Sopenharmony_ci      0 to 99.
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci.. function:: getdefaultlocale([envvars])
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci   Tries to determine the default locale settings and returns them as a tuple of
2877db96d56Sopenharmony_ci   the form ``(language code, encoding)``.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci   According to POSIX, a program which has not called ``setlocale(LC_ALL, '')``
2907db96d56Sopenharmony_ci   runs using the portable ``'C'`` locale.  Calling ``setlocale(LC_ALL, '')`` lets
2917db96d56Sopenharmony_ci   it use the default locale as defined by the :envvar:`LANG` variable.  Since we
2927db96d56Sopenharmony_ci   do not want to interfere with the current locale setting we thus emulate the
2937db96d56Sopenharmony_ci   behavior in the way described above.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci   To maintain compatibility with other platforms, not only the :envvar:`LANG`
2967db96d56Sopenharmony_ci   variable is tested, but a list of variables given as envvars parameter.  The
2977db96d56Sopenharmony_ci   first found to be defined will be used.  *envvars* defaults to the search
2987db96d56Sopenharmony_ci   path used in GNU gettext; it must always contain the variable name
2997db96d56Sopenharmony_ci   ``'LANG'``.  The GNU gettext search path contains ``'LC_ALL'``,
3007db96d56Sopenharmony_ci   ``'LC_CTYPE'``, ``'LANG'`` and ``'LANGUAGE'``, in that order.
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci   Except for the code ``'C'``, the language code corresponds to :rfc:`1766`.
3037db96d56Sopenharmony_ci   *language code* and *encoding* may be ``None`` if their values cannot be
3047db96d56Sopenharmony_ci   determined.
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci   .. deprecated-removed:: 3.11 3.13
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci.. function:: getlocale(category=LC_CTYPE)
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci   Returns the current setting for the given locale category as sequence containing
3127db96d56Sopenharmony_ci   *language code*, *encoding*. *category* may be one of the :const:`LC_\*` values
3137db96d56Sopenharmony_ci   except :const:`LC_ALL`.  It defaults to :const:`LC_CTYPE`.
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci   Except for the code ``'C'``, the language code corresponds to :rfc:`1766`.
3167db96d56Sopenharmony_ci   *language code* and *encoding* may be ``None`` if their values cannot be
3177db96d56Sopenharmony_ci   determined.
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci.. function:: getpreferredencoding(do_setlocale=True)
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci   Return the :term:`locale encoding` used for text data, according to user
3237db96d56Sopenharmony_ci   preferences.  User preferences are expressed differently on different
3247db96d56Sopenharmony_ci   systems, and might not be available programmatically on some systems, so
3257db96d56Sopenharmony_ci   this function only returns a guess.
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci   On some systems, it is necessary to invoke :func:`setlocale` to obtain the
3287db96d56Sopenharmony_ci   user preferences, so this function is not thread-safe. If invoking setlocale
3297db96d56Sopenharmony_ci   is not necessary or desired, *do_setlocale* should be set to ``False``.
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci   On Android or if the :ref:`Python UTF-8 Mode <utf8-mode>` is enabled, always
3327db96d56Sopenharmony_ci   return ``'utf-8'``, the :term:`locale encoding` and the *do_setlocale*
3337db96d56Sopenharmony_ci   argument are ignored.
3347db96d56Sopenharmony_ci
3357db96d56Sopenharmony_ci   The :ref:`Python preinitialization <c-preinit>` configures the LC_CTYPE
3367db96d56Sopenharmony_ci   locale. See also the :term:`filesystem encoding and error handler`.
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci   .. versionchanged:: 3.7
3397db96d56Sopenharmony_ci      The function now always returns ``"utf-8"`` on Android or if the
3407db96d56Sopenharmony_ci      :ref:`Python UTF-8 Mode <utf8-mode>` is enabled.
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci.. function:: getencoding()
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci   Get the current :term:`locale encoding`:
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_ci   * On Android and VxWorks, return ``"utf-8"``.
3487db96d56Sopenharmony_ci   * On Unix, return the encoding of the current :data:`LC_CTYPE` locale.
3497db96d56Sopenharmony_ci     Return ``"utf-8"`` if ``nl_langinfo(CODESET)`` returns an empty string:
3507db96d56Sopenharmony_ci     for example, if the current LC_CTYPE locale is not supported.
3517db96d56Sopenharmony_ci   * On Windows, return the ANSI code page.
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci   The :ref:`Python preinitialization <c-preinit>` configures the LC_CTYPE
3547db96d56Sopenharmony_ci   locale. See also the :term:`filesystem encoding and error handler`.
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   This function is similar to
3577db96d56Sopenharmony_ci   :func:`getpreferredencoding(False) <getpreferredencoding>` except this
3587db96d56Sopenharmony_ci   function ignores the :ref:`Python UTF-8 Mode <utf8-mode>`.
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci   .. versionadded:: 3.11
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci.. function:: normalize(localename)
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   Returns a normalized locale code for the given locale name.  The returned locale
3667db96d56Sopenharmony_ci   code is formatted for use with :func:`setlocale`.  If normalization fails, the
3677db96d56Sopenharmony_ci   original name is returned unchanged.
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci   If the given encoding is not known, the function defaults to the default
3707db96d56Sopenharmony_ci   encoding for the locale code just like :func:`setlocale`.
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci.. function:: resetlocale(category=LC_ALL)
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ci   Sets the locale for *category* to the default setting.
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci   The default setting is determined by calling :func:`getdefaultlocale`.
3787db96d56Sopenharmony_ci   *category* defaults to :const:`LC_ALL`.
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   .. deprecated-removed:: 3.11 3.13
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci.. function:: strcoll(string1, string2)
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci   Compares two strings according to the current :const:`LC_COLLATE` setting. As
3867db96d56Sopenharmony_ci   any other compare function, returns a negative, or a positive value, or ``0``,
3877db96d56Sopenharmony_ci   depending on whether *string1* collates before or after *string2* or is equal to
3887db96d56Sopenharmony_ci   it.
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci.. function:: strxfrm(string)
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_ci   Transforms a string to one that can be used in locale-aware
3947db96d56Sopenharmony_ci   comparisons.  For example, ``strxfrm(s1) < strxfrm(s2)`` is
3957db96d56Sopenharmony_ci   equivalent to ``strcoll(s1, s2) < 0``.  This function can be used
3967db96d56Sopenharmony_ci   when the same string is compared repeatedly, e.g. when collating a
3977db96d56Sopenharmony_ci   sequence of strings.
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci.. function:: format_string(format, val, grouping=False, monetary=False)
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci   Formats a number *val* according to the current :const:`LC_NUMERIC` setting.
4037db96d56Sopenharmony_ci   The format follows the conventions of the ``%`` operator.  For floating point
4047db96d56Sopenharmony_ci   values, the decimal point is modified if appropriate.  If *grouping* is ``True``,
4057db96d56Sopenharmony_ci   also takes the grouping into account.
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   If *monetary* is true, the conversion uses monetary thousands separator and
4087db96d56Sopenharmony_ci   grouping strings.
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   Processes formatting specifiers as in ``format % val``, but takes the current
4117db96d56Sopenharmony_ci   locale settings into account.
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci   .. versionchanged:: 3.7
4147db96d56Sopenharmony_ci      The *monetary* keyword parameter was added.
4157db96d56Sopenharmony_ci
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci.. function:: format(format, val, grouping=False, monetary=False)
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ci   Please note that this function works like :meth:`format_string` but will
4207db96d56Sopenharmony_ci   only work for exactly one ``%char`` specifier.  For example, ``'%f'`` and
4217db96d56Sopenharmony_ci   ``'%.0f'`` are both valid specifiers, but ``'%f KiB'`` is not.
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci   For whole format strings, use :func:`format_string`.
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci   .. deprecated:: 3.7
4267db96d56Sopenharmony_ci      Use :meth:`format_string` instead.
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ci.. function:: currency(val, symbol=True, grouping=False, international=False)
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_ci   Formats a number *val* according to the current :const:`LC_MONETARY` settings.
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci   The returned string includes the currency symbol if *symbol* is true, which is
4347db96d56Sopenharmony_ci   the default. If *grouping* is ``True`` (which is not the default), grouping is done
4357db96d56Sopenharmony_ci   with the value. If *international* is ``True`` (which is not the default), the
4367db96d56Sopenharmony_ci   international currency symbol is used.
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ci   .. note::
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ci     This function will not work with the 'C' locale, so you have to set a
4417db96d56Sopenharmony_ci     locale via :func:`setlocale` first.
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci.. function:: str(float)
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci   Formats a floating point number using the same format as the built-in function
4477db96d56Sopenharmony_ci   ``str(float)``, but takes the decimal point into account.
4487db96d56Sopenharmony_ci
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci.. function:: delocalize(string)
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ci    Converts a string into a normalized number string, following the
4537db96d56Sopenharmony_ci    :const:`LC_NUMERIC` settings.
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ci    .. versionadded:: 3.5
4567db96d56Sopenharmony_ci
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci.. function:: localize(string, grouping=False, monetary=False)
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci    Converts a normalized number string into a formatted string following the
4617db96d56Sopenharmony_ci    :const:`LC_NUMERIC` settings.
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci    .. versionadded:: 3.10
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci.. function:: atof(string, func=float)
4677db96d56Sopenharmony_ci
4687db96d56Sopenharmony_ci   Converts a string to a number, following the :const:`LC_NUMERIC` settings,
4697db96d56Sopenharmony_ci   by calling *func* on the result of calling :func:`delocalize` on *string*.
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci.. function:: atoi(string)
4737db96d56Sopenharmony_ci
4747db96d56Sopenharmony_ci   Converts a string to an integer, following the :const:`LC_NUMERIC` conventions.
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci.. data:: LC_CTYPE
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ci   .. index:: pair: module; string
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci   Locale category for the character type functions.  Depending on the settings of
4827db96d56Sopenharmony_ci   this category, the functions of module :mod:`string` dealing with case change
4837db96d56Sopenharmony_ci   their behaviour.
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci.. data:: LC_COLLATE
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci   Locale category for sorting strings.  The functions :func:`strcoll` and
4897db96d56Sopenharmony_ci   :func:`strxfrm` of the :mod:`locale` module are affected.
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci.. data:: LC_TIME
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci   Locale category for the formatting of time.  The function :func:`time.strftime`
4957db96d56Sopenharmony_ci   follows these conventions.
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci
4987db96d56Sopenharmony_ci.. data:: LC_MONETARY
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci   Locale category for formatting of monetary values.  The available options are
5017db96d56Sopenharmony_ci   available from the :func:`localeconv` function.
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci.. data:: LC_MESSAGES
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci   Locale category for message display. Python currently does not support
5077db96d56Sopenharmony_ci   application specific locale-aware messages.  Messages displayed by the operating
5087db96d56Sopenharmony_ci   system, like those returned by :func:`os.strerror` might be affected by this
5097db96d56Sopenharmony_ci   category.
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   This value may not be available on operating systems not conforming to the
5127db96d56Sopenharmony_ci   POSIX standard, most notably Windows.
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci.. data:: LC_NUMERIC
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci   Locale category for formatting numbers.  The functions :func:`.format`,
5187db96d56Sopenharmony_ci   :func:`atoi`, :func:`atof` and :func:`.str` of the :mod:`locale` module are
5197db96d56Sopenharmony_ci   affected by that category.  All other numeric formatting operations are not
5207db96d56Sopenharmony_ci   affected.
5217db96d56Sopenharmony_ci
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci.. data:: LC_ALL
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci   Combination of all locale settings.  If this flag is used when the locale is
5267db96d56Sopenharmony_ci   changed, setting the locale for all categories is attempted. If that fails for
5277db96d56Sopenharmony_ci   any category, no category is changed at all.  When the locale is retrieved using
5287db96d56Sopenharmony_ci   this flag, a string indicating the setting for all categories is returned. This
5297db96d56Sopenharmony_ci   string can be later used to restore the settings.
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ci
5327db96d56Sopenharmony_ci.. data:: CHAR_MAX
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_ci   This is a symbolic constant used for different values returned by
5357db96d56Sopenharmony_ci   :func:`localeconv`.
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ciExample::
5397db96d56Sopenharmony_ci
5407db96d56Sopenharmony_ci   >>> import locale
5417db96d56Sopenharmony_ci   >>> loc = locale.getlocale()  # get current locale
5427db96d56Sopenharmony_ci   # use German locale; name might vary with platform
5437db96d56Sopenharmony_ci   >>> locale.setlocale(locale.LC_ALL, 'de_DE')
5447db96d56Sopenharmony_ci   >>> locale.strcoll('f\xe4n', 'foo')  # compare a string containing an umlaut
5457db96d56Sopenharmony_ci   >>> locale.setlocale(locale.LC_ALL, '')   # use user's preferred locale
5467db96d56Sopenharmony_ci   >>> locale.setlocale(locale.LC_ALL, 'C')  # use default (C) locale
5477db96d56Sopenharmony_ci   >>> locale.setlocale(locale.LC_ALL, loc)  # restore saved locale
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ciBackground, details, hints, tips and caveats
5517db96d56Sopenharmony_ci--------------------------------------------
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ciThe C standard defines the locale as a program-wide property that may be
5547db96d56Sopenharmony_cirelatively expensive to change.  On top of that, some implementations are broken
5557db96d56Sopenharmony_ciin such a way that frequent locale changes may cause core dumps.  This makes the
5567db96d56Sopenharmony_cilocale somewhat painful to use correctly.
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ciInitially, when a program is started, the locale is the ``C`` locale, no matter
5597db96d56Sopenharmony_ciwhat the user's preferred locale is.  There is one exception: the
5607db96d56Sopenharmony_ci:data:`LC_CTYPE` category is changed at startup to set the current locale
5617db96d56Sopenharmony_ciencoding to the user's preferred locale encoding. The program must explicitly
5627db96d56Sopenharmony_cisay that it wants the user's preferred locale settings for other categories by
5637db96d56Sopenharmony_cicalling ``setlocale(LC_ALL, '')``.
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_ciIt is generally a bad idea to call :func:`setlocale` in some library routine,
5667db96d56Sopenharmony_cisince as a side effect it affects the entire program.  Saving and restoring it
5677db96d56Sopenharmony_ciis almost as bad: it is expensive and affects other threads that happen to run
5687db96d56Sopenharmony_cibefore the settings have been restored.
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ciIf, when coding a module for general use, you need a locale independent version
5717db96d56Sopenharmony_ciof an operation that is affected by the locale (such as
5727db96d56Sopenharmony_cicertain formats used with :func:`time.strftime`), you will have to find a way to
5737db96d56Sopenharmony_cido it without using the standard library routine.  Even better is convincing
5747db96d56Sopenharmony_ciyourself that using locale settings is okay.  Only as a last resort should you
5757db96d56Sopenharmony_cidocument that your module is not compatible with non-\ ``C`` locale settings.
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_ciThe only way to perform numeric operations according to the locale is to use the
5787db96d56Sopenharmony_cispecial functions defined by this module: :func:`atof`, :func:`atoi`,
5797db96d56Sopenharmony_ci:func:`.format`, :func:`.str`.
5807db96d56Sopenharmony_ci
5817db96d56Sopenharmony_ciThere is no way to perform case conversions and character classifications
5827db96d56Sopenharmony_ciaccording to the locale.  For (Unicode) text strings these are done according
5837db96d56Sopenharmony_cito the character value only, while for byte strings, the conversions and
5847db96d56Sopenharmony_ciclassifications are done according to the ASCII value of the byte, and bytes
5857db96d56Sopenharmony_ciwhose high bit is set (i.e., non-ASCII bytes) are never converted or considered
5867db96d56Sopenharmony_cipart of a character class such as letter or whitespace.
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci.. _embedding-locale:
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ciFor extension writers and programs that embed Python
5927db96d56Sopenharmony_ci----------------------------------------------------
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_ciExtension modules should never call :func:`setlocale`, except to find out what
5957db96d56Sopenharmony_cithe current locale is.  But since the return value can only be used portably to
5967db96d56Sopenharmony_cirestore it, that is not very useful (except perhaps to find out whether or not
5977db96d56Sopenharmony_cithe locale is ``C``).
5987db96d56Sopenharmony_ci
5997db96d56Sopenharmony_ciWhen Python code uses the :mod:`locale` module to change the locale, this also
6007db96d56Sopenharmony_ciaffects the embedding application.  If the embedding application doesn't want
6017db96d56Sopenharmony_cithis to happen, it should remove the :mod:`_locale` extension module (which does
6027db96d56Sopenharmony_ciall the work) from the table of built-in modules in the :file:`config.c` file,
6037db96d56Sopenharmony_ciand make sure that the :mod:`_locale` module is not accessible as a shared
6047db96d56Sopenharmony_cilibrary.
6057db96d56Sopenharmony_ci
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci.. _locale-gettext:
6087db96d56Sopenharmony_ci
6097db96d56Sopenharmony_ciAccess to message catalogs
6107db96d56Sopenharmony_ci--------------------------
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ci.. function:: gettext(msg)
6137db96d56Sopenharmony_ci.. function:: dgettext(domain, msg)
6147db96d56Sopenharmony_ci.. function:: dcgettext(domain, msg, category)
6157db96d56Sopenharmony_ci.. function:: textdomain(domain)
6167db96d56Sopenharmony_ci.. function:: bindtextdomain(domain, dir)
6177db96d56Sopenharmony_ci
6187db96d56Sopenharmony_ciThe locale module exposes the C library's gettext interface on systems that
6197db96d56Sopenharmony_ciprovide this interface.  It consists of the functions :func:`!gettext`,
6207db96d56Sopenharmony_ci:func:`!dgettext`, :func:`!dcgettext`, :func:`!textdomain`, :func:`!bindtextdomain`,
6217db96d56Sopenharmony_ciand :func:`!bind_textdomain_codeset`.  These are similar to the same functions in
6227db96d56Sopenharmony_cithe :mod:`gettext` module, but use the C library's binary format for message
6237db96d56Sopenharmony_cicatalogs, and the C library's search algorithms for locating message catalogs.
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ciPython applications should normally find no need to invoke these functions, and
6267db96d56Sopenharmony_cishould use :mod:`gettext` instead.  A known exception to this rule are
6277db96d56Sopenharmony_ciapplications that link with additional C libraries which internally invoke
6287db96d56Sopenharmony_ci:c:func:`gettext` or :c:func:`dcgettext`.  For these applications, it may be
6297db96d56Sopenharmony_cinecessary to bind the text domain, so that the libraries can properly locate
6307db96d56Sopenharmony_citheir message catalogs.
631