"locale" --- 국제화 서비스
**************************

**소스 코드:** Lib/locale.py

======================================================================

The "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 "locale" module is implemented on top of the "_locale" module,
which in turn uses an ANSI C locale implementation if available.

The "locale" module defines the following exception and functions:

exception locale.Error

   "setlocale()"에 전달된 로케일이 인식되지 않을 때 발생하는 예외.

locale.setlocale(category, locale=None)

   If *locale* is given and not "None", "setlocale()" modifies the
   locale setting for the *category*. The available categories are
   listed in the data description below. *locale* may be a string, or
   a pair, language code and encoding. An empty string specifies the
   user's default settings. If the modification of the locale fails,
   the exception "Error" is raised. If successful, the new locale
   setting is returned.

   If *locale* is a pair, it is converted to a locale name using the
   locale aliasing engine. The language code has the same format as a
   locale name, but without encoding and "@"-modifier. The language
   code and encoding can be "None".

   *locale*이 생략되거나 "None"이면, *category*의 현재 설정이 반환됩니
   다.

   예:

      >>> import locale
      >>> loc = locale.setlocale(locale.LC_ALL)  # get current locale
      # use German locale; name and availability varies with platform
      >>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
      >>> 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

   "setlocale()" is not thread-safe on most systems. Applications
   typically start with a call of:

      import locale
      locale.setlocale(locale.LC_ALL, '')

   이는 모든 범주의 로케일을 사용자의 기본 설정(보통 "LANG" 환경 변수
   에서 지정됩니다)으로 설정합니다. 그 후에 로케일을 변경하지 않으면,
   다중 스레딩을 사용해도 문제가 발생하지 않습니다.

locale.localeconv()

   현지 규칙의 데이터베이스를 딕셔너리로 반환합니다. 이 딕셔너리에는
   키로 다음 문자열이 있습니다:

   +------------------------+---------------------------------------+----------------------------------+
   | 범주                   | 키                                    | 의미                             |
   |========================|=======================================|==================================|
   | "LC_NUMERIC"           | "'decimal_point'"                     | 십진수 소수점 문자.              |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'grouping'"                          | "'thousands_sep'"가 예상되는 상  |
   |                        |                                       | 대 위치를 지정하는 숫자의 시퀀스 |
   |                        |                                       | . 시 퀀스가 "CHAR_MAX"로 종료되  |
   |                        |                                       | 면, 더 이상의 그룹화가 수행되지  |
   |                        |                                       | 않습니다. 시퀀스가 "0"으로 종료  |
   |                        |                                       | 되면, 마지막 그룹 크기가 반복적  |
   |                        |                                       | 으로 사용됩니다 .                |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'thousands_sep'"                     | 그룹 간에 사용되는 문자.         |
   +------------------------+---------------------------------------+----------------------------------+
   | "LC_MONETARY"          | "'int_curr_symbol'"                   | 국제 통화 기호.                  |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'currency_symbol'"                   | 현지 통화 기호.                  |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'p_cs_precedes/n_cs_precedes'"       | 통화 기호가 값 앞에 오는지 여부  |
   |                        |                                       | (각각 양과 음의 값).             |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'p_sep_by_space/n_sep_by_space'"     | 통화 기호가 스페이스로 값과 구분 |
   |                        |                                       | 되는지 여부 (각각 양과 음의 값). |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'mon_decimal_point'"                 | 화폐값에 사용되는 십진수 소수점. |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'frac_digits'"                       | 화폐값의 현지 형식에 사용되는 소 |
   |                        |                                       | 수점 이하 자릿수.                |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'int_frac_digits'"                   | 화폐값의 국제 형식에 사용되는 소 |
   |                        |                                       | 수점 이하 자릿수.                |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'mon_thousands_sep'"                 | 화폐값에 사용되는 그룹 구분자.   |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'mon_grouping'"                      | "'grouping'"과 동등합니다, 화폐  |
   |                        |                                       | 값에 사용됩니다.                 |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'positive_sign'"                     | 양의 화폐값을 표현하는 데 사용되 |
   |                        |                                       | 는 기호.                         |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'negative_sign'"                     | 음의 화폐값을 표현하는 데 사용되 |
   |                        |                                       | 는 기호.                         |
   +------------------------+---------------------------------------+----------------------------------+
   |                        | "'p_sign_posn/n_sign_posn'"           | 부호의 위치 (각각 양과 음의 값), |
   |                        |                                       | 아래를 참조하십시오.             |
   +------------------------+---------------------------------------+----------------------------------+

   모든 숫자 값은 이 로케일에서 아무런 값도 지정되지 않았음을 나타내는
   "CHAR_MAX"로 설정할 수 있습니다.

   "'p_sign_posn'"과 "'n_sign_posn'"에 가능한 값은 다음과 같습니다.

   +----------------+-------------------------------------------+
   | 값             | 설명                                      |
   |================|===========================================|
   | "0"            | 통화와 값을 괄호로 묶습니다.              |
   +----------------+-------------------------------------------+
   | "1"            | 부호는 값과 통화 기호 앞에 와야 합니다.   |
   +----------------+-------------------------------------------+
   | "2"            | 부호는 값과 통화 기호 뒤에 와야 합니다.   |
   +----------------+-------------------------------------------+
   | "3"            | 부호는 값 바로 앞에 와야 합니다.          |
   +----------------+-------------------------------------------+
   | "4"            | 부호는 값 바로 뒤에 와야 합니다.          |
   +----------------+-------------------------------------------+
   | "CHAR_MAX"     | 이 로케일에 지정된 것이 없습니다.         |
   +----------------+-------------------------------------------+

   로케일이 다르고 숫자나 통화 문자열이 ASCII가 아니면, 함수는 일시적
   으로 "LC_CTYPE" 로케일을 "LC_NUMERIC" 로케일이나 "LC_MONETARY" 로케
   일로 설정합니다. 이 임시 변경은 다른 스레드에 영향을 줍니다.

   버전 3.7에서 변경: 이 함수는 이제 어떤 경우에 "LC_CTYPE" 로케일을
   "LC_NUMERIC" 로케일로 임시 설정합니다.

