Support language change in runtime 72/211572/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 6 Aug 2019 23:49:55 +0000 (08:49 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 6 Aug 2019 23:53:28 +0000 (08:53 +0900)
Change-Id: Ifc011ae0998ae94ae62f6942d45d8be923f27d88
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
im_setting_list/input_method_setting_list.cpp
im_setting_list/input_method_setting_list_popup_view.cpp
im_setting_list/input_method_setting_list_ui.cpp
im_setting_selector/input_method_setting_selector.cpp
im_setting_selector/input_method_setting_selector_ui.cpp

index bd3c5d3..5186afb 100644 (file)
@@ -128,8 +128,16 @@ app_terminate(void *data)
 static void
 ui_app_lang_changed(app_event_info_h event_info, void *user_data)
 {
-    LOGD("");
     /*APP_EVENT_LANGUAGE_CHANGED*/
+    char *lang = NULL;
+    app_event_get_language(event_info, &lang);
+
+    LOGD("lang : %s", lang);
+
+    if (lang) {
+        elm_language_set(lang);
+        free(lang);
+    }
 }
 
 static void
index 300a95d..b50caab 100644 (file)
@@ -24,8 +24,7 @@
 #include <algorithm>
 #include <inputmethod_manager.h>
 
-#define IM_SETTING_LIST_POPUP_VIEW_TITLE          dgettext(PACKAGE, "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB")
-#define IM_SETTING_SELECT_KEYBOARD                dgettext(PACKAGE, "IDS_IME_BODY_SELECT_KEYBOARD")
+#define IM_SETTING_LIST_POPUP_VIEW_TITLE          "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB"
 
 static std::vector<ime_info_s>      g_active_ime_info_list;
 static Elm_Genlist_Item_Class       *itc_im_list = NULL;
@@ -188,6 +187,13 @@ static void im_setting_list_ime_sel_cb(void *data, Evas_Object *obj, void *event
     ecore_idler_add(_ime_select_idler_cb, ad);
 }
 
+static void gl_lang_changed(void *data, Evas_Object *obj, void *event_info)
+{
+    im_setting_list_load_active_ime_info();
+
+    elm_genlist_realized_items_update(obj);
+}
+
 static Evas_Object *im_setting_list_genlist_create(appdata *ad, Evas_Object* parent, Evas_Object* conform)
 {
     if (!parent)
@@ -204,6 +210,7 @@ static Evas_Object *im_setting_list_genlist_create(appdata *ad, Evas_Object* par
     evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
     elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE);
+    evas_object_smart_callback_add(genlist, "language,changed", gl_lang_changed, NULL);
     evas_object_show(genlist);
     return genlist;
 }
@@ -348,7 +355,7 @@ static Evas_Object *im_setting_list_popup_create(void *data)
     Evas_Object *popup = elm_popup_add(parentWin);
     elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
     evas_object_smart_callback_add(popup, "block,clicked", im_setting_list_popup_block_clicked_cb, data);
-    elm_object_part_text_set(popup, "title,text", IM_SETTING_LIST_POPUP_VIEW_TITLE);
+    elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE, IM_SETTING_LIST_POPUP_VIEW_TITLE);
     elm_object_style_set(popup, "theme_bg");
     eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, im_setting_list_popup_view_back_cb, data);
     ad->popup = popup;
@@ -364,7 +371,7 @@ static Evas_Object *im_setting_list_popup_create(void *data)
 static char *
 im_setting_list_default_keyboard_title_text_get(void *data, Evas_Object *obj, const char *part)
 {
-    return strdup(IM_SETTING_LIST_POPUP_VIEW_TITLE);
+    return strdup(dgettext(PACKAGE, IM_SETTING_LIST_POPUP_VIEW_TITLE));
 }
 
 static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
@@ -427,7 +434,7 @@ static void im_setting_list_screen_create(void *data)
 
     Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->naviframe, NULL, NULL, NULL, genlist, "empty");
 #ifdef _WEARABLE
