[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#502240: cdebconf: should not drop fall-back languages



tags 502240 + patch
thanks

On Tue, Oct 14, 2008 at 09:39:36PM +0200, Frans Pop wrote:
> When localechooser sets debconf/language to a set of languages (preferred 
> + fall-back languages, e.g. se_NO:nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en for 
> Northern Sami), cdebconf should ensure that *all* relevant translations 
> are kept when translations are dropped with DEBCONF_DROP_TRANSLATIONS 
> set.

Indeed, cdebconf was only keeping translation for the first language
of the set.

The attached patch should fix this, but as I am currently lacking a
proper environment to do a full d-i test, it would be great if someone
could verify that it really fixes the issue.

Cheers,
-- 
Jérémy Bobbio                        .''`. 
lunar@debian.org                    : :Ⓐ  :  # apt-get install anarchism
                                    `. `'` 
                                      `-   
diff --git a/packages/cdebconf/src/template.c b/packages/cdebconf/src/template.c
index dd8240a..de93b65 100644
--- a/packages/cdebconf/src/template.c
+++ b/packages/cdebconf/src/template.c
@@ -466,7 +466,7 @@ void template_lset(struct template *t, const char *lang,
     char *orig_field;
     char *altlang;
     char *cp;
-    const char *curlang;
+    const char *curlang = NULL;
 
     if (strcasecmp(field, "tag") == 0)
     {
@@ -530,24 +530,26 @@ void template_lset(struct template *t, const char *lang,
              strcmp(lang, "C") == 0 || strncmp(lang, "en", 2) == 0)
         curlang = lang;
     else {
-        const char *wantlang_full = getlanguage();
         char *wantlang;
         char *p;
+        struct cache_list_lang *cl;
 
-        if (!wantlang_full)
-            wantlang_full = "C";
-        wantlang = strdup(wantlang_full);
-        p = strpbrk(wantlang, "_.@");
-        if (p)
-            *p = '\0';
-        if (strncmp(lang, wantlang, strlen(wantlang)) == 0)
-            curlang = lang;
-        else {
-            INFO(INFO_VERBOSE, "Dropping %s/%s for %s (wantlang=%s)", t->tag, field, lang, wantlang);
+        getlanguage();
+        for (cl = cache_list_lang_ptr; cl != NULL; cl = cl->next) {
+            wantlang = strdup(cl->lang);
+            p = strpbrk(wantlang, "_.@");
+            if (p)
+                *p = '\0';
+            if (strncmp(lang, wantlang, strlen(wantlang)) == 0) {
+                curlang = lang;
+                break;
+            }
             free(wantlang);
+        }
+        if (curlang == NULL) {
+            INFO(INFO_VERBOSE, "Dropping %s/%s for %s", t->tag, field, lang);
             return;
         }
-        free(wantlang);
     }
 
     p = t->fields;

Attachment: signature.asc
Description: Digital signature


Reply to: