From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1MGgtT-00075F-Td for mharc-grub-devel@gnu.org; Tue, 16 Jun 2009 18:12:39 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MGgtR-00073G-Rb for grub-devel@gnu.org; Tue, 16 Jun 2009 18:12:37 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MGgtN-0006y6-T1 for grub-devel@gnu.org; Tue, 16 Jun 2009 18:12:37 -0400 Received: from [199.232.76.173] (port=43493 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MGgtN-0006xn-Lc for grub-devel@gnu.org; Tue, 16 Jun 2009 18:12:33 -0400 Received: from 197.red-80-32-81.staticip.rima-tde.net ([80.32.81.197]:35465 helo=mail.pina.cat) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MGgtL-0003LO-PL for grub-devel@gnu.org; Tue, 16 Jun 2009 18:12:33 -0400 Received: from pinux (82-45-164-87.cable.ubr06.hari.blueyonder.co.uk [82.45.164.87]) by mail.pina.cat (Postfix) with ESMTP id 7600C288FBA12 for ; Tue, 16 Jun 2009 23:47:10 +0200 (CEST) Received: by pinux (Postfix, from userid 1000) id C309F91F42; Tue, 16 Jun 2009 22:47:09 +0100 (BST) Date: Tue, 16 Jun 2009 22:47:09 +0100 From: Carles Pina i Estany To: grub-devel@gnu.org Message-ID: <20090616214709.GA31314@pina.cat> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="k+w/mQv8wyuph6w0" Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Content-Transfer-Encoding: 7bit X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) X-Greylist: delayed 2099 seconds by postgrey-1.27 at monty-python; Tue, 16 Jun 2009 18:12:29 EDT Subject: Fw: gettext support X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Jun 2009 22:12:38 -0000 --k+w/mQv8wyuph6w0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, Last January I sent a patch to add gettext support. When I had time, the list was not very, and afterwards I didn't have time. Hopefully from now on and during next weeks I will have some time to follow up the discussion, make changes, etc. (not exactly everyday but I will be able to do, I hope). Find attached the patch that you can apply with the last version. Surprisingly, after resolving a couple of conflicts, it works like last January. General design: a) I did a new module called gettext. It uses locale_prefix and lang variables to locate the .mo file b) Some strings in Grub (currently only one) uses _("") function to translate the text. This is a hook function that returns the same text when the gettext module is not loaded or the translation when it's loaded gettext module parses the .mo file without using hash and using bisection for the searching (if I remember correctly). The scripts that generates menu.lst also supports (at least some) gettext support from Bash/Shell itself. Here you can read the ChangeLog: http://lists.gnu.org/archive/html/grub-devel/2009-01/msg00118.html and more instructions In that thread we talked about some encoding problem. As Niels (I think) suggested, after setting up the Charset in the .po file it's working fine. Right now you would need to "compile" the .po file to .mo file by hand (directory grub2/po) and then copy to the correct place in your /usr/share directory, like: /usr/share/locale/ca/LC_MESSAGES/grub.mo (you can use this location with this menu.lst: set locale_prefix=/usr/share/locale set lang=ca insmod gettext ) Comments for next steps to commit the patch are welcomed. (maybe I need to setup the "path" to access to /usr/share/locale in the Grub installation script in grub.cfg -e.g. search --fs-uuid ...- or we can do it afterwards?) Thanks, PS: any Grub developer living/working in London? -- Carles Pina i Estany http://pinux.info --k+w/mQv8wyuph6w0 Content-Type: text/x-diff; charset=iso-8859-1 Content-Disposition: attachment; filename="gettext10.patch" Content-Transfer-Encoding: quoted-printable Index: Makefile.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- Makefile.in (revision 2334) +++ Makefile.in (working copy) @@ -123,6 +123,7 @@ PROGRAMS =3D $(bin_UTILITIES) $(sbin_UTILITIES) SCRIPTS =3D $(bin_SCRIPTS) $(sbin_SCRIPTS) $(grub-mkconfig_SCRIPTS) \ $(lib_SCRIPTS) +GRUBD =3D $(srcdir)/util/grub.d =20 CLEANFILES =3D MOSTLYCLEANFILES =3D @@ -187,6 +188,11 @@ endif endif =20 +uptrans: + xgettext -k_ -LC -o - `find "$(srcdir)/" -name '*.c'` -o po/grub.pot + xgettext -k_ -Lshell -o - $(GRUBD)/* -j -o po/grub.pot + + # Used for building modules externally pkglib_BUILDDIR +=3D build_env.mk build_env.mk: Makefile Index: conf/common.rmk =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- conf/common.rmk (revision 2334) +++ conf/common.rmk (working copy) @@ -154,6 +154,12 @@ lib_SCRIPTS +=3D update-grub_lib CLEANFILES +=3D update-grub_lib =20 +grub-gettext_lib: util/grub-gettext_lib.in config.status + ./config.status --file=3D$@:$< + chmod +x $@ +lib_DATA +=3D grub-gettext_lib +CLEANFILES +=3D grub-gettext_lib + %: util/grub.d/%.in config.status ./config.status --file=3D$@:$< chmod +x $@ @@ -354,7 +360,7 @@ terminfo.mod test.mod blocklist.mod hexdump.mod \ read.mod sleep.mod loadenv.mod crc.mod parttool.mod \ pcpart.mod memrw.mod normal.mod sh.mod lua.mod \ - gptsync.mod true.mod probe.mod + gptsync.mod true.mod probe.mod gettext.mod =20 # For gptsync.mod. gptsync_mod_SOURCES =3D commands/gptsync.c @@ -586,6 +592,11 @@ bufio_mod_CFLAGS =3D $(COMMON_CFLAGS) bufio_mod_LDFLAGS =3D $(COMMON_LDFLAGS) =20 +# For gettext.mod. +gettext_mod_SOURCES =3D gettext/gettext.c +gettext_mod_CFLAGS =3D $(COMMON_CFLAGS) +gettext_mod_LDFLAGS =3D $(COMMON_LDFLAGS) + # Misc. pkglib_MODULES +=3D xnu_uuid.mod =20 Index: kern/misc.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- kern/misc.c (revision 2334) +++ kern/misc.c (working copy) @@ -24,6 +24,8 @@ #include #include =20 +const char* (*grub_gettext) (const char *s) =3D grub_gettext_dummy; + void * grub_memmove (void *dest, const void *src, grub_size_t n) { @@ -1080,6 +1082,13 @@ return p - dest; } =20 +/* grub_gettext_dummy is not translating anything. */ +const char * +grub_gettext_dummy (const char *s) +{ + return s; +} + /* Abort GRUB. This function does not return. */ void grub_abort (void) Index: po/ca.po =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- po/ca.po (revision 0) +++ po/ca.po (revision 0) @@ -0,0 +1,25 @@ +#: normal/menu.c:90 +#, c-format +msgid "" +"\n" +" Use the %C and %C keys to select which entry is highlighted.\n" +msgstr "" +"\n" +" Utilitzeu les tecles %C i %C per seleccionar l'entrada.\n" + +#: normal/menu.c:93 +msgid "" +" Press enter to boot the selected OS, 'e' to edit the\n" +" commands before booting or 'c' for a command-line." +msgstr "" +" Presioneu retorn per arrancar el SO seleccionat, 'e' editar\n" +" les comandes abans d'arrancar, 'c' per l=EDnia d'ordres." + +#: util/grub.d/10_linux.in:143 +#, sh-format +msgid "${OS}, linux ${version} (recovery mode)" +msgstr "${OS}, linux ${version} (mode recuperaci=F3)" + +#, sh-format +msgid "hello" +msgstr "hola" Index: po/TODO =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- po/TODO (revision 0) +++ po/TODO (revision 0) @@ -0,0 +1,5 @@ +Prepare a Makefile.in to: + +-Compile all .po to .mo (msgfmt $LANG.po -o $LANG.mo) +-Copy to /usr/share/locale/$LANG/LC_MESSAGES/grub.mo (or /usr/local/shar= e/locale/$LANG/LC_MESSAGES/..., so $prefix...) +-Check that grub-gettext_lib.in is correct Index: include/grub/misc.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- include/grub/misc.h (revision 2334) +++ include/grub/misc.h (working copy) @@ -1,7 +1,7 @@ /* misc.h - prototypes for misc functions */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2008 Free Software= Foundation, Inc. + * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2008,2009 Free Sof= tware Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,6 +32,8 @@ /* XXX: If grub_memmove is too slow, we must implement grub_memcpy. */ #define grub_memcpy(d,s,n) grub_memmove ((d), (s), (n)) =20 +#define _(s) grub_gettext(s) + void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_= t n); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c); @@ -97,6 +99,9 @@ grub_uint64_t EXPORT_FUNC(grub_divmod64) (grub_uint64_t n, grub_uint32_t d, grub_uint32_t *r); =20 +const char *EXPORT_FUNC(grub_gettext_dummy) (const char *s); +extern const char *(*EXPORT_VAR(grub_gettext)) (const char *s);// =3D gr= ub_gettext_dummy; + #ifdef NEED_ENABLE_EXECUTE_STACK void EXPORT_FUNC(__enable_execute_stack) (void *addr); #endif Index: gettext/gettext.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gettext/gettext.c (revision 0) +++ gettext/gettext.c (revision 0) @@ -0,0 +1,300 @@ +/* gettext.c - gettext module */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/*=20 + .mo file information from:=20 + http://www.gnu.org/software/autoconf/manual/gettext/MO-Files.html . +*/ + + +static grub_file_t grub_mofile_open (const char *name); +static grub_file_t fd_mo; + +static int grub_gettext_offsetoriginal; +static int grub_gettext_max; + +static const char* (*grub_gettext_original) (const char *s); + +#define GETTEXT_MAGIC_NUMBER 0 +#define GETTEXT_FILE_FORMAT 4 +#define GETTEXT_NUMBER_OF_STRINGS 8 +#define GETTEXT_OFFSET_ORIGINAL 12 +#define GETTEXT_OFFSET_TRANSLATION 16 + +static int +grub_gettext_get_info (int offset) +{ + int buf; + + grub_file_seek (fd_mo, offset); + grub_file_read (fd_mo, (char*) &buf, 4); + return buf; +} + +static void +grub_gettext_getstring_from_offset (int offset, int length, char *transl= ation) +{ + grub_file_seek (fd_mo,offset); + grub_file_read (fd_mo,translation,length); + translation[length] =3D '\0'; +} + +static char* +grub_gettext_gettranslation_number (int i) +{ + int offsettranslation; + int position; + int length, offset; + char *translation; + + offsettranslation =3D grub_gettext_get_info (GETTEXT_OFFSET_TRANSLATIO= N); + + position=3Doffsettranslation+i*8; + + grub_file_seek (fd_mo, position); + grub_file_read (fd_mo, (char*) &length, 4); + =20 + grub_file_seek (fd_mo, position + 4), + grub_file_read (fd_mo, (char*) &offset, 4); + + translation =3D grub_malloc(length + 1); + grub_gettext_getstring_from_offset (offset, length, translation); + + return translation; +} + +static char* +grub_gettext_getstring_num (int num) +{ + int position; + int length, offset; + char *original; + + /* Get position for string i. */ + position =3D grub_gettext_offsetoriginal + (num * 8); + + /* Get the length of the string i. */ + grub_file_seek (fd_mo, position); + grub_file_read (fd_mo, (char *) &length, 4); + + /* Get the offset of the string i. */ + grub_file_seek (fd_mo, position + 4); + grub_file_read (fd_mo, (char *) &offset, 4); + + /* Get the string i. */ + original =3D grub_malloc (length + 1); + grub_gettext_getstring_from_offset (offset, length, original); + + return original; +} + +static const char* +grub_gettext_translate (const char *orig) +{ + char *current_string; + char *ret; + + int min,max,current; + + if (fd_mo =3D=3D 0) + return orig; + + min =3D 0; + max =3D grub_gettext_max; + + current =3D (max + min) / 2; + + while (current !=3D min && current !=3D max) + { + current_string =3D grub_gettext_getstring_num (current); + /* grub_printf("Current: %s\n",current_string); */ + + /* Search by bissection. */ + if (grub_strcmp (current_string, orig) < 0) + { + grub_free(current_string); + min=3Dcurrent; + } + else if (grub_strcmp (current_string, orig) > 0) + { + grub_free(current_string); + max=3Dcurrent; + } + else if (grub_strcmp (current_string, orig) =3D=3D 0) + { + grub_free(current_string); + return grub_gettext_gettranslation_number (current); + } + current =3D (max+min)/2; + } + + ret =3D grub_malloc(grub_strlen(orig) + 1); + grub_strcpy(ret,orig); + return ret; +} + +// XXX: Return a real grub_err_t or static void +/*static grub_err_t +grub_cmd_translate (struct grub_arg_list *state __attribute__ ((unused))= , + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + if (argc !=3D 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "text to translate require= d"); + + char *translation; + + translation =3D grub_gettext_translate(args[0]); + grub_printf("%s\n",translation); + //grub_printf("grub__: %d\n",grub__); + + return 0; +} +*/ + +/* This is similar to grub_gzfile_open. */ +static grub_file_t +grub_mofile_open (const char *filename) +{ + int unsigned magic; + int version; + + /* Using fd_mo and not another variable because + it's needed for grub_gettext_get_info. */ + + fd_mo =3D grub_file_open (filename); + if (! fd_mo) + { + grub_error (GRUB_ERR_FILE_READ_ERROR, "Cannot read %s",filename); + return 0; + } + + magic =3D grub_gettext_get_info (GETTEXT_MAGIC_NUMBER); + + if (magic !=3D 0x950412de) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, "mo: invalid mo file: %s", fil= ename); + grub_file_close (fd_mo); + fd_mo =3D 0; + return 0; + } + =20 + version =3D grub_gettext_get_info (GETTEXT_FILE_FORMAT); + + if (version !=3D 0) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, "mo: invalid mo version in fil= e: %s", filename); + fd_mo =3D 0; + return 0; + } + =20 + /* + Do we want .mo.gz files? Then, the code: + file =3D grub_gzio_open (io, 0); // 0: transparent + if (! file) + { + grub_printf("Problems opening the file\n"); + grub_file_close (io); + return 0; + } + */ + + return fd_mo; +} + +static void +grub_gettext_init_ext (const char *lang) +{ + char *mo_file; + char *locale_prefix; + + locale_prefix =3D grub_env_get ("locale_prefix"); + =20 + fd_mo =3D 0; + =20 + // mo_file e.g.: /usr/share/locale/ca/LC_MESSAGES/grub.mo + + mo_file =3D grub_malloc (grub_strlen (locale_prefix) + sizeof ("/") + = grub_strlen (lang) + sizeof ("/LC_MESSAGES/grub.mo")); + =20 + if (! mo_file) + return; + + grub_sprintf (mo_file, "%s/%s/LC_MESSAGES/grub.mo", locale_prefix, lan= g); + /* XXX: lang is written by the user, need to sanitaze the input? */ + + fd_mo =3D grub_mofile_open(mo_file); + grub_free (mo_file); + + if (fd_mo) + { + grub_gettext_offsetoriginal =3D grub_gettext_get_info(GETTEXT_OFFS= ET_ORIGINAL); + grub_gettext_max =3D grub_gettext_get_info(GETTEXT_NUMBER_OF_STRIN= GS); + + grub_gettext_original =3D grub_gettext; + grub_gettext =3D grub_gettext_translate; + } +} + +static char* +grub_gettext_env_write_lang (struct grub_env_var *var __attribute__ ((un= used)), + const char *val) +{ + grub_gettext_init_ext (val); + + return grub_strdup (val); +} + +GRUB_MOD_INIT(gettext) +{ + (void)mod; /* To stop warning. */ +=20 + const char *lang; + + lang =3D grub_env_get ("lang");=20 + + grub_gettext_init_ext (lang); + + /* Testing: + grub_register_command ("_", grub_cmd_translate, GRUB_COMMAND_FLAG_BOTH= , + "_", "internalization support trans", 0); + */ + + /* Reload .mo file information if lang changes. */ + grub_register_variable_hook ("lang", NULL, grub_gettext_env_write_lang= ); + + /* Preserve hooks after context changes. */ + grub_env_export ("lang"); +} + +GRUB_MOD_FINI(gettext) +{ + if (fd_mo !=3D 0) + grub_file_close(fd_mo); + + grub_gettext =3D grub_gettext_original; +} Index: normal/menu_text.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- normal/menu_text.c (revision 2334) +++ normal/menu_text.c (working copy) @@ -93,8 +93,8 @@ } else { - grub_printf ("\n\ - Use the %C and %C keys to select which entry is highlighted.\n", + grub_printf (_("\n\ + Use the %C and %C keys to select which entry is highlighted.\n"), (grub_uint32_t) GRUB_TERM_DISP_UP, (grub_uint32_t) GRUB_TERM_DISP_D= OWN); grub_printf ("\ Press enter to boot the selected OS, \'e\' to edit the\n\ Index: util/grub.d/10_linux.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- util/grub.d/10_linux.in (revision 2334) +++ util/grub.d/10_linux.in (working copy) @@ -141,10 +141,10 @@ linux_root_device_thisversion=3D${GRUB_DEVICE} fi =20 - linux_entry "${OS}, Linux ${version}" \ - "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" - linux_entry "${OS}, Linux ${version} (recovery mode)" \ - "single ${GRUB_CMDLINE_LINUX}" + linux_entry $eval_gettext ("${OS}, Linux ${version}" \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}") + linux_entry $eval_gettext ("${OS}, Linux ${version} (recovery mode)" \ + "single ${GRUB_CMDLINE_LINUX}") =20 list=3D`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` done Index: util/grub.d/00_header.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- util/grub.d/00_header.in (revision 2334) +++ util/grub.d/00_header.in (working copy) @@ -22,6 +22,7 @@ exec_prefix=3D@exec_prefix@ libdir=3D@libdir@ grub_prefix=3D`echo /boot/grub | sed ${transform}` +locale_prefix=3D"/usr/share/locale" # TODO: dynamic with exec_prefix ? =20 . ${libdir}/grub/grub-mkconfig_lib =20 @@ -112,3 +113,18 @@ EOF ;; esac + +if test -e ${grub_prefix}/gettext.mod -a -d /usr/share/locale; then + # Make the locales accesible + prepare_grub_to_access_device `${grub_probe} --target=3Ddevice ${local= e_prefix}` + lang=3D`get_locale_lang` + grub_locale_prefix=3D`make_system_path_relative_to_its_root ${locale_p= refix}` + cat << EOF +# Gettext variables and module +set locale_prefix=3D${grub_locale_prefix} +set lang=3D${lang} +insmod gettext=20 +EOF +else + echo "gettext module is not available" +fi Index: util/grub-gettext_lib.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- util/grub-gettext_lib.in (revision 0) +++ util/grub-gettext_lib.in (revision 0) @@ -0,0 +1,23 @@ +# Configuration of grub-gettext +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix=3D@prefix@ +exec_prefix=3D@exec_prefix@ +libdir=3D@libdir@ + +TEXTDOMAINDIR=3D@prefix@/share/locale +TEXTDOMAIN=3Dgrub +. gettext.sh Property changes on: util/grub-gettext_lib.in ___________________________________________________________________ Added: svn:mergeinfo Index: util/grub-mkconfig_lib.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- util/grub-mkconfig_lib.in (revision 2334) +++ util/grub-mkconfig_lib.in (working copy) @@ -176,3 +176,14 @@ fi return 0 } + +get_locale_lang () +{ + lang=3D"`echo ${LANG} | cut -d _ -f 1`" + if [ "x${lang}" =3D "x" ] ; then + return 1 + else + echo "${lang}" + return 0 + fi +} --k+w/mQv8wyuph6w0--