From: Jaroslav Kysela Date: Fri, 1 Jan 2016 17:49:15 +0000 (+0100) Subject: locale: add filter for available locales X-Git-Tag: v4.2.1~1251 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=188b93a7911486e2466d19af0f8ad58ab582a902;p=thirdparty%2Ftvheadend.git locale: add filter for available locales --- diff --git a/src/api/api_language.c b/src/api/api_language.c index 874dceb49..a37218855 100644 --- a/src/api/api_language.c +++ b/src/api/api_language.c @@ -58,9 +58,11 @@ api_language_locale_enum l = htsmsg_create_list(); while (c->code2b) { e = htsmsg_create_map(); - htsmsg_add_str(e, "key", c->code2b); - htsmsg_add_str(e, "val", c->desc); - htsmsg_add_msg(l, NULL, e); + if (tvh_gettext_langcode_valid(c->code2b)) { + htsmsg_add_str(e, "key", c->code2b); + htsmsg_add_str(e, "val", c->desc); + htsmsg_add_msg(l, NULL, e); + } s = c->locale; while (s && *s) { if (*s == '|') @@ -68,11 +70,13 @@ api_language_locale_enum if (s[0] == '\0' || s[1] == '\0') break; snprintf(buf1, sizeof(buf1), "%s_%c%c", c->code2b, s[0], s[1]); - snprintf(buf2, sizeof(buf2), "%s (%c%c)", c->desc, s[0], s[1]); - e = htsmsg_create_map(); - htsmsg_add_str(e, "key", buf1); - htsmsg_add_str(e, "val", buf2); - htsmsg_add_msg(l, NULL, e); + if (tvh_gettext_langcode_valid(buf1)) { + snprintf(buf2, sizeof(buf2), "%s (%c%c)", c->desc, s[0], s[1]); + e = htsmsg_create_map(); + htsmsg_add_str(e, "key", buf1); + htsmsg_add_str(e, "val", buf2); + htsmsg_add_msg(l, NULL, e); + } s += 2; } c++; diff --git a/src/tvh_locale.c b/src/tvh_locale.c index 95e4819bb..85e0d05fb 100644 --- a/src/tvh_locale.c +++ b/src/tvh_locale.c @@ -160,6 +160,21 @@ static struct lng *lng_get_locale(char *locale_lang) return lng_get("eng"); } +/* + * + */ +int tvh_gettext_langcode_valid(const char *code) +{ + struct lng ls; + int ret; + + pthread_mutex_lock(&tvh_gettext_mutex); + ls.tvh_lang = code; + ret = RB_FIND(&lngs, &ls, link, lng_cmp) != NULL; + pthread_mutex_unlock(&tvh_gettext_mutex); + return ret; +} + /* * */ diff --git a/src/tvh_locale.h b/src/tvh_locale.h index 19c53e69c..d5ce71f92 100644 --- a/src/tvh_locale.h +++ b/src/tvh_locale.h @@ -26,6 +26,8 @@ static inline const char *tvh_gettext(const char *s) #define _(s) tvh_gettext(s) #define N_(s) (s) +int tvh_gettext_langcode_valid(const char *code); + void tvh_gettext_init(void); void tvh_gettext_done(void);