From 36dea55f9c1cd6498e9ff3bda8ce9076a0ff5942 Mon Sep 17 00:00:00 2001 From: Choe Hwanjin Date: Wed, 29 Dec 2010 23:30:34 +0900 Subject: =?UTF-8?q?hangul=5Fic=5Fget=5Fkeyboard=5Fname()=EC=9D=98=20?= =?UTF-8?q?=EB=A6=AC=ED=84=B4=EA=B0=92=EC=9D=84=20=EB=A1=9C=EC=BA=98?= =?UTF-8?q?=EC=97=90=20=EA=B4=80=EA=B3=84=EC=97=86=EC=9D=B4=20UTF-8?= =?UTF-8?q?=EB=A1=9C=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hangul_ic_get_keyboard_name() 함수의 리턴값을 사용하는 곳의 대부분이 UTF-8인 경우에 더 사용하기 편리하다. nabi, ibus, scim, imhangul 등의 경우 결국 스트링을 UTF-8로 변환해야 하므로 여기에서 UTF-8을 리턴하면 코딩이 더 편리해진다. 단 tools/hangul.c 에서는 locale에 따른 변환을 해주어야 하므로 약간 더 불편해지기는 하지만, 나머지에서 수정할 내용이 줄어들므로 이 편이 더 낫다. git-svn-id: http://kldp.net/svn/hangul/libhangul/trunk@252 8f00fcd2-89fc-0310-932e-b01be5b65e01 --- configure.ac | 2 ++ hangul/hangulinputcontext.c | 1 + tools/hangul.c | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/configure.ac b/configure.ac index d8bb0fd..d8f622c 100644 --- a/configure.ac +++ b/configure.ac @@ -27,6 +27,7 @@ AC_PROG_INSTALL # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h string.h limits.h]) +AC_CHECK_HEADERS([langinfo.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL @@ -41,6 +42,7 @@ AC_FUNC_MMAP AC_FUNC_REALLOC AC_CHECK_FUNCS([munmap]) AC_CHECK_FUNCS([strcasecmp]) +AC_CHECK_FUNCS([nl_langinfo]) # Checks for gettext stuff GETTEXT_PACKAGE="$PACKAGE" diff --git a/hangul/hangulinputcontext.c b/hangul/hangulinputcontext.c index 8f472d6..d112263 100644 --- a/hangul/hangulinputcontext.c +++ b/hangul/hangulinputcontext.c @@ -1842,6 +1842,7 @@ hangul_ic_get_keyboard_name(unsigned index_) if (!isGettextInitialized) { isGettextInitialized = true; bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); } #endif diff --git a/tools/hangul.c b/tools/hangul.c index 9fe6bf3..7d8057f 100644 --- a/tools/hangul.c +++ b/tools/hangul.c @@ -11,6 +11,10 @@ #include #include +#ifdef HAVE_LANGINFO_H +#include +#endif + #include #include "../hangul/hangul.h" @@ -98,6 +102,24 @@ list_keyboards() unsigned n; n = hangul_ic_get_n_keyboards(); + +#if defined(ENABLE_NLS) && defined(HAVE_NL_LANGINFO) + if (n > 0) { + // hangul_ic_get_keyboard_name() 함수가 UTF-8 스트링으로 리턴하므로 + // 여기서는 locale 인코딩으로 변환해야 한다. + // 그런데 iconv를 호출하여 변환하기가 번거로우므로 + // bind_textdomain_codeset을 다시 호출하여 gettext가 리턴하는 스트링의 + // 인코딩을 바꿔준다. 이렇게 하기 위해서는 + // hangul_ic_get_keyboard_name()을 먼저 호출하여 + // bind_textdomain_codeset() 함수가 불린후 다시 설정하도록 한다. + const char* codeset = nl_langinfo(CODESET); + if (codeset != NULL) { + hangul_ic_get_keyboard_name(0); + bind_textdomain_codeset(GETTEXT_PACKAGE, codeset); + } + } +#endif + for (i = 0; i < n; ++i) { const char* id; const char* name; -- cgit v1.2.1