]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/gettext/gettext.c (grub_gettext_init_ext): Factor out
authorColin Watson <cjwatson@ubuntu.com>
Fri, 10 Dec 2010 11:45:08 +0000 (11:45 +0000)
committerColin Watson <cjwatson@ubuntu.com>
Fri, 10 Dec 2010 11:45:08 +0000 (11:45 +0000)
.mo/.mo.gz opening sequence to ...
(grub_mofile_open_lang): ... here.
(grub_gettext_init_ext): If opening ll_CC fails, try ll.
* util/grub.d/00_header.in (grub_lang): Include country part of
locale.
Reported by: Mario Limonciello.

ChangeLog
grub-core/gettext/gettext.c
util/grub.d/00_header.in

index f215398cc849ff1184524adca24a3b9000535c95..e8ac26e83ce18de38efa55f2c6cb210b95f1bf41 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-12-10  Colin Watson  <cjwatson@ubuntu.com>
+
+       * grub-core/gettext/gettext.c (grub_gettext_init_ext): Factor out
+       .mo/.mo.gz opening sequence to ...
+       (grub_mofile_open_lang): ... here.
+       (grub_gettext_init_ext): If opening ll_CC fails, try ll.
+       * util/grub.d/00_header.in (grub_lang): Include country part of
+       locale.
+       Reported by: Mario Limonciello.
+
 2010-12-09  Robert Millan  <rmh@gnu.org>
 
        * NEWS: Document addition of ZFS support.
index 9ab4c3b8dfff19f97c0b55e3a262fac1a772eac7..5c7db4408879a6011f7f67a0953c53ee83cf7f44 100644 (file)
@@ -261,24 +261,16 @@ grub_mofile_open (const char *filename)
   return fd_mo;
 }
 
+/* Returning grub_file_t would be more natural, but grub_mofile_open assigns
+   to fd_mo anyway ...  */
 static void
-grub_gettext_init_ext (const char *lang)
+grub_mofile_open_lang (const char *locale_dir, const char *locale)
 {
   char *mo_file;
-  char *locale_dir;
-
-  locale_dir = grub_env_get ("locale_dir");
-  if (locale_dir == NULL)
-    {
-      grub_dprintf ("gettext", "locale_dir variable is not set up.\n");
-      return;
-    }
-
-  fd_mo = NULL;
 
   /* mo_file e.g.: /boot/grub/locale/ca.mo   */
 
-  mo_file = grub_xasprintf ("%s/%s.mo", locale_dir, lang);
+  mo_file = grub_xasprintf ("%s/%s.mo", locale_dir, locale);
   if (!mo_file)
     return;
 
@@ -295,6 +287,38 @@ grub_gettext_init_ext (const char *lang)
        return;
       fd_mo = grub_mofile_open (mo_file);
     }
+}
+
+static void
+grub_gettext_init_ext (const char *locale)
+{
+  char *locale_dir;
+
+  locale_dir = grub_env_get ("locale_dir");
+  if (locale_dir == NULL)
+    {
+      grub_dprintf ("gettext", "locale_dir variable is not set up.\n");
+      return;
+    }
+
+  fd_mo = NULL;
+
+  grub_mofile_open_lang (locale_dir, locale);
+
+  /* ll_CC didn't work, so try ll.  */
+  if (fd_mo == NULL)
+    {
+      char *lang = grub_strdup (locale);
+      char *underscore = grub_strchr (lang, '_');
+
+      if (underscore)
+       {
+         *underscore = '\0';
+         grub_mofile_open_lang (locale_dir, lang);
+       }
+
+      grub_free (lang);
+    }
 
   if (fd_mo)
     {
index 9ed3fc3a1d18d8ac269a091093de9d6d305eec8e..a596e9c4ac54ca107aee364a38c23cea37750f5a 100644 (file)
@@ -23,7 +23,7 @@ prefix=@prefix@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
 locale_dir=`echo ${GRUB_PREFIX}/locale | sed ${transform}`
-grub_lang=`echo $LANG | cut -d _ -f 1`
+grub_lang=`echo $LANG | cut -d . -f 1`
 
 . ${libdir}/grub/grub-mkconfig_lib