Fix getting locale resource path
[platform/core/appfw/appcore-widget.git] / src / widget-i18n.c
index 0fbd2be..c739dd8 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2015 - 2016 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the License);
  * you may not use this file except in compliance with the License.
 #include "widget-log.h"
 #include "widget-private.h"
 
+#define PATH_LOCALE "locale"
+
 void _update_lang(void)
 {
+       char *r;
        char *lang = vconf_get_str(VCONFKEY_LANGSET);
        if (lang) {
                setenv("LANG", lang, 1);
                setenv("LC_MESSAGES", lang, 1);
 
-               char *r = setlocale(LC_ALL, "");
+               r = setlocale(LC_ALL, "");
                if (r == NULL) {
                        r = setlocale(LC_ALL, lang);
-
                        if (r)
                                _D("*****appcore setlocale=%s\n", r);
-
                }
                free(lang);
        } else {
@@ -70,8 +71,8 @@ void _update_region(void)
                setenv("LC_TELEPHONE", region, 1);
                setenv("LC_MEASUREMENT", region, 1);
                setenv("LC_IDENTIFICATION", region, 1);
-               r = setlocale(LC_ALL, "");
 
+               r = setlocale(LC_ALL, "");
                if (r != NULL)
                        _D("*****appcore setlocale=%s\n", r);
 
@@ -81,75 +82,52 @@ void _update_region(void)
        }
 }
 
-static int __read_proc(const char *path, char *buf, int size)
+static int __get_locale_resource_dir(char *locale_dir, int size)
 {
-       int fd;
-       int ret;
+       const char *res_path;
 
-       if (buf == NULL || path == NULL)
-               return -1;
-
-       fd = open(path, O_RDONLY);
-       if (fd < 0)
+       res_path = aul_get_app_resource_path();
+       if (res_path == NULL) {
+               _E("Failed to get resource path");
                return -1;
+       }
 
-       ret = read(fd, buf, size - 1);
-       if (ret <= 0) {
-               close(fd);
+       snprintf(locale_dir, size, "%s" PATH_LOCALE, res_path);
+       if (access(locale_dir, R_OK) != 0)
                return -1;
-       } else
-               buf[ret] = 0;
 
-       close(fd);
-
-       return ret;
-}
-
-static char* __proc_get_cmdline()
-{
-#define MAX_CMD_BUFSZ 1024
-
-       char buf[MAX_CMD_BUFSZ];
-       int ret;
-
-       snprintf(buf, sizeof(buf), "/proc/%d/cmdline", getpid());
-       ret = __read_proc(buf, buf, sizeof(buf));
-       if (ret <= 0)
-               return NULL;
-
-       return strdup(buf);
+       return 0;
 }
 
 static int __set_i18n(const char *domain)
 {
        char *r;
-       char dirname[PATH_MAX] = {0, };
+       char locale_dir[PATH_MAX];
+       char *lang;
 
        if (domain == NULL) {
                errno = EINVAL;
                return -1;
        }
 
-       snprintf(dirname, PATH_MAX, "%s/res/locale", aul_get_app_root_path());
-       _D("locale dir: %s", dirname);
+       __get_locale_resource_dir(locale_dir, sizeof(locale_dir));
+       _D("locale dir: %s", locale_dir);
 
        r = setlocale(LC_ALL, "");
        /* if locale is not set properly, try again to set as language base */
        if (r == NULL) {
-               char *lang = vconf_get_str(VCONFKEY_LANGSET);
+               lang = vconf_get_str(VCONFKEY_LANGSET);
                r = setlocale(LC_ALL, lang);
-
                if (r)
                        _D("*****appcore setlocale=%s\n", r);
 
                if (lang)
                        free(lang);
-
        }
        if (r == NULL)
                _E("appcore: setlocale() error");
 
-       r = bindtextdomain(domain, dirname);
+       r = bindtextdomain(domain, locale_dir);
        if (r == NULL)
                _E("appcore: bindtextdomain() error");