locale.nl_langinfo(option)

   로케일 특정 정보를 문자열로 반환합니다. 이 함수를 모든 시스템에서
   사용할 수 있는 것은 아니며, 가능한 옵션 집합은 플랫폼마다 다를 수
   있습니다. 가능한 인자 값은 숫자이며, locale 모듈에 있는 기호 상수를
   사용할 수 있습니다.

   "nl_langinfo()" 함수는 다음 키 중 하나를 받아들입니다. 대부분의 설
   명은 GNU C 라이브러리의 해당 설명에서 가져옵니다.

   locale.CODESET

      선택한 로케일에 사용된 문자 인코딩의 이름으로 문자열을 가져옵니
      다.

   locale.D_T_FMT

      로케일 특정 방식으로 날짜와 시간을 표시하기 위해
      "time.strftime()"의 포맷 문자열로 사용할 수 있는 문자열을 가져옵
      니다.

   locale.D_FMT

      로케일 특정 방식으로 날짜를 표시하기 위해 "time.strftime()"의 포
      맷 문자열로 사용할 수 있는 문자열을 가져옵니다.

   locale.T_FMT

      로케일 특정 방식으로 시간을 표시하기 위해 "time.strftime()"의 포
      맷 문자열로 사용할 수 있는 문자열을 가져옵니다.

   locale.T_FMT_AMPM

      am/pm 형식으로 시간을 나타내는 "time.strftime()"의 포맷 문자열을
      가져옵니다.

   locale.DAY_1
   locale.DAY_2
   locale.DAY_3
   locale.DAY_4
   locale.DAY_5
   locale.DAY_6
   locale.DAY_7

      주의 n 번째 날의 이름을 가져옵니다.

      참고:

        이것은 월요일이 주의 첫 번째 요일인 국제관례(ISO 8601)가 아니
        라, "DAY_1"이 일요일인 미국 관례를 따릅니다.

   locale.ABDAY_1
   locale.ABDAY_2
   locale.ABDAY_3
   locale.ABDAY_4
   locale.ABDAY_5
   locale.ABDAY_6
   locale.ABDAY_7

      주의 n 번째 날의 줄인 이름을 가져옵니다.

   locale.MON_1
   locale.MON_2
   locale.MON_3
   locale.MON_4
   locale.MON_5
   locale.MON_6
   locale.MON_7
   locale.MON_8
   locale.MON_9
   locale.MON_10
   locale.MON_11
   locale.MON_12

      n 번째 달의 이름을 가져옵니다.

   locale.ABMON_1
   locale.ABMON_2
   locale.ABMON_3
   locale.ABMON_4
   locale.ABMON_5
   locale.ABMON_6
   locale.ABMON_7
   locale.ABMON_8
   locale.ABMON_9
   locale.ABMON_10
   locale.ABMON_11
   locale.ABMON_12

      n 번째 달의 줄인 이름을 가져옵니다.

   locale.RADIXCHAR

      기수 문자(십진수 점, 십진수 쉼표, 등)를 가져옵니다.

   locale.THOUSEP

      천 단위 (3자리 그룹) 구분자 문자를 가져옵니다.

   locale.YESEXPR

      예/아니요 질문에 대한 긍정적인 응답을 인식하기 위해 regex 함수에
      사용할 수 있는 정규식을 가져옵니다.

   locale.NOEXPR

      예/아니요 질문에 대한 부정적인 응답을 인식하기 위해 "regex(3)"
      함수에 사용할 수 있는 정규식을 가져옵니다.

      참고:

        "YESEXPR"과 "NOEXPR"를 위한 정규식은 C 라이브러리의 "regex" 함
        수에 적합한 문법을 사용합니다, 이는 "re"에 사용되는 문법과 다
        를 수 있습니다.

   locale.CRNCYSTR

      통화 기호를 가져옵니다. 기호가 값 앞에 나타나야 하면 "-", 기호가
      값 뒤에 나타나야 하면 "+", 또는 기호가 기수 문자를 대체해야 하면
      "."가 앞에 나옵니다.

   locale.ERA

      로케일의 각 시대에 대해 연도를 계산하고 표시하는 방법을 설명하는
      문자열을 가져옵니다.

      대부분의 로케일은 이 값을 정의하지 않습니다. 이 값을 정의하는 로
      케일의 예는 일본입니다. 일본에서, 전통적인 날짜 표시에는 당시 군
      주의 통치에 해당하는 시대의 이름이 포함됩니다.

      일반적으로 이 값을 직접 사용할 필요는 없습니다. 포맷 문자열에
      "E" 수정자를 지정하면 "time.strftime()" 함수가 이 정보를 사용합
      니다. 반환된 문자열의 형식은 *The Open Group Base Specifications
      Issue 8*, 문단 7.3.5.2 LC_TIME C-Language Access에서 지정합니다.

   locale.ERA_D_T_FMT

      로케일 특정 시대 기반 방식으로 날짜와 시간을 나타내는
      "time.strftime()"의 포맷 문자열을 가져옵니다.

   locale.ERA_D_FMT

      로케일 특정 시대 기반 방식으로 날짜를 나타내는 "time.strftime()"
      의 포맷 문자열을 가져옵니다.

   locale.ERA_T_FMT

      로케일 특정 시대 기반 방식으로 시간을 나타내는 "time.strftime()"
      의 포맷 문자열을 가져옵니다.

   locale.ALT_DIGITS

      로케일별 방식으로 0에서 99까지의 값을 나타내는 데 사용되는 세미
      콜론으로 구분되된 최대 100개의 기호로 구성된 문자열을 가져옵니다
      . 대부분의 로케일에서 빈 문자열입니다.

   The function temporarily sets the "LC_CTYPE" locale to the locale
   of the category that determines the requested value ("LC_TIME",
   "LC_NUMERIC", "LC_MONETARY" or "LC_MESSAGES") if locales are
   different and the resulting string is non-ASCII. This temporary
   change affects other threads.

   버전 3.14에서 변경: The function now temporarily sets the
   "LC_CTYPE" locale in some cases.