-    elm_atspi_accessible_name_set(navi_it, IM_SETTING_LIST_POPUP_VIEW_TITLE);
+    elm_atspi_accessible_name_set(navi_it, dgettext(PACKAGE, IM_SETTING_LIST_POPUP_VIEW_TITLE));
 #endif
     elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, ad);
 }
index 5311c14..9072732 100644 (file)
 
 #define IM_SETTING_LIST_PACKAGE                 PACKAGE
 #define IM_SETTING_LIST_LOCALE_DIR              tzplatform_mkpath(TZ_SYS_RO_APP, PACKAGE_NAME"/res/locale")
-#define IM_SETTING_LIST_TITLE                   dgettext(PACKAGE, "IDS_IME_BODY_KEYBOARD")
-#define IM_SETTING_LIST_KEYBOARD_HEADER         dgettext(PACKAGE, "IDS_ST_HEADER_KEYBOARDS")
-#define IM_SETTING_LIST_POPUP_TITLE             dgettext(PACKAGE, "IDS_ST_BODY_ATTENTION")
-#define IM_SETTING_LIST_POPUP_CANCEL            dgettext(PACKAGE, "IDS_COM_SK_CANCEL_ABB")
-#define IM_SETTING_LIST_POPUP_ENABLE            dgettext(PACKAGE, "IDS_ST_BUTTON_ENABLE")
-#define IM_SETTING_LIST_VIRTUAL_KEYBOARD        dgettext(PACKAGE, "IDS_ST_HEADER_VIRTUAL_KEYBOARD")
-#define IM_SETTING_LIST_DEFAULT_KEYBOARD        dgettext(PACKAGE, "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB")
-#define IM_SETTING_LIST_KEYBOARD_SETTING        dgettext(PACKAGE, "IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB")
-#define IM_SETTING_LIST_TURNON_KEYBOARD         dgettext(PACKAGE, "IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB")
-#define IM_SETTING_LIST_TURNON                  dgettext(PACKAGE, "IDS_ST_BUTTON_TURN_ON_ABB3")
+#define IM_SETTING_LIST_TITLE                   "IDS_IME_BODY_KEYBOARD"
+#define IM_SETTING_LIST_KEYBOARD_HEADER         "IDS_ST_HEADER_KEYBOARDS"
+#define IM_SETTING_LIST_POPUP_TITLE             "IDS_ST_BODY_ATTENTION"
+#define IM_SETTING_LIST_POPUP_CANCEL            "IDS_COM_SK_CANCEL_ABB"
+#define IM_SETTING_LIST_POPUP_ENABLE            "IDS_ST_BUTTON_ENABLE"
+#define IM_SETTING_LIST_VIRTUAL_KEYBOARD        "IDS_ST_HEADER_VIRTUAL_KEYBOARD"
+#define IM_SETTING_LIST_DEFAULT_KEYBOARD        "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB"
+#define IM_SETTING_LIST_KEYBOARD_SETTING        "IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB"
+#define IM_SETTING_LIST_TURNON_KEYBOARD         "IDS_ST_BUTTON_TURN_ON_KEYBOARD_ABB"
+#define IM_SETTING_LIST_TURNON                  "IDS_ST_BUTTON_TURN_ON_ABB3"
 #define IM_SETTING_LIST_POPUP_TEXT              dgettext(PACKAGE, "IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE"\
                                                                   "_TEXT_YOU_TYPE_INCLUDING_PERSONAL_DATA_LIKE_PASSWORDS_AND"\
                                                                   "_CREDIT_CARD_NUMBERS_MSG")
@@ -263,6 +263,21 @@ static void _popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_inf
     delete cb_data;
 }
 
