locale — 국제화 서비스
locale — 국제화 서비스
locale 모듈은 POSIX 로케일 데이터베이스와 기능에 대한 접근을 열어줘요. POSIX 로케일 메커니즘은 프로그래머가 소프트웨어가 실행되는 각 국가의 모든 세부 사항을 알 필요 없이 애플리케이션의 특정 문화적 문제를 다룰 수 있게 해줘요.
locale 모듈은 _locale 모듈 위에 구현되며, _locale 모듈은 사용 가능하면 ANSI C 로케일 구현을 사용해요.
본문
예외와 함수
exception locale.Error — setlocale()에 전달된 로케일이 인식되지 않을 때 발생하는 예외.
locale.setlocale(category, locale=None) — locale이 주어지고 None이 아니면 setlocale()이 해당 카테고리의 로케일 설정을 수정해요. locale은 문자열이거나 언어 코드와 인코딩의 쌍일 수 있으며, 빈 문자열은 사용자의 기본 설정을 지정해요. 로케일 수정에 실패하면 Error 예외가 발생하고, 성공하면 새 로케일 설정이 반환돼요. locale이 생략되거나 None이면 category의 현재 설정이 반환돼요.
>>> import locale
>>> loc = locale.setlocale(locale.LC_ALL) # get current locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
>>> locale.setlocale(locale.LC_ALL, '') # use user's preferred locale
>>> locale.setlocale(locale.LC_ALL, loc) # restore saved locale
setlocale()은 대부분의 시스템에서 스레드 안전하지 않아요. 애플리케이션은 일반적으로 다음 호출로 시작해요:
import locale
locale.setlocale(locale.LC_ALL, '')
locale.localeconv() — 로컬 관례의 데이터베이스를 딕셔너리로 반환해요. 키에는 'decimal_point', 'grouping', 'thousands_sep', 'int_curr_symbol', 'currency_symbol', 'mon_decimal_point', 'frac_digits', 'mon_thousands_sep', 'positive_sign', 'negative_sign', 'p_sign_posn', 'n_sign_posn' 등이 있어요.
locale.nl_langinfo(option) — 일부 로케일별 정보를 문자열로 반환해요. 모든 시스템에서 사용할 수 있는 것은 아니며, 가능한 옵션 집합도 플랫폼 간에 다를 수 있어요. CODETESET, D_T_FMT, D_FMT, T_FMT, DAY_1...DAY_7, MON_1...MON_12, RADIXCHAR, THOUSEP, YESEXPR, NOEXPR, CRNCYSTR, ERA 등이 가능한 인자 값이에요.
locale.getdefaultlocale([envvars]) — 기본 로케일 설정을 결정하려고 시도하고 (language code, encoding) 형태의 튜플로 반환해요. "C" 로케일은 (None, None)으로 표시돼요.
locale.getlocale(category=LC_CTYPE) — 주어진 로케일 카테고리에 대한 현재 설정을 언어 코드와 인코딩을 포함하는 튜플로 반환해요. LC_ALL을 제외한 LC_* 값 중 하나일 수 있어요. 기본값은 LC_CTYPE예요.
locale.getpreferredencoding(do_setlocale=True) — 사용자 선호에 따른 텍스트 데이터용 로케일 인코딩을 반환해요. Android나 파이썬 UTF-8 모드가 활성화되면 항상 'utf-8'을 반환해요.
locale.getencoding() — 현재 로케일 인코딩을 가져와요. 버전 3.11에서 추가됨.
locale.normalize(localename) — 주어진 로케일 이름에 대한 정규화된 로케일 코드를 반환해요. 정규화에 실패하면 원래 이름이 그대로 반환돼요.
locale.strcoll(string1, string2) — 현재 LC_COLLATE 설정에 따라 두 문자열을 비교해요. locale.strxfrm(string) — 로케일 인식 비교에 사용할 수 있는 문자열로 변환해요.
locale.format_string(format, val, grouping=False, monetary=False) — 현재 LC_NUMERIC 설정에 따라 숫자 val을 형식화해요.
locale.currency(val, symbol=True, grouping=False, international=False) — 현재 LC_MONETARY 설정에 따라 숫자 val을 형식화해요. symbol이 기본값처럼 참이면 반환된 문자열에 통화 기호가 포함돼요. 이 함수는 'C' 로케일에서 동작하지 않으므로 먼저 setlocale()로 로케일을 설정해야 해요.
locale.str(float) — 소수점을 고려해 str(float)과 같은 형식을 사용해 부동소수점 숫자를 형식화해요. locale.delocalize(string) — LC_NUMERIC 설정에 따라 문자열을 정규화된 숫자 문자열로 변환해요. locale.localize(string, grouping=False, monetary=False) — 정규화된 숫자 문자열을 LC_NUMERIC 설정에 따라 형식화된 문자열로 변환해요. locale.atof(string, func=float) — LC_NUMERIC 설정에 따라 문자열을 숫자로 변환해요. locale.atoi(string) — LC_NUMERIC 관례에 따라 문자열을 정수로 변환해요.
로케일 카테고리 상수
LC_CTYPE— 문자 타입 함수용 로케일 카테고리. 가장 중요하게 이 카테고리는 텍스트 인코딩을 정의해요.LC_COLLATE— 문자열 정렬용 로케일 카테고리.LC_TIME— 시간 형식화용 로케일 카테고리.LC_MONETARY— 통화 값 형식화용 로케일 카테고리.LC_MESSAGES— 메시지 표시용 로케일 카테고리.LC_NUMERIC— 숫자 형식화용 로케일 카테고리.LC_ALL— 모든 로케일 설정의 조합.CHAR_MAX—localeconv()가 반환하는 여러 값에 사용되는 기호 상수.
배경, 세부 사항, 힌트, 팁과 주의 사항
C 표준은 로케일을 상대적으로 변경 비용이 높을 수 있는 프로그램 전체 속성으로 정의해요. 처음 프로그램이 시작되면 사용자의 선호 로케일과 무관하게 로케일은 C 로켜일이에요. 프로그램은 다른 카테고리에 대해 사용자의 선호 로케일 설정을 원한다는 것을 setlocale(LC_ALL, '') 호출로 명시적으로 표현해야 해요.
일부 라이브러리 루틴에서 setlocale()을 호출하는 것은 부작용으로 전체 프로그램에 영향을 주므로 일반적으로 나쁜 생각이에요. 로케일 설정에 따라 숫자 연산을 수행하는 유일한 방법은 이 모듈이 정의하는 특수 함수(atof(), atoi(), format_string(), str())를 사용하는 것이에요.
로케일 이름
로케일 이름의 형식은 플랫폼에 따라 다르며, 지원되는 로케일 집합은 시스템 구성에 따라 달라질 수 있어요. Posix 플랫폼에서 보통 다음 형식을 가져요: language ["_" territory] ["." charset] ["@" modifier]. "C" 로케일은 모든 플랫폼에서 지원돼요.