locale.getdefaultlocale([envvars])

   기본 로케일 설정을 판별하려고 시도하고 "(language code, encoding)"
   형식의 튜플로 반환합니다.

   POSIX에 따르면, "setlocale(LC_ALL, '')"을 호출하지 않은 프로그램은
   이식성 있는 "'C'" 로케일을 사용하여 실행됩니다. "setlocale(LC_ALL,
   '')"을 호출하면 "LANG" 변수로 정의된 기본 로케일을 사용하도록 합니
   다. 현재 로케일 설정을 방해하고 싶지 않기 때문에 위에서 설명한 방식
   으로 동작을 에뮬레이트 합니다.

   다른 플랫폼과의 호환성을 유지하기 위해, "LANG" 변수뿐만 아니라
   envvars 매개 변수로 제공된 변수 리스트도 검사합니다. 가장 먼저 정의
   된 것으로 발견된 것이 사용됩니다. *envvars*는 GNU gettext에서 사용
   되는 검색 경로를 기본값으로 합니다; 항상 변수 이름 "'LANG'"을 포함
   해야 합니다. GNU gettext 검색 경로에는 "'LC_ALL'", "'LC_CTYPE'",
   "'LANG'" 및 "'LANGUAGE'"가 순서대로 포함됩니다.

   The language code has the same format as a locale name, but without
   encoding and "@"-modifier. The language code and encoding may be
   "None" if their values cannot be determined. The "C" locale is
   represented as "(None, None)".

   Deprecated since version 3.11, will be removed in version 3.15.

