forked from enlightenment/enlightenment
Revert "revert local changes - tasn doent seem to be any happier."
It does make me happier! This reverts commit 61044. SVN revision: 61048
This commit is contained in:
parent
44163246bf
commit
241b27fd8d
|
@ -39,7 +39,7 @@ static Eina_Hash *_e_intl_locale_alias_hash_get(void);
|
||||||
static char *_e_intl_locale_alias_get(const char *language);
|
static char *_e_intl_locale_alias_get(const char *language);
|
||||||
static Eina_List *_e_intl_locale_system_locales_get(void);
|
static Eina_List *_e_intl_locale_system_locales_get(void);
|
||||||
static Eina_List *_e_intl_locale_search_order_get(const char *locale);
|
static Eina_List *_e_intl_locale_search_order_get(const char *locale);
|
||||||
static int _e_intl_locale_validate(const char *locale);
|
static int _e_intl_locale_validate(const char *locale, char **chset);
|
||||||
static void _e_intl_locale_hash_free(Eina_Hash *language_hash);
|
static void _e_intl_locale_hash_free(Eina_Hash *language_hash);
|
||||||
static Eina_Bool _e_intl_locale_hash_free_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata);
|
static Eina_Bool _e_intl_locale_hash_free_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata);
|
||||||
|
|
||||||
|
@ -118,6 +118,25 @@ e_intl_post_shutdown(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_fix_chset(char *lang, char *chset)
|
||||||
|
{
|
||||||
|
char *p, *new_lang;
|
||||||
|
|
||||||
|
if (!chset) return lang;
|
||||||
|
|
||||||
|
p = strchr(lang, '.');
|
||||||
|
if (p) *p = 0;
|
||||||
|
new_lang = malloc(strlen(lang) + 1 + strlen(chset));
|
||||||
|
strcpy(new_lang, lang);
|
||||||
|
strcat(new_lang, ".");
|
||||||
|
strcat(new_lang, chset);
|
||||||
|
free(chset);
|
||||||
|
E_FREE(lang);
|
||||||
|
lang = new_lang;
|
||||||
|
return lang;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO
|
* TODO
|
||||||
* - Add error dialogs explaining any errors while setting the locale
|
* - Add error dialogs explaining any errors while setting the locale
|
||||||
|
@ -159,7 +178,11 @@ e_intl_language_set(const char *lang)
|
||||||
ok = 1;
|
ok = 1;
|
||||||
if (strcmp(_e_intl_language_alias, "C"))
|
if (strcmp(_e_intl_language_alias, "C"))
|
||||||
{
|
{
|
||||||
ok = _e_intl_locale_validate(_e_intl_language_alias);
|
char *chset = NULL;
|
||||||
|
|
||||||
|
ok = _e_intl_locale_validate(_e_intl_language_alias, &chset);
|
||||||
|
_e_intl_language_alias = _fix_chset(_e_intl_language_alias, chset);
|
||||||
|
chset = NULL;
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
char *p, *new_lang;
|
char *p, *new_lang;
|
||||||
|
@ -169,7 +192,9 @@ e_intl_language_set(const char *lang)
|
||||||
if (p) *p = 0;
|
if (p) *p = 0;
|
||||||
_e_intl_language_alias = strdup(new_lang);
|
_e_intl_language_alias = strdup(new_lang);
|
||||||
E_FREE(new_lang);
|
E_FREE(new_lang);
|
||||||
ok = _e_intl_locale_validate(_e_intl_language_alias);
|
ok = _e_intl_locale_validate(_e_intl_language_alias, &chset);
|
||||||
|
_e_intl_language_alias = _fix_chset(_e_intl_language_alias, chset);
|
||||||
|
chset = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ok)
|
if (!ok)
|
||||||
|
@ -180,6 +205,11 @@ e_intl_language_set(const char *lang)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char *chset = NULL;
|
||||||
|
|
||||||
|
ok = _e_intl_locale_validate(_e_intl_language, &chset);
|
||||||
|
_e_intl_language = _fix_chset(_e_intl_language, chset);
|
||||||
|
chset = NULL;
|
||||||
/* Only set env vars is a non NULL locale was passed */
|
/* Only set env vars is a non NULL locale was passed */
|
||||||
if (set_envars)
|
if (set_envars)
|
||||||
{
|
{
|
||||||
|
@ -273,7 +303,8 @@ e_intl_language_list(void)
|
||||||
|
|
||||||
EINA_LIST_FREE(dir_languages, language)
|
EINA_LIST_FREE(dir_languages, language)
|
||||||
if ((_e_intl_language_list_find(all_languages, language)) ||
|
if ((_e_intl_language_list_find(all_languages, language)) ||
|
||||||
((strlen(language) > 2) && (!_e_intl_locale_validate(language))))
|
((strlen(language) > 2) &&
|
||||||
|
(!_e_intl_locale_validate(language, NULL))))
|
||||||
{
|
{
|
||||||
free(language);
|
free(language);
|
||||||
}
|
}
|
||||||
|
@ -847,7 +878,7 @@ _e_intl_locale_system_locales_get(void)
|
||||||
* must be an un aliased locale;
|
* must be an un aliased locale;
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
_e_intl_locale_validate(const char *locale)
|
_e_intl_locale_validate(const char *locale, char **chset)
|
||||||
{
|
{
|
||||||
Eina_List *all_locales;
|
Eina_List *all_locales;
|
||||||
E_Locale_Parts *locale_parts;
|
E_Locale_Parts *locale_parts;
|
||||||
|
@ -940,6 +971,16 @@ _e_intl_locale_validate(const char *locale)
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ((found) && (chset))
|
||||||
|
{
|
||||||
|
if (*chset) free(*chset);
|
||||||
|
if ((!strcmp(locale_parts->codeset, "UTF-8")) &&
|
||||||
|
(!strcmp(locale_parts_next->codeset, "utf8")))
|
||||||
|
*chset = strdup("utf8");
|
||||||
|
else if ((!strcmp(locale_parts->codeset, "utf8")) &&
|
||||||
|
(!strcmp(locale_parts_next->codeset, "UTF-8")))
|
||||||
|
*chset = strdup("UTF-8");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue