gettext — 다국어 서비스
gettext — 다국어 서비스 (GNU gettext)
gettext 모듈은 GNU gettext 메시지 카탈로그 API에 대한 국제화(I18N)와 지역화(L10N) 서비스를 제공해요. 이 모듈은 프로그램 메시지의 자연어 번역을 제공할 뿐 아니라, 프로그램이 번역 가능한 문자열을 조회할 때 올바른 번역을 돌려줍니다.
이 모듈의 API는 전통적으로 두 가지로 나뉘어요. 하나는 GNU gettext CATALOG 메서드의 모듈 수준 함수이고, 다른 하나는 효율적인 번역을 위해 GNU gettext 도구 체인이 생성하는 .mo 카탈로그 파일을 기반으로 동작하는 클래스 기반 API예요.
출처: Python 표준 라이브러리
함수
gettext.gettext(message)— 현재 전역 도메인에서message의 번역을 반환해요. 번역 항목이 없으면 원래 문자열을 반환합니다.gettext.dgettext(domain, message)—domain에서message의 번역을 반환해요.gettext.ngettext(singular, plural, n)— 복수형 처리 로직으로 단수형·복수형 변형을 구분해 번역해요.gettext.dngettext(domain, singular, plural, n)— 지정한domain에 대해 복수형 처리를 하는ngettext()예요.gettext.pgettext(context, message)— 문맥(컨텍스트) 기반 번역 함수예요.gettext.npgettext(context, singular, plural, n)— 문맥 기반 복수형 번역 함수예요.
bindtextdomain()
gettext.bindtextdomain(domain, localedir=None)
번역 카탈로그가 위치할 디렉터리를 domain에 바인딩해요. 파일 시스템의 권한 문제가 있을 때 유용한데, 일반적으로 GNU gettext는 메시지를 찾을 기본 디렉터리 집합을 갖고 있어요. localedir를 지정하면 그 디렉터리에서 카탈로그를 찾습니다.
textdomain()
gettext.textdomain(domain=None)
전역 도메인을 변경하거나 조회해요. domain=None이면 현재 전역 도메인 이름을 반환하고, 도메인 이름을 주면 현재 전역 도메인을 그것으로 바꿉니다.
translation()
gettext.translation(domain, localedir=None, languages=None, class_=None, fallback=False, codeset=None)
domain에 대한 번역 카탈로그를 나타내는 *class_*의 인스턴스를 반환해요. class_가 주어지지 않으면 GNUTranslations가 사용됩니다. languages는 카탈로그를 찾을 언어 코드의 리스트예요. 번역을 찾을 수 없으면(또는 fallback=True이면) NullTranslations 인스턴스가 반환될 수 있습니다.
install()
gettext.install(domain, localedir=None, *, add_locale_to_fields=False, names=None)
내장 _() 함수를 domain에 대한 번역자로 설치해요. names로 추가로 설치할 함수 이름을 지정할 수 있어요. 이 함수를 호출한 뒤엔 전역에서 _()를 써서 번역을 얻을 수 있습니다.
클래스
NullTranslations
class gettext.NullTranslations(fp=None)
번역 카탈로그를 읽지 않는 기본 번역 구현이에요. gettext()는 인자를 그대로 반환하고, ngettext()는 단수/복수 규칙에 따라 반환합니다. 서브클래싱의 기반이 되며, add_fallback(), install(), gettext(), ngettext() 등의 메서드를 제공해요.
GNUTranslations
class gettext.GNUTranslations(fp)
NullTranslations의 확장으로, GNU mo 파일 형식으로 저장된 번역 카탈로그를 읽어요. mo 카탈로그를 찾을 수 없으면 OSError를 발생시킵니다.
유용한 추가 메서드:
GNUTranslations.info()— mo 카탈로그 헤더의 메타데이터 사전을 반환.GNUTranslations.gettext(message)—message의 번역을 반환.
예제
프로그램에 다국어 지원을 추가하는 일반적인 패턴입니다. 먼저 도메인을 설정하고 _() 함수를 가져와서 쓰는 방식이에요:
import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
print(_('This is a translatable string.'))
install()을 쓰면 어디서든 _()를 바로 쓸 수 있어요:
import gettext
gettext.install('myapplication')
print(_('This is a translatable string.'))
복수형은 ngettext으로 처리합니다:
import gettext
gettext.install('myapplication')
n = 2
print(gettext.ngettext('You have %d item.', 'You have %d items.', n) % n)
더 알아보기
- GNU gettext 도구와 mo 파일 형식 문서
- Python 표준 라이브러리의
locale모듈 - Python 공식 문서: gettext