Set locale based on LANG and LC_ALL environment variables set
[profile/ivi/lemolo.git] / dialer / gui.c
index 30500c0..b181804 100644 (file)
@@ -11,6 +11,7 @@
 #include "ussd.h"
 #include "util.h"
 #include "simple-popup.h"
+#include "i18n.h"
 
 #ifdef HAVE_TIZEN
 #include <appcore-efl.h>
@@ -32,6 +33,7 @@ static Evas_Object *current_view = NULL;
 static OFono_Callback_List_Modem_Node *callback_node_modem_changed = NULL;
 static OFono_Callback_List_USSD_Notify_Node *callback_node_ussd_notify = NULL;
 static AMB_Callback_List_Node *callback_node_amb_properties_changed = NULL;
+static Locale_Callback_List_Node *callback_node_locale_properties_changed = NULL;
 
 /* XXX elm_flip should just do the right thing, but it does not */
 static Eina_Bool in_call = EINA_FALSE;
@@ -52,9 +54,9 @@ static void _dial_reply(void *data, OFono_Error err,
        if (err != OFONO_ERROR_NONE) {
                char buf[1024];
                const char *msg = ofono_error_message_get(err);
-               snprintf(buf, sizeof(buf), "Could not call %s: %s",
+               snprintf(buf, sizeof(buf), _("Could not call %s: %s"),
                                number, msg);
-               gui_simple_popup("Error", buf);
+               gui_simple_popup(_("Error"), buf);
        }
 
        free(number);
@@ -66,6 +68,28 @@ OFono_Pending *gui_dial(const char *number)
        return ofono_dial(copy, NULL, _dial_reply, copy);
 }
 
+static void _gui_set_text(void)
+{
+       elm_object_part_text_set(cs, "label.hide-keypad", _("Hide Keypad"));
+       elm_object_part_text_set(cs, "label.answer", _("Answer"));
+       elm_object_part_text_set(cs, "label.hangup", _("Hangup"));
+       elm_object_part_text_set(cs, "label.multiparty", _("Conference"));
+       elm_object_part_text_set(cs, "label.multiparty-details-back", _("Back"));
+       elm_object_part_text_set(cs, "label.waiting", _("Waiting..."));
+       elm_object_part_text_set(cs, "elm.text.name", _("Unknown"));
+       elm_object_part_text_set(cs, "elm.text.waiting", _("Unknown"));
+
+       elm_object_part_text_set(keypad, "label.all", _("Decline"));
+       elm_object_part_text_set(keypad, "label.missed", _("Hold + Answer"));
+       elm_object_part_text_set(keypad, "label.clear", _("Hangup + Answer"));
+       elm_object_part_text_set(keypad, "label.edit,done", _("Redial"));
+
+       elm_object_part_text_set(history, "label.all", _("All"));
+       elm_object_part_text_set(history, "label.missed", _("Missed"));
+       elm_object_part_text_set(history, "label.clear", _("Clear"));
+       elm_object_part_text_set(history, "label.edit,done", _("Done"));
+}
+
 static void _gui_show(Evas_Object *o)
 {
        Last_User_Mode *last;
@@ -187,6 +211,12 @@ static void _gui_quit(void)
        elm_exit();
 }
 
+static void _on_del(void *data __UNUSED__, Evas *e __UNUSED__,
+                        Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+       _gui_quit();
+}
+
 static void _on_clicked(void *data __UNUSED__, Evas_Object *o __UNUSED__,
                        const char *emission, const char *source __UNUSED__)
 {
@@ -263,6 +293,20 @@ static void _amb_properties_changed(void *data __UNUSED__)
        }
 }
 
+static void _locale_properties_changed(void *data __UNUSED__)
+{
+       const char *new_lang = locale_lang_get();
+       if (new_lang) {
+               if (strncmp(new_lang, "LANG=", 5) == 0)
+                       new_lang += 5;
+
+               DBG("Switching UI language to %s", new_lang);
+               setenv ("LANG", new_lang, 1);
+               setlocale (LC_ALL, new_lang);
+               _gui_set_text();
+       }
+}
+
 static void _ofono_ussd_notify(void *data __UNUSED__, Eina_Bool needs_reply,
                                const char *message)
 {
@@ -313,21 +357,34 @@ Eina_Bool gui_init(void)
 {
        Evas_Object *lay, *obj;
        Evas_Coord w, h;
+       const char *lang;
 
        /* dialer should never, ever quit */
-       elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_NONE);
+       elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
 
        win = elm_win_util_standard_add("ofono-dialer", "oFono Dialer");
        EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
-       elm_win_autodel_set(win, EINA_FALSE);
+       elm_win_autodel_set(win, EINA_TRUE);
+       evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _on_del, NULL);
 
 #ifdef HAVE_TIZEN
-       appcore_set_i18n("ofono-efl", "en-US");
 #ifdef HAVE_UI_GADGET
        UG_INIT_EFL(win, UG_OPT_INDICATOR_PORTRAIT_ONLY);
 #endif
 #endif
 
+       /*
+        * check LANG and LC_ALL environment variables,
+        * LC_ALL takes precedence
+        */
+       lang = getenv("LC_ALL");
+       if (!lang)
+               lang = getenv("LANG");
+
+       setlocale(LC_ALL, lang);
+       bindtextdomain(PACKAGE, LOCALEDIR);
+       textdomain(PACKAGE);
+
        flip = elm_flip_add(win);
        evas_object_size_hint_weight_set(flip,
                                EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -370,6 +427,7 @@ Eina_Bool gui_init(void)
        elm_object_part_content_set(flip, "back", obj);
        evas_object_show(obj);
 
+       _gui_set_text();
        _load_last_user_view();
 
        callback_node_modem_changed =
@@ -378,6 +436,8 @@ Eina_Bool gui_init(void)
                ofono_ussd_notify_cb_add(_ofono_ussd_notify, NULL);
        callback_node_amb_properties_changed =
                amb_properties_changed_cb_add(_amb_properties_changed, NULL);
+       callback_node_locale_properties_changed =
+               locale_properties_changed_cb_add(_locale_properties_changed, NULL);
 
        /* TODO: make it match better with Tizen: icon and other properties */
        obj = elm_layout_edje_get(lay);