+static void set_popup_message(Evas_Object *obj, int index)
+{
+    char chFormatMsg[255] = {'\0'};
+    char chPopupMsg[255] = {'\0'};
+    snprintf(chFormatMsg, sizeof(chFormatMsg), "%s", IM_SETTING_LIST_POPUP_TEXT);
+    snprintf(chPopupMsg, sizeof(chPopupMsg), chFormatMsg, g_ime_info_list[index].label);
+    elm_object_text_set(obj, chPopupMsg);
+}
+
+static void popup_lang_changed(void *data, Evas_Object *obj, void *event_info)
+{
+    int index = (int)data;
+    set_popup_message(obj, index);
+}
+
 static void im_setting_list_show_popup(void *data, Evas_Object *obj, popup_ok_cb ime_setting_list_ok_callback, popup_cancel_cb ime_setting_list_cancel_callback)
 {
     int index = (int)reinterpret_cast<long>(data);
@@ -274,25 +289,22 @@ static void im_setting_list_show_popup(void *data, Evas_Object *obj, popup_ok_cb
     Evas_Object *top_widget = elm_object_top_widget_get(obj);
     Evas_Object *popup = elm_popup_add(top_widget);
     elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
-    elm_object_part_text_set(popup, "title,text", IM_SETTING_LIST_TURNON_KEYBOARD);
+    elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE, IM_SETTING_LIST_TURNON_KEYBOARD);
+    evas_object_smart_callback_add(popup, "language,changed", popup_lang_changed, (void *)index);
 
-    char chFormatMsg[255] = {'\0'};
-    char chPopupMsg[255] = {'\0'};
-    snprintf(chFormatMsg, sizeof(chFormatMsg), "%s", IM_SETTING_LIST_POPUP_TEXT);
-    snprintf(chPopupMsg, sizeof(chPopupMsg), chFormatMsg, g_ime_info_list[index].label);
-    elm_object_text_set(popup, chPopupMsg);
+    set_popup_message(popup, index);
 
     popup_cb_data *cb_data = new popup_cb_data;
     cb_data->popup = popup;
     cb_data->data = data;
 
     Evas_Object *btn_cancel = elm_button_add(popup);
-    elm_object_text_set(btn_cancel, IM_SETTING_LIST_POPUP_CANCEL);
+    elm_object_domain_translatable_text_set(btn_cancel, PACKAGE, IM_SETTING_LIST_POPUP_CANCEL);
     elm_object_part_content_set(popup, "button1", btn_cancel);
     evas_object_smart_callback_add(btn_cancel, "clicked", ime_setting_list_cancel_callback, cb_data);
 
     Evas_Object *btn_ok = elm_button_add(popup);
-    elm_object_text_set(btn_ok, IM_SETTING_LIST_TURNON);
+    elm_object_domain_translatable_text_set(btn_ok, PACKAGE, IM_SETTING_LIST_TURNON);
     elm_object_part_content_set(popup, "button2", btn_ok);
     evas_object_smart_callback_add(btn_ok, "clicked", ime_setting_list_ok_callback, cb_data);
 
@@ -463,6 +475,17 @@ static Evas_Object *im_setting_list_naviframe_create(Evas_Object* parent)
     return naviframe;
 }
 
+static void gl_lang_changed(void *data, Evas_Object *obj, void *event_info)
+{
+    /* Reload ime list for getting translated IME name */
+    im_setting_list_load_ime_info();
+
+    /* Set translated active IME name */
+    snprintf(item_text[0].sub_text, sizeof(item_text[0].sub_text), "%s", g_ime_info_list[g_active_ime_index].label);
+
+    elm_genlist_realized_items_update(obj);
+}
+
 static Evas_Object *im_setting_list_genlist_create(appdata *ad)
 {
     Evas_Object *genlist = elm_genlist_add(ad->naviframe);
@@ -474,6 +497,7 @@ static Evas_Object *im_setting_list_genlist_create(appdata *ad)
     ad->main_circle_genlist = eext_circle_object_genlist_add(genlist, ad->circle_surface);
     eext_rotary_object_event_activated_set(ad->main_circle_genlist, EINA_TRUE);
 #endif
+    evas_object_smart_callback_add(genlist, "language,changed", gl_lang_changed, NULL);
     evas_object_show(genlist);
     return genlist;
 }
