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
This commit is contained in:
Tom Hacohen 2011-09-18 07:53:41 +00:00
parent b4c88023c6
commit 80b062cf07
2 changed files with 37 additions and 1 deletions

View File

@ -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();

View File

@ -28,7 +28,7 @@
#ifdef ENABLE_NLS
# include <libintl.h>
# 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);