Prefer translations from Ubuntu language packs if available
authorColin Watson <cjwatson@ubuntu.com>
Mon, 13 Jan 2014 12:13:07 +0000 (12:13 +0000)
committerFelix Zielcke <fzielcke@z-51.de>
Wed, 11 Jun 2025 15:42:34 +0000 (17:42 +0200)
Bug-Ubuntu: https://bugs.launchpad.net/bugs/537998
Forwarded: not-needed
Last-Update: 2013-12-25

Patch-Name: install-locale-langpack.patch

Gbp-Pq: Name install-locale-langpack.patch

util/grub-install-common.c

index ce854d86f86f1eecf8a9b644d20d78cab78363bf..0adeeda893eb14bf4ba7ca2c5524875057056bcb 100644 (file)
@@ -795,17 +795,25 @@ get_localedir (void)
 }
 
 static void
-copy_locales (const char *dstd)
+copy_locales (const char *dstd, int langpack)
 {
   grub_util_fd_dir_t d;
   grub_util_fd_dirent_t de;
   const char *locale_dir = get_localedir ();
+  char *dir;
 
-  d = grub_util_fd_opendir (locale_dir);
+  if (langpack)
+    dir = xasprintf ("%s-langpack", locale_dir);
+  else
+    dir = xstrdup (locale_dir);
+
+  d = grub_util_fd_opendir (dir);
   if (!d)
     {
-      grub_util_warn (_("cannot open directory `%s': %s"),
-                     locale_dir, grub_util_fd_strerror ());
+      if (!langpack)
+       grub_util_warn (_("cannot open directory `%s': %s"),
+                       dir, grub_util_fd_strerror ());
+      free (dir);
       return;
     }
 
@@ -822,14 +830,14 @@ copy_locales (const char *dstd)
       if (ext && (grub_strcmp (ext, ".mo") == 0
                  || grub_strcmp (ext, ".gmo") == 0))
        {
-         srcf = grub_util_path_concat (2, locale_dir, de->d_name);
+         srcf = grub_util_path_concat (2, dir, de->d_name);
          dstf = grub_util_path_concat (2, dstd, de->d_name);
          ext = grub_strrchr (dstf, '.');
          grub_strcpy (ext, ".mo");
        }
       else
        {
-         srcf = grub_util_path_concat_ext (4, locale_dir, de->d_name,
+         srcf = grub_util_path_concat_ext (4, dir, de->d_name,
                                            "LC_MESSAGES", PACKAGE, ".mo");
          dstf = grub_util_path_concat_ext (2, dstd, de->d_name, ".mo");
        }
@@ -838,6 +846,7 @@ copy_locales (const char *dstd)
       free (dstf);
     }
   grub_util_fd_closedir (d);
+  free (dir);
 }
 #endif
 
@@ -856,13 +865,15 @@ grub_install_copy_nls(const char *src __attribute__ ((unused)),
     {
       char *srcd = grub_util_path_concat (2, src, "po");
       copy_by_ext (srcd, dst_locale, ".mo", 0);
-      copy_locales (dst_locale);
+      copy_locales (dst_locale, 0);
+      copy_locales (dst_locale, 1);
       free (srcd);
     }
   else
     {
       size_t i;
       const char *locale_dir = get_localedir ();
+      char *locale_langpack_dir = xasprintf ("%s-langpack", locale_dir);
 
       for (i = 0; i < install_locales.n_entries; i++)
       {
@@ -879,6 +890,16 @@ grub_install_copy_nls(const char *src __attribute__ ((unused)),
             continue;
           }
         free (srcf);
+        srcf = grub_util_path_concat_ext (4, locale_langpack_dir,
+                                          install_locales.entries[i],
+                                          "LC_MESSAGES", PACKAGE, ".mo");
+        if (grub_install_compress_file (srcf, dstf, 0))
+          {
+            free (srcf);
+            free (dstf);
+            continue;
+          }
+        free (srcf);
         srcf = grub_util_path_concat_ext (4, locale_dir,
                                           install_locales.entries[i],
                                           "LC_MESSAGES", PACKAGE, ".mo");
@@ -888,6 +909,8 @@ grub_install_copy_nls(const char *src __attribute__ ((unused)),
         free (srcf);
         free (dstf);
       }
+
+      free (locale_langpack_dir);
     }
   free (dst_locale);
 #endif