locale.getlocale(category=LC_CTYPE)

   Returns the current setting for the given locale category as a
   tuple containing the language code and encoding. *category* may be
   one of the "LC_*" values except "LC_ALL".  It defaults to
   "LC_CTYPE".

   The language code has the same format as a locale name, but without
   encoding and "@"-modifier. The language code and encoding may be
   "None" if their values cannot be determined. The "C" locale is
   represented as "(None, None)".

locale.getpreferredencoding(do_setlocale=True)

   사용자 설정(user preferences)에 따라, 텍스트 데이터에 사용된 *로케
   일 인코딩*을 반환합니다. 사용자 설정은 시스템마다 다르게 표현되며,
   일부 시스템에서는 프로그래밍 방식으로 제공되지 않을 수 있어서, 이
   함수는 추측만 반환합니다.

   일부 시스템에서는, 사용자 설정을 얻기 위해 "setlocale()"을 호출할
   필요가 있어서, 이 함수는 스레드 안전하지 않습니다. setlocale을 호출
   할 필요가 없거나 원하지 않으면, *do_setlocale*을 "False"로 설정해야
   합니다.

   안드로이드에서 또는 파이썬 UTF-8 모드가 활성화되면, 항상 "'utf-8'"
   을 반환하고, *로케일 인코딩*과 *do_setlocale* 인자는 무시됩니다.

   The Python preinitialization configures the LC_CTYPE locale. See
   also the *filesystem encoding and error handler*.

   버전 3.7에서 변경: 이 함수는 이제 안드로이드에서 또는 파이썬 UTF-8
   모드가 활성화되면 항상 ""utf-8""을 반환합니다.

locale.getencoding()

   Get the current *locale encoding*:

   * On Android and VxWorks, return ""utf-8"".

   * On Unix, return the encoding of the current "LC_CTYPE" locale.
     Return ""utf-8"" if "nl_langinfo(CODESET)" returns an empty
     string: for example, if the current LC_CTYPE locale is not
     supported.

   * On Windows, return the ANSI code page.

   The Python preinitialization configures the LC_CTYPE locale. See
   also the *filesystem encoding and error handler*.

   This function is similar to "getpreferredencoding(False)" except
   this function ignores the Python UTF-8 Mode.

   Added in version 3.11.

