[Phil Blundell]
> Right, yeah, that's what I thought.  So that code looks to me like
> it will print the error message if any catalog loading is
> successful, rather than if they all fail.  Surely that's exactly the
> opposite of what's wanted?

Right.  Fixed in the current version.

Here is a new patch, relative to the current CVS version.  This
version do not reorganize the code, and should be easier to check.

Index: boxes.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/boxes.c,v
retrieving revision 1.67
diff -u -3 -p -u -r1.67 boxes.c
--- boxes.c     2002/03/10 17:55:44     1.67
+++ boxes.c     2002/03/15 20:46:19
@@ -1181,10 +1181,23 @@ boxChooseLanguageVariant (const struct l
            struct language_item *li = list[i].list->items[0].p;
            if (list[i].list->items[0].d != 1)
                continue;
-           sprintf(prtbuf, "/etc/messages.%s", li->msgcat);
-           if (access(prtbuf, R_OK))
-               continue;
-
+           /* If any of the languages listed in the colon separated
+              list of language codes is available, accept it */
+           {
+               int accessable = 0;
+               char *languagelist = strdup(li->msgcat);
+               char *language = NULL;
+               for ( language = strtok(languagelist, ":");
+                     language && *language; language = strtok(NULL, ":") )
+               {
+                   sprintf(prtbuf, "/etc/messages.%s", language);
+                   if (0 == access(prtbuf, R_OK))
+                       ++accessable;
+               }
+               free(languagelist);
+               if (! accessable)
+                   continue;
+           }
             wpadit (tempo, list[i].hint, width);
             newtListboxAddEntry (lang_list, tempo, list + i);
         }
Index: main.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/main.c,v
retrieving revision 1.147
diff -u -3 -p -u -r1.147 main.c
--- main.c      2002/03/12 02:39:00     1.147
+++ main.c      2002/03/15 20:46:19
@@ -799,20 +799,33 @@ int main (void) {
        const struct language_definition *langs = available_languages ();
 
        if (locale && strstr(locale, "utf-8")) {
+         int translation_available = 0;
          /* UTF-8 mode, choose a language */
          do {
            lang = boxChooseLanguageVariant (langs);
          } while (lang == NULL);
-         snprintf (msgcat, PATH_MAX, "/etc/messages.%s", lang->msgcat);
-         msgcat[PATH_MAX - 1] = '\0';
-         DEBUGMSG ("loading message catalog %s", msgcat);
-         
-         if (LOAD_TRMFILE (msgcat) == 0)         /* Failed to load localized strings? 
*/
+
          {
-           if (LOAD_TRMFILE (TRMBACKUP) == 0)  /* Failed to load English strings as 
well? */
-            {
+           char *languagelist = strdup(lang->msgcat);
+           char *language = NULL;
+           for ( language = strtok(languagelist, ":");
+                 ! translation_available && language && *language;
+                 language = strtok(NULL, ":") )
+           {
+             snprintf (msgcat, PATH_MAX, "/etc/messages.%s", language);
+             msgcat[PATH_MAX - 1] = '\0';
+             DEBUGMSG ("trying to load message catalog %s", msgcat);
+         
+             if (LOAD_TRMFILE (msgcat) != 0)
+               translation_available = 1;
+           }
+           free(languagelist);
+         }
+         if ( ! translation_available &&
+              LOAD_TRMFILE (TRMBACKUP) == 0)  /* Failed to load English strings as 
+well? */
+           {
              problemBoxEn ("An error occured while loading application messages.", 
"Problem");
-             
+           
              reboot (RB_AUTOBOOT);
              
              /* when not root and debugging */
@@ -828,7 +841,6 @@ int main (void) {
              
              problemBoxEn (message, "Problem");
            }
-         }
        } else {
          /* Try to force the language to English */
          while (langs->name != NULL && strcmp(langs->name, "English"))
Index: release_notes.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/release_notes.c,v
retrieving revision 1.10
diff -u -3 -p -u -r1.10 release_notes.c
--- release_notes.c     2002/03/13 15:59:44     1.10
+++ release_notes.c     2002/03/15 20:46:19
@@ -52,12 +52,23 @@ release_notes (const char *suffix)
         char *fname = (char *)malloc (PATH_MAX);
        if (fname)
        {
-           snprintf (fname, PATH_MAX, RELEASE_FILE_FMT, suffix);
-           if (display_notes(fname) == 0)
+           char *languagelist = strdup(suffix);
+           char *language = NULL;
+           /* If any of the languages listed in the colon separated
+              list of language codes is available, accept it */
+           for ( language = strtok(languagelist, ":");
+                 language && *language;
+                 language = strtok(NULL, ":") )
            {
-               free (fname);
-               return 0;
+             snprintf (fname, PATH_MAX, RELEASE_FILE_FMT, language);
+             if (display_notes(fname) == 0)
+               {
+                 free (languagelist);
+                 free (fname);
+                 return 0;
+               }
            }
+           free (languagelist);
            free(fname);
        }
     }
Index: util.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/util.c,v
retrieving revision 1.80
diff -u -3 -p -u -r1.80 util.c
--- util.c      2002/03/14 12:02:16     1.80
+++ util.c      2002/03/15 20:46:20
@@ -1219,7 +1219,17 @@ otherway:
       /* okay, no country matching, trying the another mapping */
       i=0;
       while(mirror_country_map[i] != NULL) {
-         if(strcmp(lang->msgcat,mirror_country_map[i]) == 0) {
+        char *languagelist = strdup(lang->msgcat);
+        char *language = NULL;
+        int match = 0;
+        for ( language = strtok(languagelist, ":");
+              language && *language;
+              language = strtok(NULL, ":") ) {
+           if(strcmp(language,mirror_country_map[i]) == 0)
+              match = 1;
+        }
+        free(languagelist);
+        if (match) {
             sprintf(hostname, "ftp.%s.debian.org", mirror_country_map[i+1]);
             return;
          }
Index: langs/norwegian.src
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/langs/norwegian.src,v
retrieving revision 1.1
diff -u -3 -p -u -r1.1 norwegian.src
--- langs/norwegian.src 2001/10/17 03:30:12     1.1
+++ langs/norwegian.src 2002/03/15 20:46:20
@@ -3,10 +3,10 @@
     <hint>no - Du har valgt norsk.  Trykk Enter for å fortsette</hint>
     <list>
         <name>Velg språkvariant</name>
-        <item arch="i386" locale="no_NO.ISO-8859-1" acm="iso01" font="LatArCyrHeb-16" 
keymap="i386/qwerty/no-latin1" msgcat="nb">
+        <item arch="i386" locale="no_NO.ISO-8859-1" acm="iso01" font="LatArCyrHeb-16" 
+keymap="i386/qwerty/no-latin1" msgcat="nb_NO:nb:no_NO:no:nn_NO:nn:dk:sv">
             <name>Bokmål</name>
         </item>
-        <item arch="i386" locale="nn_NO.ISO-8859-1" acm="iso01" font="LatArCyrHeb-16" 
keymap="i386/qwerty/no-latin1" msgcat="nn">
+        <item arch="i386" locale="nn_NO.ISO-8859-1" acm="iso01" font="LatArCyrHeb-16" 
+keymap="i386/qwerty/no-latin1" msgcat="nn_NO:nn:nb_NO:nb:no_NO:no:dk:sv">
             <name>Nynorsk</name>
         </item>
     </list>



--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to