From 31e9c5eaec14e18251db1fb7e6e44add22e56526 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Mon, 13 Jan 2014 12:13:07 +0000 Subject: Prefer translations from Ubuntu language packs if available Bug-Ubuntu: https://bugs.launchpad.net/bugs/537998 Forwarded: not-needed Last-Update: 2013-12-25 Patch-Name: install-locale-langpack.patch --- util/grub-install-common.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/util/grub-install-common.c b/util/grub-install-common.c index 4e212e690..e53730485 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -774,17 +774,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; } @@ -801,14 +809,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"); } @@ -817,6 +825,7 @@ copy_locales (const char *dstd) free (dstf); } grub_util_fd_closedir (d); + free (dir); } #endif @@ -835,13 +844,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++) { @@ -858,6 +869,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"); @@ -867,6 +888,8 @@ grub_install_copy_nls(const char *src __attribute__ ((unused)), free (srcf); free (dstf); } + + free (locale_langpack_dir); } free (dst_locale); #endif