From c7dfebcafa021277c43a5f5fb667978020305b2f 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 | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/util/grub-install-common.c b/util/grub-install-common.c index 6ea0a8e..9cf3012 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -594,17 +594,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; } @@ -621,14 +629,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"); } @@ -637,6 +645,7 @@ copy_locales (const char *dstd) free (dstf); } grub_util_fd_closedir (d); + free (dir); } static struct @@ -760,12 +769,14 @@ grub_install_copy_files (const char *src, { 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 { const char *locale_dir = get_localedir (); + char *locale_langpack_dir = xasprintf ("%s-langpack", locale_dir); for (i = 0; i < install_locales.n_entries; i++) { @@ -784,6 +795,19 @@ grub_install_copy_files (const char *src, } 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", @@ -798,6 +822,8 @@ grub_install_copy_files (const char *src, grub_util_error (_("cannot find locale `%s'"), install_locales.entries[i]); } + + free (locale_langpack_dir); } if (install_themes.is_default)