locale.normalize(localename)

   주어진 로케일 이름에 대해 정규화된 로케일 코드를 반환합니다. 반환된
   로케일 코드는 "setlocale()"에서 사용하도록 포맷됩니다. 정규화에 실
   패하면, 원래 이름이 변경되지 않은 상태로 반환됩니다.

   주어진 인코딩이 알려지지 않았으면, 함수는 "setlocale()"처럼 로케일
   코드의 기본 인코딩을 기본값으로 사용합니다.

locale.strcoll(string1, string2)

   현재 "LC_COLLATE" 설정에 따라 두 문자열을 비교합니다. 다른 비교 함
   수처럼, *string1*이 *string2* 앞이니 뒤에 오는지 또는 같은지에 따라
   음수나 양수 값 또는 "0"을 반환합니다.

locale.strxfrm(string)

   문자열을 로케일을 고려한 비교에 사용할 수 있는 문자열로 변환합니다.
   예를 들어, "strxfrm(s1) < strxfrm(s2)"는 "strcoll(s1, s2) < 0"과 동
   등합니다. 이 함수는 같은 문자열이 반복적으로 비교될 때, 예를 들어
   문자열 시퀀스를 정렬할 때, 사용할 수 있습니다.

locale.format_string(format, val, grouping=False, monetary=False)

   현재 "LC_NUMERIC" 설정에 따라 숫자 *val*을 포맷합니다. format은 "%"
   연산자의 규칙을 따릅니다. 부동 소수점 값의 경우, 적절하다면 소수점
   이 수정됩니다. *grouping*이 "True"이면, 그룹화도 고려합니다.

   *monetary*가 참이면, 변환은 화폐 천 단위 구분 기호와 그룹화 문자열
   을 사용합니다.

   "format % val"에서처럼 포맷 지정자를 처리하지만, 현재 로케일 설정을
   고려합니다.

   버전 3.7에서 변경: *monetary* 키워드 매개 변수가 추가되었습니다.

locale.currency(val, symbol=True, grouping=False, international=False)

   현재 "LC_MONETARY" 설정에 따라 숫자 *val*을 포맷합니다.

   *symbol*이 참이면 반환된 문자열에 통화 기호가 포함됩니다, 이것이 기
   본값입니다. *grouping*이 "True"이면 (기본값이 아닙니다), 값으로 그
   룹화가 수행됩니다. *international*이 "True"이면 (기본값이 아닙니다
   ), 국제 통화 기호가 사용됩니다.

   참고:

     이 함수는 'C' 로케일에서 작동하지 않아서, 먼저 "setlocale()"을 통
     해 로케일을 설정해야 합니다.

locale.str(float)

   내장 함수 "str(float)"와 같은 형식을 사용하여 부동 소수점 숫자를 포
   맷하지만, 십진수 소수점을 고려합니다.

locale.delocalize(string)

   "LC_NUMERIC" 설정에 따라, 문자열을 정규화된 숫자 문자열로 변환합니
   다.

   Added in version 3.5.

locale.localize(string, grouping=False, monetary=False)

   "LC_NUMERIC" 설정에 따라 포맷되는 문자열로, 문자열을 정규화된 숫자
   문자열로 변환합니다.

   Added in version 3.10.

locale.atof(string, func=float)

   *string*에 "delocalize()"를 호출한 결과에 *func*를 호출하여,
   "LC_NUMERIC" 설정에 따라, 문자열을 숫자로 변환합니다.

locale.atoi(string)

   "LC_NUMERIC" 규칙에 따라, 문자열을 정수로 변환합니다.

locale.LC_CTYPE

   Locale category for the character type functions.  Most
   importantly, this category defines the text encoding, i.e. how
   bytes are interpreted as Unicode codepoints.  See **PEP 538** and
   **PEP 540** for how this variable might be automatically coerced to
   "C.UTF-8" to avoid issues created by invalid settings in containers
   or incompatible settings passed over remote SSH connections.

   Python doesn't internally use locale-dependent character
   transformation functions from "ctype.h". Instead, "pyctype.h"
   provides locale-independent equivalents like "Py_TOLOWER".