@@ -484,7 +508,7 @@ static char *im_setting_list_genlist_group_label_get(void *data, Evas_Object *ob
     if (!text)
         return NULL;
     if (!strcmp(part, "elm.text")) {
-        return strdup(text);
+        return strdup(dgettext(PACKAGE, text));
     }
     return NULL;
 }
@@ -519,7 +543,7 @@ static char *im_setting_list_genlist_keyboard_list_item_label_get(void *data, Ev
 static char *im_setting_list_genlist_title_label_get(void *data, Evas_Object *obj, const char *part)
 {
     if (!strcmp(part, "elm.text")) {
-        return strdup(IM_SETTING_LIST_TITLE);
+        return strdup(dgettext(PACKAGE, IM_SETTING_LIST_TITLE));
     }
     return NULL;
 }
@@ -571,14 +595,14 @@ static char *im_setting_list_genlist_item_label_get(void *data, Evas_Object *obj
         !strcmp(part, "elm.text.main.left") ||
         !strcmp(part, "elm.text.main") ||
         !strcmp(part, "elm.text")) {
-        return strdup(item_text->main_text);
+        return strdup(dgettext(PACKAGE, item_text->main_text));
     }
     if (!strcmp(part, "elm.text.sub") ||
         !strcmp(part, "elm.text.sub.left.bottom") ||
         !strcmp(part, "elm.text.multiline") ||
         !strcmp(part, "elm.text.1") ||
         !strcmp(part, "elm.text.2")) {
-        return strdup(item_text->sub_text);
+        return strdup(dgettext(PACKAGE, item_text->sub_text));
     }
     return NULL;
 }
@@ -593,7 +617,7 @@ static char *im_setting_list_genlist_item_one_line_label_get(void *data, Evas_Ob
         !strcmp(part, "elm.text.main") ||
         !strcmp(part, "elm.text") ||
         !strcmp(part, "elm.text.1")) {
-        return strdup(item_text->main_text);
+        return strdup(dgettext(PACKAGE, item_text->main_text));
     }
     return NULL;
 }
@@ -720,6 +744,8 @@ static void im_setting_list_add_ime(void *data) {
             im_setting_list_set_default_keyboard_item_sel_cb,
             data);
 
+        elm_object_item_domain_text_translatable_set(item, PACKAGE, EINA_TRUE);
+
 #ifdef _WEARABLE
         if (g_ime_info_list.size() <= 1) {
             LOGD("The number of IME : %zu\n", g_ime_info_list.size());
@@ -736,6 +762,7 @@ static void im_setting_list_add_ime(void *data) {
             ELM_GENLIST_ITEM_NONE,
             im_setting_list_keyboard_setting_item_sel_cb,
             ad);
+        elm_object_item_domain_text_translatable_set(item, PACKAGE, EINA_TRUE);
 
         elm_object_item_disabled_set(item, !(g_ime_info_list[g_active_ime_index].has_option));
 
@@ -750,6 +777,7 @@ static void im_setting_list_add_ime(void *data) {
                 NULL,
                 NULL);
         elm_genlist_item_select_mode_set(group_header_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+        elm_object_item_domain_text_translatable_set(group_header_item, PACKAGE, EINA_TRUE);
 #endif
     }
 
@@ -859,6 +887,8 @@ Evas_Object *im_setting_list_list_create(void *data)
                 ad->genlist,
                 item_style);
 
+    elm_object_item_domain_text_translatable_set(nf_main_item, PACKAGE, EINA_TRUE);
+
     elm_naviframe_item_title_enabled_set(nf_main_item, EINA_TRUE, EINA_TRUE);
     elm_naviframe_item_pop_cb_set(nf_main_item, im_setting_list_navi_item_pop_cb, ad);
     elm_object_content_set(ad->conform, ad->naviframe);
