25 #include "gnc-locale-utils.h"
28 #include <glib/gi18n.h>
32 gnc_lconv_set_utf8 (
char **p_value,
char *default_value)
34 char *value = *p_value;
37 if ((value == NULL) || (value[0] == 0))
38 value = default_value;
43 size_t count = mbstowcs (NULL, value, 0);
47 wchar_t *wvalue = g_malloc ((count + 1) *
sizeof(
wchar_t));
48 count = mbstowcs (wvalue, value, count + 1);
51 *p_value = g_utf16_to_utf8 (wvalue, -1, NULL, NULL, NULL);
57 *p_value = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
64 *p_value = default_value;
69 gnc_lconv_set_char (
char *p_value,
char default_value)
71 if ((p_value != NULL) && (*p_value == CHAR_MAX))
72 *p_value = default_value;
78 static struct lconv lc;
79 static gboolean lc_set = FALSE;
86 gnc_lconv_set_utf8(&lc.decimal_point,
".");
87 gnc_lconv_set_utf8(&lc.thousands_sep,
",");
88 gnc_lconv_set_utf8(&lc.grouping,
"\003");
89 gnc_lconv_set_utf8(&lc.int_curr_symbol,
"USD ");
90 gnc_lconv_set_utf8(&lc.currency_symbol,
"$");
91 gnc_lconv_set_utf8(&lc.mon_decimal_point,
".");
92 gnc_lconv_set_utf8(&lc.mon_thousands_sep,
",");
93 gnc_lconv_set_utf8(&lc.mon_grouping,
"\003");
94 gnc_lconv_set_utf8(&lc.negative_sign,
"-");
95 gnc_lconv_set_utf8(&lc.positive_sign,
"");
97 gnc_lconv_set_char(&lc.frac_digits, 2);
98 gnc_lconv_set_char(&lc.int_frac_digits, 2);
99 gnc_lconv_set_char(&lc.p_cs_precedes, 1);
100 gnc_lconv_set_char(&lc.p_sep_by_space, 0);
101 gnc_lconv_set_char(&lc.n_cs_precedes, 1);
102 gnc_lconv_set_char(&lc.n_sep_by_space, 0);
103 gnc_lconv_set_char(&lc.p_sign_posn, 1);
104 gnc_lconv_set_char(&lc.n_sign_posn, 1);
112 gnc_locale_default_iso_currency_code (
void)
114 static char *code = NULL;
120 lc = gnc_localeconv ();
122 code = g_strdup (lc->int_curr_symbol);
135 gnc_locale_decimal_places (
void)
137 static gboolean got_it = FALSE;
144 lc = gnc_localeconv();
145 places = lc->frac_digits;
155 static GList *locale_stack = NULL;
158 gnc_push_locale (
int category,
const char *locale)
162 g_return_if_fail (locale != NULL);
167 saved_locale = g_win32_getlocale();
169 saved_locale = g_strdup(setlocale(category, NULL) ?
170 setlocale(category, NULL) :
"C");
172 locale_stack = g_list_prepend (locale_stack, saved_locale);
173 setlocale (category, locale);
177 gnc_pop_locale (
int category)
182 g_return_if_fail (locale_stack != NULL);
185 saved_locale = node->data;
187 setlocale (category, saved_locale);
189 locale_stack = g_list_remove_link (locale_stack, node);
190 g_list_free_1 (node);
191 g_free (saved_locale);