Prefer translations from Ubuntu language packs if available
authorColin Watson <cjwatson@ubuntu.com>
Mon, 13 Jan 2014 12:13:07 +0000 (12:13 +0000)
committerMate Kukri <mate.kukri@canonical.com>
Tue, 10 Feb 2026 11:27:19 +0000 (11:27 +0000)
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 c1c3c570495a3fdf5cd3571276b61b7dc3f061f9..c002d10aedf8b46e53bb5ffca911bab4691f58cf 100644 (file)
@@ -835,17 +835,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;
     }
 
@@ -862,14 +870,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");
        }
@@ -878,6 +886,7 @@ copy_locales (const char *dstd)
       free (dstf);
     }
   grub_util_fd_closedir (d);
+  free (dir);
 }
 #endif
 
@@ -896,13 +905,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++)
       {
@@ -919,6 +930,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");
@@ -928,6 +949,8 @@ grub_install_copy_nls(const char *src __attribute__ ((unused)),
         free (srcf);
         free (dstf);
       }
+
+      free (locale_langpack_dir);
     }
   free (dst_locale);
 #endif