locale.LC_COLLATE

   Locale category for sorting strings.  The functions "strcoll()" and
   "strxfrm()" of the "locale" module are affected.

locale.LC_TIME

   시간 포매팅을 위한 로케일 범주. "time.strftime()" 함수는 이러한 규
   칙을 따릅니다.

locale.LC_MONETARY

   화폐값의 포매팅을 위한 로케일 범주. 사용 가능한 옵션은
   "localeconv()" 함수에서 제공됩니다.

locale.LC_MESSAGES

   메시지 표시를 위한 로케일 범주. 파이썬은 현재 응용 프로그램에 특정
   한 로케일을 고려한 메시지를 지원하지 않습니다. "os.strerror()"에서
   반환된 메시지처럼 운영 체제에서 표시되는 메시지는 이 범주의 영향을
   받을 수 있습니다.

   This value may not be available on operating systems not conforming
   to the POSIX standard, most notably Windows.

locale.LC_NUMERIC

   Locale category for formatting numbers.  The functions
   "format_string()", "atoi()", "atof()" and "str()" of the "locale"
   module are affected by that category.  All other numeric formatting
   operations are not affected.

locale.LC_ALL

   모든 로케일 설정의 조합. 로케일을 변경할 때 이 플래그를 사용하면,
   모든 범주에 대한 로케일 설정을 시도합니다. 어떤 범주에서 실패하면,
   아무런 범주도 변경되지 않습니다. 이 플래그를 사용하여 로케일을 가져
   오면, 모든 범주의 설정을 나타내는 문자열이 반환됩니다. 이 문자열은
   나중에 설정을 복원하는 데 사용할 수 있습니다.

locale.CHAR_MAX

   이것은 "localeconv()"가 반환한 다른 값에 사용되는 기호 상수입니다.


배경, 세부 사항, 힌트, 팁 및 경고
=================================

C 표준은 로케일을 변경하는 데 상대적으로 비용이 많이 드는 프로그램 전
체 속성으로 정의합니다. 이 위에, 로케일을 자주 변경하면 코어 덤프가 발
생할 수 있는 방식으로 일부 구현이 망가져 있습니다. 이것은 로케일을 올
바르게 사용하는 것을 다소 고통스럽게 만듭니다.

처음에, 프로그램이 시작할 때, 사용자가 선호하는 로케일이 무엇이든 로케
일은 "C" 로케일입니다. 한 가지 예외가 있습니다: "LC_CTYPE" 범주는 시작
시 현재 로케일 인코딩을 사용자가 선호하는 로케일 인코딩으로 설정하도록
변경됩니다. 다른 범주에 대해서는 프로그램이 "setlocale(LC_ALL, '')"을
호출하여 사용자가 선호하는 로케일 설정을 원한다고 명시적으로 말해야 합
니다.

일반적으로 어떤 라이브러리 루틴에서 "setlocale()"을 호출하는 것은 나쁜
생각입니다. 부작용으로 전체 프로그램에 영향을 미치기 때문입니다. 저장
하고 복원하는 것도 거의 비슷하게 나쁩니다: 비용이 많이 들고 설정이 복
원되기 전에 실행되는 다른 스레드에 영향을 줍니다.

일반적인 용도로 모듈을 코딩할 때, 로케일에 영향을 받는 로케일 독립적인
버전의 연산(가령 "time.strftime()"에 사용되는 특정 포맷)이 필요하면,
표준 라이브러리 루틴을 사용하지 않고 수행할 수 있는 방법을 찾아야 합니
다. 로케일 설정을 사용하는 것이 좋다고 자신을 설득하는 것이 더 좋습니
다. 최후의 수단으로만 모듈이 "C"가 아닌 로케일 설정과 호환되지 않는다
는 것을 문서화해야 합니다.

로케일에 따라 숫자 연산을 수행하는 유일한 방법은 이 모듈이 정의한 특수
함수인 "atof()", "atoi()", "format_string()", "str()"을 사용하는 것입
니다.

