Update language change event handling code.
authorSung-jae Park <nicesj.park@samsung.com>
Sat, 11 May 2013 06:47:10 +0000 (15:47 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Mon, 13 May 2013 01:18:25 +0000 (10:18 +0900)
Change the env value too.
Region & Language is handles separately.

So I separate them using VCONFKEY like app-core.

Region & Lang.

Change-Id: Ie3079496c94fff85af8c92a57d2891c28d577ad1

src/setting.c

index 2955588..5f6bdaf 100644 (file)
@@ -81,16 +81,51 @@ static void power_off_cb(keynode_t *node, void *user_data)
        }
 }
 
+static void region_changed_cb(keynode_t *node, void *user_data)
+{
+        char *region;
+        char *r;
+
+        region = vconf_get_str(VCONFKEY_REGIONFORMAT);
+        if (!region)
+               return;
+
+       setenv("LC_CTYPE", region, 1);
+       setenv("LC_NUMERIC", region, 1);
+       setenv("LC_TIME", region, 1);
+       setenv("LC_COLLATE", region, 1);
+       setenv("LC_MONETARY", region, 1);
+       setenv("LC_PAPER", region, 1);
+       setenv("LC_NAME", region, 1);
+       setenv("LC_ADDRESS", region, 1);
+       setenv("LC_TELEPHONE", region, 1);
+       setenv("LC_MEASUREMENT", region, 1);
+       setenv("LC_IDENTIFICATION", region, 1);
+
+       r = setlocale(LC_ALL, "");
+       if (r == NULL)
+               ErrPrint("Failed to change region\n");
+
+       free(region);
+}
+
 static void lang_changed_cb(keynode_t *node, void *user_data)
 {
-       char *lang;
+        char *lang;
+               char *r;
 
-       lang = vconf_get_str(VCONFKEY_LANGSET);
-       if (!lang)
+        lang = vconf_get_str(VCONFKEY_LANGSET);
+        if (!lang)
                return;
 
-       setlocale(LC_ALL, lang);
-       DbgPrint("Lang changed: %s\n", lang);
+       setenv("LANG", lang, 1);
+       setenv("LC_MESSAGES", lang, 1);
+
+       r = setlocale(LC_ALL, "");
+       if (!r)
+               ErrPrint("Failed to change locale\n");
+
+       DbgPrint("Locale: %s\n", setlocale(LC_ALL, NULL));
        free(lang);
 }
 
@@ -100,17 +135,22 @@ HAPI int setting_init(void)
 
        ret = vconf_notify_key_changed(VCONFKEY_PM_STATE, lcd_state_cb, NULL);
        if (ret < 0)
-               ErrPrint("Failed to add vconf for lock state\n");
+               ErrPrint("Failed to add vconf for lock state: %d\n", ret);
 
        ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, power_off_cb, NULL);
        if (ret < 0)
-               ErrPrint("Failed to add vconf for power state\n");
+               ErrPrint("Failed to add vconf for power state: %d \n", ret);
 
        ret = vconf_notify_key_changed(VCONFKEY_LANGSET, lang_changed_cb, NULL);
        if (ret < 0)
-               ErrPrint("Failed to add vconf for lang change\n");
+               ErrPrint("Failed to add vconf for lang change: %d\n", ret);
+
+       ret = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT, region_changed_cb, NULL);
+       if (ret < 0)
+               ErrPrint("Failed to add vconf for region change: %d\n", ret);
 
        lang_changed_cb(NULL, NULL);
+       region_changed_cb(NULL, NULL);
        return ret;
 }
 
@@ -118,6 +158,10 @@ HAPI int setting_fini(void)
 {
        int ret;
 
+       ret = vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT, region_changed_cb);
+       if (ret < 0)
+               ErrPrint("Failed to ignore vconf key (%d)\n", ret);
+
        ret = vconf_ignore_key_changed(VCONFKEY_LANGSET, lang_changed_cb);
        if (ret < 0)
                ErrPrint("Failed to ignore vconf key (%d)\n", ret);
@@ -129,6 +173,7 @@ HAPI int setting_fini(void)
        ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, power_off_cb);
        if (ret < 0)
                ErrPrint("Failed to ignore vconf key (%d)\n", ret);
+
        return ret;
 }