diff --git a/ChangeLog b/ChangeLog index c6f6f02c34..2561bac256 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-07-03 Christian Stimming + + * src/gnome/druid-hierarchy.c (gnc_get_ea_locale_dir): If current + locale doesn't work for account hierarchy druid, then check all + abbreviated versions of that locale. + 2002-07-02 Derek Atkins * register/register-gnome/gnucash-sheet.c: allow a caller to diff --git a/src/gnome/druid-hierarchy.c b/src/gnome/druid-hierarchy.c index 3fd56729b3..0b2b235789 100644 --- a/src/gnome/druid-hierarchy.c +++ b/src/gnome/druid-hierarchy.c @@ -311,7 +311,8 @@ gnc_get_ea_locale_dir(const char *top_dir) gchar *ret; gchar *locale; struct stat buf; - + int i; + #ifdef HAVE_LC_MESSAGES locale = g_strdup(setlocale(LC_MESSAGES, NULL)); #else @@ -323,21 +324,23 @@ gnc_get_ea_locale_dir(const char *top_dir) setlocale(LC_ALL, NULL) : "C"); #endif + i = strlen(locale); ret = g_strdup_printf("%s/%s", top_dir, locale); - if(stat(ret, &buf) != 0 && (strlen (locale) > 2)) - { - g_free (ret); - locale[2] = '\0'; - ret = g_strdup_printf("%s/%s", top_dir, locale); + while (stat(ret, &buf) != 0) + { + i--; + if (i<1) + { + g_free(ret); + ret = g_strdup_printf("%s/%s", top_dir, default_locale); + break; + } + locale[i] = '\0'; + g_free(ret); + ret = g_strdup_printf("%s/%s", top_dir, locale); } - - if(stat(ret, &buf) != 0) - { - g_free (ret); - ret = g_strdup_printf("%s/%s", top_dir, default_locale); - } - + g_free(locale); return ret;