index b52681a..b9c957f 100644 (file)
@@ -89,8 +89,16 @@ app_terminate(void *data)
 static void
 ui_app_lang_changed(app_event_info_h event_info, void *user_data)
 {
-    LOGD("");
     /*APP_EVENT_LANGUAGE_CHANGED*/
+    char *lang = NULL;
+    app_event_get_language(event_info, &lang);
+
+    LOGD("lang : %s", lang);
+
+    if (lang) {
+        elm_language_set(lang);
+        free(lang);
+    }
 }
 
 static void
index 68c0fc2..a22245d 100644 (file)
@@ -25,8 +25,8 @@
 
 #define IM_SETTING_SELECTOR_PACKAGE        PACKAGE
 #define IM_SETTING_SELECTOR_LOCALE_DIR     tzplatform_mkpath(TZ_SYS_RO_APP, PACKAGE_NAME"/res/locale")
-#define IM_SETTING_SELECTOR_TITLE          dgettext(PACKAGE, "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB")
-#define IM_SETTING_SELECT_KEYBOARD         dgettext(PACKAGE, "IDS_IME_BODY_SELECT_KEYBOARD")
+#define IM_SETTING_SELECTOR_TITLE          "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB"
+#define IM_SETTING_SELECT_KEYBOARD         "IDS_IME_BODY_SELECT_KEYBOARD"
 
 static std::vector<ime_info_s>      g_ime_info_list;
 static Elm_Genlist_Item_Class       *itc_im_selector = NULL;
@@ -382,7 +382,7 @@ Evas_Object *im_setting_selector_popup_create(void *data)
     ad->popup = elm_popup_add(ad->win);
     elm_popup_align_set(ad->popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
     evas_object_smart_callback_add(ad->popup, "block,clicked", im_setting_selector_popup_block_clicked_cb, NULL);
-    elm_object_part_text_set(ad->popup, "title,text", IM_SETTING_SELECTOR_TITLE);
+    elm_object_domain_translatable_part_text_set(ad->popup, "title,text", PACKAGE, IM_SETTING_SELECTOR_TITLE);
 
     ad->naviframe = im_setting_selector_naviframe_create(ad->win);
     ad->genlist = im_setting_selector_list_create(data);
@@ -399,7 +399,7 @@ Evas_Object *im_setting_selector_popup_create(void *data)
 
     if (APP_TYPE_NORMAL == ad->app_type) {
         Evas_Object *btn = elm_button_add(ad->popup);
-        elm_object_text_set(btn, IM_SETTING_SELECT_KEYBOARD);
+        elm_object_domain_translatable_text_set(btn, PACKAGE, IM_SETTING_SELECT_KEYBOARD);
         elm_object_part_content_set(ad->popup, "button1", btn);
         evas_object_smart_callback_add(btn, "clicked", im_setting_selector_select_keyboard_cb, ad);
     }
@@ -414,7 +414,7 @@ Evas_Object *im_setting_selector_popup_create(void *data)
 static char *
 im_setting_selector_title_text_get(void *data, Evas_Object *obj, const char *part)
 {
-    return strdup(IM_SETTING_SELECTOR_TITLE);
+    return strdup(dgettext(PACKAGE, IM_SETTING_SELECTOR_TITLE));
 }
 
 static Evas_Object *im_setting_selector_conform_create(Evas_Object *parentWin)
@@ -496,7 +496,7 @@ static void im_setting_selector_screen_create(void *data)
     elm_naviframe_item_pop_cb_set(navi_it, _naviframe_pop_cb, ad);
 
 #ifdef _WEARABLE
-    elm_atspi_accessible_name_set(ad->naviframe, IM_SETTING_SELECTOR_TITLE);
+    elm_atspi_accessible_name_set(ad->naviframe, dgettext(PACKAGE, IM_SETTING_SELECTOR_TITLE));
 #endif
 }
 #endif