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