월요일, 11월 03, 2008

Windows CE에서 Arabic locale 사용하기 (아랍어 build)

아랍어와 같이 문자가 입력됨에 따라 문자들이 오른쪽에서 왼쪽으로 layout되면서, 인근 문자와 합쳐져서 새로운 문자가 생겨지는 형태의 경우, 단순히 platform settings에서 locale 선택, default language 선택, 그리고 catalog에서 font 선택, keyboard layout 선택만으로는 적절한 locale resource와 input language가 반영되게 할 수 없다.
이런 경우 "Unicode processor for complex scripts" catalog item이 포함되어야 한다.

또 아랍어의 경우 localized resource file이 있지 않다. 즉 common/oak/files/intltrns에는 아랍(사우디아라비아)의 LCID인 0401의 folder가 존재하지 않는다. 예를 들어 사우디아라비아 아랍어 locale을 사용할 경우 사우디아라비아 아랍어로 locale과 default language를 선택한 후, localize the build를 선택하여도 localized resource file이 없기때문에 makeimg단계에서 error를 발생시키며 (fail되는 것은 아니다) default locale인 English(U.S) resource를 사용하여 build된다.
차라리 localize the build를 선택하지 말고 (이 경우 U.S English UI와 사우디아라비아 아랍어 local funtionality를 갖는 OS image가 생성된다) common/oak/files/intltrns/0401 라는 folder를 만든 후 English(U.S)인 0409 folder에서 common.str을 0401 folder로 copy한다. 그 다음에 0401 folder의 common.str를 다음과 같이 수정한다.

#define LOC_LCID ~"401"
#define LOC_ACP ~"4e8"
#define LOC_HKL_DEFAULT "00000401"

LOC_LCID는 사우디아라비아 아랍어의 LCID인 0x0401, LOC_ACP는 사우디아라비아 아랍어의 default code page인 1256의 hex 값, LOC_HKL_DEFAULT는 아랍어의 keyboard layout handle을 입력하게 된다. 여기서 LOC_HKL_DEFAULT에 입력되는 값이 default input language가 된다. 즉 keyboard 입력이 아랍어로 설정되는 것이다.

이렇게 하면 이 값을 받아서 preload keyboard layout이 registry에 다음과 같이 생성된다.

[HKEY_CURRENT_USER\Keyboard Layout\Preload]
@="00000401"

[HKEY_CURRENT_USER\Keyboard Layout\Preload\1]
@="00000401"

이렇게 만들어진 OS image는 IME가 없어서 사우디아라비아 아랍어와 미국 영어 locale을 함께 선택했다고 해도 아랍어만 입력시킬 수 있고 영문 입력은 불가능하다.
한글과 같은 경우 IME에 의해서 영문입력이 가능하지만 아랍어는 IME가 없어서 위와 같은 상황에서는 영어 입력이 안된다. 이 경우 추가 keyboard layout을 registry에서 따로 추가해 줘야 한다.

여기서 위의 registry를 좀더 설명하자면
[HKEY_CURRENT_USER\Keyboard Layout\Preload]는 default preload keyboard layout을 나타내고 [HKEY_CURRENT_USER\Keyboard Layout\Preload\]은 preload keyboard layout을 나타낸다. 이 중 Preload value 1 즉 [HKEY_CURRENT_USER\Keyboard Layout\Preload\1]은 역시 default preload keyboard layout으로 [HKEY_CURRENT_USER\Keyboard Layout\Preload]와 같은 값을 가져야 한다.

영어 입력을 가능하게 하려면 영어 keyboard layout을 preload해야 하며 다음과 같이 registry를 추가해 줘야한다.

[HKEY_CURRENT_USER\Keyboard Layout\Preload]
@="00000401"

[HKEY_CURRENT_USER\Keyboard Layout\Preload\1]
@="00000401"

[HKEY_CURRENT_USER\Keyboard Layout\Preload\2]
@="00000409"

이렇게 하면 booting 직후는 아랍어 입력상태로 있다가 ALT + Shift로 input language를 전환하면 영문 입력상태로 전환된다.
만일 영문입력을 기존으로 하고 아랍어 입력은 필요시마다 전환해서 사용하려면 다음과 같이 하면 될 것이다.

[HKEY_CURRENT_USER\Keyboard Layout\Preload]
@="00000409"

[HKEY_CURRENT_USER\Keyboard Layout\Preload\1]
@="00000409"

[HKEY_CURRENT_USER\Keyboard Layout\Preload\2]
@="00000401"

또 아랍어에서 하듯이 오른쪽에서 왼쪽방향으로 입력하려면 Ctrl + 왼쪽 Shift, 원래대로 왼쪽에서 오른쪽으로 입력하려면 Ctrl + 오른쪽 Shift를 사용하면 된다.