From 80b062cf07c2c623914ab17fa7c0233593cac4b5 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sun, 18 Sep 2011 07:53:41 +0000 Subject: [PATCH] Elm gettext: Only translate if the app using elm is translatable. It assumes gettext is initialized before the call to elm_init. SVN revision: 63452 --- legacy/elementary/src/lib/elm_config.c | 21 +++++++++++++++++++++ legacy/elementary/src/lib/elm_priv.h | 17 ++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/legacy/elementary/src/lib/elm_config.c b/legacy/elementary/src/lib/elm_config.c index 3be17fa5a8..319a0d5728 100644 --- a/legacy/elementary/src/lib/elm_config.c +++ b/legacy/elementary/src/lib/elm_config.c @@ -1658,12 +1658,33 @@ elm_mirrored_set(Eina_Bool mirrored) _elm_rescale(); } +static void +_translation_init() +{ +#ifdef ENABLE_NLS + const char *cur_dom = textdomain(NULL); + const char *trans_comment = gettext(""); + const char *msg_locale = setlocale(LC_MESSAGES, NULL); + + /* Same concept as what glib does: + * We shouldn't translate if there are no translations for the + * application in the current locale + domain. (Unless locale is + * en_/C where translating only parts of the interface make some + * sense). + */ + _elm_config->translate = !(strcmp (cur_dom, "messages") && + !*trans_comment && strncmp (msg_locale, "en_", 3) && + strcmp (msg_locale, "C")); +#endif +} + void _elm_config_init(void) { _desc_init(); _profile_fetch_from_conf(); _config_load(); + _translation_init(); _env_get(); _config_apply(); _elm_config_font_overlay_apply(); diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index a866a2e1e5..e6ff20b458 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -28,7 +28,7 @@ #ifdef ENABLE_NLS # include -# define E_(string) dgettext(PACKAGE, string) +# define E_(string) _elm_dgettext(string) #else # define bindtextdomain(domain,dir) # define E_(string) (string) @@ -148,6 +148,7 @@ struct _Elm_Config /* Not part of the EET file */ Eina_Bool is_mirrored : 1; + Eina_Bool translate : 1; }; struct _Elm_Module @@ -247,6 +248,20 @@ extern int _elm_log_dom; extern Eina_List *_elm_win_list; extern int _elm_win_deferred_free; +/* Our gettext wrapper, used to disable translation of elm if the app + * is not translated. */ +static inline const char * +_elm_dgettext(const char *string) +{ + if (EINA_UNLIKELY(_elm_config->translate == EINA_FALSE)) + { + return string; + } + + return dgettext(PACKAGE, string); +} + + /* Used by the paste handler */ void _elm_entry_entry_paste(Evas_Object *obj, const char *entry);