GTK+에서의 국제화

그림 1. GTK+ 국제화의 현재 아키텍쳐

텍스트 처리

GTK+(그리고 GTK+를 사용하는 애플리케이션)에서 국제화 텍스트를 다룰 때 처리해야 하는 가장 기본적인 작업은 문자열 처리이다. GTK+ 인터페이스 하에서의 문자열은 각 로케일에 대한 멀티 바이트 인코딩으로 처리된다. 명시적으로 멀티 바이트 지원이 없는 기존의 애플리케이션과 호환성이 좋게 된다. 내부적으로 GTK+는 처리하기 편하게 하기 위해 이 문자열들을 와이드 캐릭터 문자열로 변환한다. 이런 기능이 필요한 애플리케이션을 위해 변환 루틴을 제공하고 있다.

입력

GTK+에서의 국제화 입력은 X 입력 방법 확장 기능(XIM, 역자 주 : 한글로 번역했으나 모두 이 번역 용어에 동의하지는 않으며 그냥 X 인풋 메쏘드라고 발음해버리고 만다.)을 사용하여 이뤄지고 있다. X 입력 방법 확장 기능은 X 윈도우 시스템 애플리케이션과 입력 방법(input methods) 간의 인터페이스이다. 입력 방법은 키 입력을 문자로 변환해준다. X 라이브러리에는 유럽 언어의 조합 키 입력을 처리해주는 간단한 내장 입력 방법이 들어있다. 아시아 언어와 같이 좀 더 복잡한 입력 방법은 보통 외부 프로그램을 통해 이루어진다.

XIM의 기본 아키텍쳐에 대해서는 GTK+에서의 국제화 섹션의 그림 1 을 보라. GTK+는 받아들인 키 입력을 Xlib을 통해 입력 방법에 전달한다. 그리고 완성된 입력 문자열을 받으면 사용자에게 표시한다. 그냥 표준 GTK+ 텍스트와 입력 위젯을 사용하는 애플리케이션 입장에서는 모든 것이 모르게 투명한 방식으로 처리되며 애플리케이션은 단지 마지막 문자열만을 볼 수 있을 뿐이다.

X 입력 방법 확장 기능은 이러한 기능들을 지원하고 있으며 중국어, 일본어, 한국어에 대한 입력 방법이 현재 있다. 그러나 XIM이 제공하고 있는 프로그래밍 인터페이스는 많은 문제점을 가지고 있다. 일 예로, 문자열을 교류할 때 현재 로케일에 대한 네이티브 인코딩을 사용하고 있으며 입력 방법 또한 현재의 로케일을 보고 선택하고 있다. 따라서 동시에 XIM을 사용하여 동시에 여러 언어에 대한 입력을 행하기 힘들다. 또한 XIM의 기능이 X의 이벤트 처리와 텍스트 문자열 모델에 매우 밀접하게 연관되어 있다. 자체적으로 문자열을 처리하는 애플리케이션(예를 들어, 일러스트레이션 프로그램)에서는 XIM을 쓰기 힘들 것이다.

출력

GTK+는 문자셋(font sets)을 사용하여 서로 다른 표현으로 된 문자열 출력을 처리한다. 문자셋이란 서로 다른 문자셋에 대한 X 폰트의 목록이다. 예를 들어 로만자와 CJK가 혼합된 텍스트를 그릴 때에는 필요한 두 개의 폰트를 여러 폰트셋으로부터 추출한다.

특정 위젯에 사용하는 폰트는 일반적으로 GTK+가 자원 설정(RC) 파일을 사용하여 결정한다. 시스템 전역 파일을 시스템 관리자가 설정하거나 추가로 사용자가 자신의 홈 디렉토리에 파일을 만들어 기존 설정을 무시하도록 할 수 있다. 이 메커니즘을 확장하여 심지어 사용자가 서로 다른 로케일을 전환하면서 사용할 수 있도록 각 로케일에 맞는 정확한 폰트를 처리하도록 하고 있다. GTK+가 RC 파일을 읽을 때는 --- 예를 들어, 사용자의 홈 디렉토리에 있는 .gtkrc -- 현재 로케일에 해당하는 확장자를 갖는 파일 또한 찾아본다. 만약 로케일이 ja_JP 라면 GTK+에서는 .gtkrc.ja라는 파일을 찾을 것이다. GTK+는 현재 일본어, 한국어, 러시아어에 대한 gtkrc 파일을 포함하고 있으며 필요에 따라 각 시스템 관리자가 만들어 쓸 수 있도록 하고 있다.