로케일에 따라 대소 문자 변환과 문자 분류를 수행할 방법이 없습니다. (유
니코드) 텍스트 문자열의 경우 이것은 문자 값으로만 수행되는 반면, 바이
트 문자열의 경우, 바이트의 ASCII 값에 따라 수행되고, 높은 비트가 설정
된 바이트(즉, ASCII가 아닌 바이트)는 절대 변환되거나 글자나 공백과 같
은 문자 클래스의 일부로 고려되지 않습니다.


Locale names
============

The format of the locale name is platform dependent, and the set of
supported locales can depend on the system configuration.

On Posix platforms, it usually has the format [1]:

     language ["_" territory] ["." charset] ["@" modifier]

where *language* is a two- or three-letter language code from ISO 639,
*territory* is a two-letter country or region code from ISO 3166,
*charset* is a locale encoding, and *modifier* is a script name, a
language subtag, a sort order identifier, or other locale modifier
(for example, "latin", "valencia", "stroke" and "euro").

On Windows, several formats are supported. [2] [3] A subset of IETF
BCP 47 tags:

     language ["-" script] ["-" territory] ["." charset]
     language ["-" script] "-" territory "-" modifier

where *language* and *territory* have the same meaning as in Posix,
*script* is a four-letter script code from ISO 15924, and *modifier*
is a language subtag, a sort order identifier or custom modifier (for
example, "valencia", "stroke" or "x-python"). Both hyphen ("'-'") and
underscore ("'_'") separators are supported. Only UTF-8 encoding is
allowed for BCP 47 tags.

Windows also supports locale names in the format:

     language ["_" territory] ["." charset]

where *language* and *territory* are full names, such as "English" and
"United States", and *charset* is either a code page number (for
example, "1252") or UTF-8. Only the underscore separator is supported
in this format.

The "C" locale is supported on all platforms.

[1] IEEE Std 1003.1-2024; 8.2 Internationalization Variables

[2] UCRT Locale names, Languages, and Country/Region strings

[3] Locale Names


확장 작성자와 파이썬을 내장하는 프로그램의 경우
===============================================

확장 모듈은 현재 로케일이 무엇인지 찾는 것을 제외하고는 "setlocale()"
을 호출해서는 안 됩니다. 그러나 반환 값은 이식성 있게 복원하는 데만 사
용될 수 있기 때문에, 그다지 유용하지 않습니다 (아마도 로케일이 "C"인지
아닌지를 확인하는 것은 예외입니다).

When Python code uses the "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 "_locale" extension
module (which does all the work) from the table of built-in modules in
the "config.c" file, and make sure that the "_locale" module is not
accessible as a shared library.


메시지 카탈로그에 액세스
========================

locale.gettext(msg)

locale.dgettext(domain, msg)

locale.dcgettext(domain, msg, category)

locale.textdomain(domain)

locale.bindtextdomain(domain, dir)

locale.bind_textdomain_codeset(domain, codeset)

locale 모듈은 이 인터페이스를 제공하는 시스템에서 C 라이브러리의
gettext 인터페이스를 제공합니다. "gettext()", "dgettext()",
"dcgettext()", "textdomain()", "bindtextdomain()" 및
"bind_textdomain_codeset()" 함수로 구성됩니다. 이는 "gettext" 모듈의
같은 함수와 유사하지만, 메시지 카탈로그에 C 라이브러리의 바이너리 형식
을 사용하고, 메시지 카탈로그를 찾는 데 C 라이브러리의 검색 알고리즘을
사용합니다.

파이썬 응용 프로그램은 일반적으로 이러한 함수를 호출할 필요가 없으며,
대신 "gettext"를 사용해야 합니다. 이 규칙의 알려진 예외는 내부적으로 C
함수 "gettext"나 "dcgettext"를 호출하는 추가 C 라이브러리와 링크되는
응용 프로그램입니다. 이러한 응용 프로그램에서는, 라이브러리가 메시지
카탈로그를 올바르게 찾을 수 있도록 텍스트 도메인을 바인드해야 할 수도
있습니다.
