From 63c6654c0f41b8a8d9c436c2735e7392dd2b59bf Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 5 Apr 2021 19:27:19 +0200 Subject: omit charset from en_US.UTF-8 env variable when picking i18n strings --- src/json/json_helper.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/json/json_helper.c b/src/json/json_helper.c index 2a9b01a75..b39500f75 100644 --- a/src/json/json_helper.c +++ b/src/json/json_helper.c @@ -380,7 +380,7 @@ struct I18nContext /** * Language pattern to match. */ - const char *lp; + char *lp; /** * Name of the field to match. @@ -466,6 +466,7 @@ i18n_cleaner (void *cls, { struct I18nContext *ctx = cls; + GNUNET_free (ctx->lp); GNUNET_free (ctx); } @@ -486,7 +487,7 @@ TALER_JSON_spec_i18n_string (const char *name, .size_ptr = NULL }; - ctx->lp = language_pattern; + ctx->lp = GNUNET_strdup (language_pattern); ctx->field = name; *strptr = NULL; return ret; @@ -497,9 +498,30 @@ struct GNUNET_JSON_Specification TALER_JSON_spec_i18n_str (const char *name, const char **strptr) { - return TALER_JSON_spec_i18n_string (name, - getenv ("LANG"), - strptr); + const char *lang = getenv ("LANG"); + char *dot; + char *l; + struct GNUNET_JSON_Specification ret; + + if (NULL != lang) + { + dot = strchr (lang, + '.'); + if (NULL == dot) + l = GNUNET_strdup (lang); + else + l = GNUNET_strndup (lang, + dot - lang); + } + else + { + l = NULL; + } + ret = TALER_JSON_spec_i18n_string (name, + l, + strptr); + GNUNET_free (l); + return ret; } -- cgit v1.2.3