]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
intl: add en_GB and bg - fix language selector (ACL)
authorJaroslav Kysela <perex@perex.cz>
Mon, 22 Jun 2015 07:34:49 +0000 (09:34 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 22 Jun 2015 07:34:49 +0000 (09:34 +0200)
Makefile
Makefile.webui
src/access.c
src/api/api_language.c
src/lang_codes.c
src/lang_codes.h
src/tvh_locale.c

index d4ad820382143f595107884f5c79dd89c4d45d0b..5b7e2353f601854b43f7f8139377e11908dbfd60 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@
 
 include $(dir $(lastword $(MAKEFILE_LIST))).config.mk
 PROG    := $(BUILDDIR)/tvheadend
-LANGUAGES ?= de fr cs pl
+LANGUAGES ?= en_GB de fr cs pl bg
 
 #
 # Common compiler flags
@@ -578,6 +578,9 @@ intl:
 
 intl/tvheadend.pot:
 
+intl/tvheadend.en_GB.po: intl/tvheadend.pot
+       $(call merge-po,$@,$<)
+
 intl/tvheadend.de.po: intl/tvheadend.pot
        $(call merge-po,$@,$<)
 
@@ -590,6 +593,9 @@ intl/tvheadend.cs.po: intl/tvheadend.pot
 intl/tvheadend.pl.po: intl/tvheadend.pot
        $(call merge-po,$@,$<)
 
+intl/tvheadend.bg.po: intl/tvheadend.pot
+       $(call merge-po,$@,$<)
+
 $(BUILDDIR)/src/tvh_locale.o: src/tvh_locale_inc.c
 src/tvh_locale_inc.c: $(PO-FILES)
        @printf "Building $@\n"
index 2b5ca2ddf34bff886fc16ac150c53fa25644c2ea..85fe286ccf284e80c4b0d8a68d9be79e599e845c 100644 (file)
@@ -22,7 +22,7 @@
 
 IAM=$(lastword $(MAKEFILE_LIST))
 WEBDIR ?= src/webui
-LANGUAGES ?= de fr cs pl
+LANGUAGES ?= en_GB de fr cs pl bg
 ROOTPATH = static
 
 ifneq ($(WEBUI),)
@@ -253,6 +253,9 @@ intl:
 
 intl/js/tvheadend.js.pot:
 
+intl/js/tvheadend.js.en_GB.po: intl/js/tvheadend.js.pot
+       $(call merge-po,$@,$<)
+
 intl/js/tvheadend.js.de.po: intl/js/tvheadend.js.pot
        $(call merge-po,$@,$<)
 
@@ -265,6 +268,12 @@ intl/js/tvheadend.js.cs.po: intl/js/tvheadend.js.pot
 intl/js/tvheadend.js.pl.po: intl/js/tvheadend.js.pot
        $(call merge-po,$@,$<)
 
+intl/js/tvheadend.js.bg.po: intl/js/tvheadend.js.pot
+       $(call merge-po,$@,$<)
+
+src/webui/static/intl/tvh.en_GB.js.gz: intl/js/tvheadend.js.en_GB.po
+       $(call go-po,$@,$<)
+
 src/webui/static/intl/tvh.de.js.gz: intl/js/tvheadend.js.de.po
        $(call go-po,$@,$<)
 
@@ -277,6 +286,9 @@ src/webui/static/intl/tvh.cs.js.gz: intl/js/tvheadend.js.cs.po
 src/webui/static/intl/tvh.pl.js.gz: intl/js/tvheadend.js.pl.po
        $(call go-po,$@,$<)
 
+src/webui/static/intl/tvh.bg.js.gz: intl/js/tvheadend.js.bg.po
+       $(call go-po,$@,$<)
+
 .PHONY:
 clean:
        rm -f $(foreach f,tvh.js tvh.css tvh-tv.js tvh-tv.css,\
index f657ee879929b5d31c97ac307082897a21defcff..7c91bf8aaaaedd601bdec18d7331ecd3764bc1f8 100644 (file)
@@ -1261,7 +1261,7 @@ language_get_list ( void *obj, const char *lang )
 {
   htsmsg_t *m = htsmsg_create_map();
   htsmsg_add_str(m, "type",  "api");
-  htsmsg_add_str(m, "uri",   "language/list");
+  htsmsg_add_str(m, "uri",   "language/locale");
   return m;
 }
 
index 6dd697b1592f2ca6553641c172c07ef8138b2aea..874dceb4952e74eba0b48d12838ba227d0f4ac79 100644 (file)
@@ -45,11 +45,49 @@ api_language_enum
   return 0;
 }
 
+static int
+api_language_locale_enum
+  ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
+{
+  const lang_code_t *c = lang_codes;
+  htsmsg_t *l, *e;
+  const char *s;
+  char buf1[8];
+  char buf2[128];
+
+  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);
+    s = c->locale;
+    while (s && *s) {
+      if (*s == '|')
+        s++;
+      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);
+      s += 2;
+    }
+    c++;
+  }
+  *resp = htsmsg_create_map();
+  htsmsg_add_msg(*resp, "entries", l);
+  return 0;
+}
+
 void api_language_init ( void )
 {
   static api_hook_t ah[] = {
 
-    { "language/list", ACCESS_ANONYMOUS, api_language_enum, NULL },
+    { "language/list",   ACCESS_ANONYMOUS, api_language_enum, NULL },
+    { "language/locale", ACCESS_ANONYMOUS, api_language_locale_enum, NULL },
 
     { NULL },
   };
index 707e099731b2274b72fb651563e17aeb734ab746..b56d487e78a50b8e10a3dc70193648797c03fdbd 100644 (file)
@@ -145,7 +145,7 @@ const lang_code_t lang_codes[] = {
   { "egy", NULL, NULL , "Egyptian (Ancient)" },
   { "eka", NULL, NULL , "Ekajuk" },
   { "elx", NULL, NULL , "Elamite" },
-  { "eng", "en", NULL , "English" },
+  { "eng", "en", NULL , "English", "US|GB" },
   { "epo", "eo", NULL , "Esperanto" },
   { "est", "et", NULL , "Estonian" },
   { "ewe", "ee", NULL , "Ewe" },
index ffdf0a457466222007113fd9c1b4caca412b8c98..d036d5eee2a2788d077ccd5ffc4555a85e749533 100644 (file)
@@ -27,6 +27,7 @@ typedef struct lang_code
   const char *code1;  ///< ISO 639-1
   const char *code2t; ///< ISO 639-2 T
   const char *desc;   ///< Description
+  const char *locale; ///< Locale variants (like US|GB or DE|BE)
 } lang_code_t;
 
 extern const lang_code_t lang_codes[];
index 0500c7d23c0179e432888bd5359c2c3021b32ad1..716ed5f01d66f187068543b767e25d03575fa05f 100644 (file)
@@ -39,6 +39,10 @@ const char **tvh_gettext_last_strings = NULL;
 
 static const char *tvh_gettext_lang_check(const char *lang)
 {
+  if (!strcmp(lang, "eng_US"))
+    return "en";
+  if (!strcmp(lang, "eng_GB"))
+    return "en_GB";
   if (!strcmp(lang, "ger"))
     return "de";
   if (!strcmp(lang, "fre"))
@@ -47,6 +51,8 @@ static const char *tvh_gettext_lang_check(const char *lang)
     return "cs";
   if (!strcmp(lang, "pol"))
     return "pl";
+  if (!strcmp(lang, "bul"))
+    return "bg";
   return lang;
 }
 
@@ -114,6 +120,7 @@ static void tvh_gettext_new_lang(const char *lang)
 const char *tvh_gettext_lang(const char *lang, const char *s)
 {
   const char **strings;
+  static char unklng[8];
 
   pthread_mutex_lock(&tvh_gettext_mutex);
   if (lang == NULL) {
@@ -129,6 +136,9 @@ const char *tvh_gettext_lang(const char *lang, const char *s)
       if (tvh_gettext_default_lang == NULL)
         tvh_gettext_init();
       tvh_gettext_new_lang(tvh_gettext_default_lang);
+      strncpy(unklng, lang, sizeof(unklng));
+      unklng[sizeof(unklng)-1] = '\0';
+      tvh_gettext_last_lang = unklng;
     } else {
       if (tvh_gettext_last_lang == NULL)
         tvh_gettext_last_lang = "en";