From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id uCz2HwZjjF+9EgAA0tVLHw (envelope-from ) for ; Sun, 18 Oct 2020 15:45:10 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id ENPiGwZjjF/uMQAA1q6Kng (envelope-from ) for ; Sun, 18 Oct 2020 15:45:10 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 0897D9401BF for ; Sun, 18 Oct 2020 15:45:10 +0000 (UTC) Received: from localhost ([::1]:43278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kUArt-0003Dw-1Q for larch@yhetil.org; Sun, 18 Oct 2020 11:45:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50128) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kUArm-0003Db-Il for guix-patches@gnu.org; Sun, 18 Oct 2020 11:45:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:55605) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kUArm-0002Wu-9e for guix-patches@gnu.org; Sun, 18 Oct 2020 11:45:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kUArm-000185-68 for guix-patches@gnu.org; Sun, 18 Oct 2020 11:45:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#35394] [PATCH 4/4 v4] Grub i18n Resent-From: Miguel =?UTF-8?Q?=C3=81ngel?= Arruga Vivas Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 18 Oct 2020 15:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 35394 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 35394@debbugs.gnu.org Received: via spool by 35394-submit@debbugs.gnu.org id=B35394.16030358614276 (code B ref 35394); Sun, 18 Oct 2020 15:45:02 +0000 Received: (at 35394) by debbugs.gnu.org; 18 Oct 2020 15:44:21 +0000 Received: from localhost ([127.0.0.1]:38918 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kUAr6-00016t-N2 for submit@debbugs.gnu.org; Sun, 18 Oct 2020 11:44:21 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:39788) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kUAr4-00016a-60 for 35394@debbugs.gnu.org; Sun, 18 Oct 2020 11:44:18 -0400 Received: by mail-wr1-f68.google.com with SMTP id y12so8656067wrp.6 for <35394@debbugs.gnu.org>; Sun, 18 Oct 2020 08:44:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=NhVBdSDrsNv9hT13jxYz2M0t7xSZpWC65xsKs9ZTaV8=; b=tkl+tv+8cgw+US25bI4YIuaIXsRqENjUQ/uThV5nv8ZN0/ZHCnn7DM1zbBn3o6zn8K nk6B/o+B8r6Ppf8BAU8uzBoj5VNMvL8dRP1knn6r91TsKH1sPICJ4I2sZmFnKPB9ob0r tmKn0Y9rtIvWfMRrUF4SP6Qk46GYGUY3r16YhFqQbec2BhReU2leyg29oi6QZE1DKMJB 38NXRjzX6QunQtSqpWR65qIDxFi/MzmpjoxWDwKSbXH1SI2zV2JaSBPE3lWG2rbRee/h T142MNfkCHlErEHPOSX5u3J1keGxi0Al5bH6KBWSZ8UV88J4F+yiVl41bOCCzrUSLX6b 3iSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=NhVBdSDrsNv9hT13jxYz2M0t7xSZpWC65xsKs9ZTaV8=; b=uguF8Mcu8hDb8wvdo/JbA6/HqRSNpYhTvJ8a/5+VYhMFrmq/AeqXA9DArW/lySpYdh mf2siPxwaUv/NrlSG2lRTu759noIiTpyk3yQxP48eNzAKPO+l719PRltyPjsnt3XcX5p Y2YLkMaaoeY4XQEpAsDq+syiohD5cgJIF1nsFJMjfBCOnJtuBs7QHt4GSD3HBV7YkOA0 +yNRax/Y/xhFCkzNWkzOzq9JWERfYCmvEBBulYO7iYQRNIY0zzCicA46whGiv1H/LAPM q8ibfEHWOAH5EpY+cEHrEok09Wpjf4+1lyFZ7bsQcnFTQdoRK7BTImbtw2wwoEZrbUPH Jb5Q== X-Gm-Message-State: AOAM531nDWXoG+hjdtDmL8j6/eJTEaBtPs/zZgjWodIk6+qiFd7H1sbS kHNyP2fCUZaIQrJXgfdoJDKHwHeFerZIbQ== X-Google-Smtp-Source: ABdhPJxUpCvKp6CjuD5l7xCoYmvqrJX6E8tzKlSL9TUhbXpPRc/mf+uBZTM4ojHNHE8L9fVqvPGP0A== X-Received: by 2002:adf:9e05:: with SMTP id u5mr15244429wre.78.1603035851935; Sun, 18 Oct 2020 08:44:11 -0700 (PDT) Received: from unfall (218.139.134.37.dynamic.jazztel.es. [37.134.139.218]) by smtp.gmail.com with ESMTPSA id y14sm12070729wma.48.2020.10.18.08.44.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Oct 2020 08:44:11 -0700 (PDT) From: Miguel =?UTF-8?Q?=C3=81ngel?= Arruga Vivas References: <20190423151702.05258473@gmail.com> <87ft6k7sn2.fsf@gmail.com> <87362c6cew.fsf@gnu.org> <87v9f7po4x.fsf_-_@gmail.com> Date: Sun, 18 Oct 2020 17:43:16 +0200 In-Reply-To: <87v9f7po4x.fsf_-_@gmail.com> ("Miguel =?UTF-8?Q?=C3=81ngel?= Arruga Vivas"'s message of "Sun, 18 Oct 2020 17:09:02 +0200") Message-ID: <87o8kzpmjv.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.2 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -0.8 (/) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=fail (rsa verify failed) header.d=gmail.com header.s=20161025 header.b=tkl+tv+8; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: 0.09 X-TUID: 0a7SMEhCp1jj --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Sorry, please disregard the last patch, it was a non-working version. I tested this one with Grub and the boot-parameters test (for the label modification). I leave the open points for reference. Miguel =C3=81ngel Arruga Vivas writes: > (...) > It brings the whole glibc-locales to the grub and extlinux configuration > builders, and changes again boot-parameters. It would be optimal to > create a minimal locale with the desired locale, as glibc-utf8-locales > doesn't work with my to-go test target (es_ES.utf8) because setlocale > raises an exception. > > I have in my TODO list to extract translate-label somewhere else, even > though I'm not sure where could it fit, and to sanitize some inputs to > ensure the correct generation. The latter should be ready this week, > the first depends on finding (or creating) the right place. Happy hacking! Miguel --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-system-nls-for-boot-labels.patch Content-Description: 0001-system-nls-for-boot-labels.patch >From e9f3c255c13abc14e1f0decf5460b7a2f9a2d162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Arruga=20Vivas?= Date: Sat, 17 Oct 2020 21:27:51 +0200 Subject: [PATCH] system: nls for boot labels. * gnu/bootloader/extlinux.scm (extlinux-configuration-file): Add keyword locale. [translate-label]: New function that formats the label after translation. [menu-entry->gexp]: Use translate-label. [init-gettext]: Init gettext with the language provided through the configuration. [builder]: Use init-gettext, define G_ and translate strings. * gnu/bootloader/grub.scm (eye-candy): Translate string. (grub-configuration-file)[translate-label]: New function. [menu-entry->gexp]: Use translate-label. [init-gettext]: New g-exp variable. [locale-config]: Translate string. [builder]: Use init-gettext, define G_ and translate strings. * gnu/system.scm (kernel->boot-label): Modify return type, and document it, to allow correct translation of the labels. * po/guix/POTFILES.in: Add gnu/bootloader/grub.scm. * tests/boot-parameters.scm (%default-label): Update to the new format. (%old-label): Renamed from old %default-label. (read old format): New test case. --- gnu/bootloader/extlinux.scm | 52 +++++++++++++++++++++++++--- gnu/bootloader/grub.scm | 68 ++++++++++++++++++++++++++++++++----- gnu/system.scm | 21 ++++++------ po/guix/POTFILES.in | 2 ++ tests/boot-parameters.scm | 6 +++- 5 files changed, 123 insertions(+), 26 deletions(-) diff --git a/gnu/bootloader/extlinux.scm b/gnu/bootloader/extlinux.scm index 6b5ff298e7..36d0bcdae4 100644 --- a/gnu/bootloader/extlinux.scm +++ b/gnu/bootloader/extlinux.scm @@ -19,14 +19,19 @@ (define-module (gnu bootloader extlinux) #:use-module (gnu bootloader) + #:use-module (gnu packages base) #:use-module (gnu packages bootloaders) + #:use-module (gnu packages package-management) + #:use-module (gnu system locale) #:use-module (guix gexp) #:use-module (guix utils) + #:use-module (ice-9 match) #:export (extlinux-bootloader extlinux-bootloader-gpt)) (define* (extlinux-configuration-file config entries #:key + (locale #f) (system (%current-system)) (old-entries '()) #:allow-other-keys) @@ -38,8 +43,38 @@ corresponding to old generations of the system." (define all-entries (append entries (bootloader-configuration-menu-entries config))) + (define (translate-label label) + (match label + (('hurd name version) + ;; TRANSLATORS: The first parameter is the capitalized package name + ;; for the Hurd kernel, which uses the definite article in English. + ;; The second parameter contains the version string. + #~(format #f (G_ "GNU with the ~a ~a") package version)) + (('linux name version) + ;; TRANSLATORS: The first parameter is the capitalized package name + ;; for Linux kernel, which doesn't use the definite article in + ;; English. The second parameter contains the version string. + #~(format #f (G_ "GNU with ~a ~a") package version)) + (('unknown) + ;; TRANSLATORS: This is the label for an unknown system to be booted. + #~(G_ "GNU")) + ((? string? old-format) + ;; We cannot translate properly the old format. + old-format))) + + (define init-gettext + #~(let ((locale #$(and locale + (locale-definition-name + (locale-name->definition locale))))) + (when locale + (setenv "GUIX_LOCPATH" (string-append #$glibc-locales + "/lib/locale/")) + (bindtextdomain "guix" (string-append #$guix "/share/locale")) + (textdomain "guix") + (setlocale LC_ALL locale)))) + (define (menu-entry->gexp entry) - (let ((label (menu-entry-label entry)) + (let ((label (translate-label (menu-entry-label entry))) (kernel (menu-entry-linux entry)) (kernel-arguments (menu-entry-linux-arguments entry)) (initrd (menu-entry-initrd entry))) @@ -57,13 +92,20 @@ corresponding to old generations of the system." (define builder #~(call-with-output-file #$output (lambda (port) + #$init-gettext + ;; Ensure xgettext extracts translatable messages + ;; with our current keywords. + (define G_ gettext) (let ((timeout #$(bootloader-configuration-timeout config))) - (format port "# This file was generated from your Guix configuration. Any changes -# will be lost upon reconfiguration. -UI menu.c32 -MENU TITLE GNU Guix Boot Options + (format port "~aUI menu.c32 +MENU TITLE ~a PROMPT ~a TIMEOUT ~a~%" + (G_ "\ +# This file was generated from your Guix configuration. Any changes +# will be lost upon reconfiguration. +") ;; Keep line break to not duplicate grub.scm message. + (G_ "GNU Guix Boot Options") (if (> timeout 0) 1 0) ;; timeout is expressed in 1/10s of seconds. (* 10 timeout)) diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm index 611580a350..e4df9b5009 100644 --- a/gnu/bootloader/grub.scm +++ b/gnu/bootloader/grub.scm @@ -35,8 +35,10 @@ #:use-module (gnu system file-systems) #:use-module (gnu system keyboard) #:use-module (gnu system locale) + #:use-module (gnu packages base) #:use-module (gnu packages bootloaders) #:autoload (gnu packages gtk) (guile-cairo guile-rsvg) + #:use-module (gnu packages package-management) #:autoload (gnu packages xorg) (xkeyboard-config) #:use-module (ice-9 match) #:use-module (ice-9 regex) @@ -182,7 +184,7 @@ fi~%" (and image #~(format #$port " -# Set 'root' to the partition that contains /gnu/store. +# ~a ~a ~a @@ -196,6 +198,8 @@ else set menu_color_normal=cyan/blue set menu_color_highlight=white/blue fi~%" + (G_ + "Set 'root' to the partition that contains /gnu/store.") #$(grub-root-search store-device font-file) #$(setup-gfxterm config font-file) #$(grub-setup-io config) @@ -348,8 +352,28 @@ STORE-DIRECTORY-PREFIX may be used to specify a store prefix, as is required when booting a root file system on a Btrfs subvolume." (define all-entries (append entries (bootloader-configuration-menu-entries config))) + + (define (translate-label label) + (match label + (('hurd name version) + ;; TRANSLATORS: The first parameter is the capitalized package name + ;; for the Hurd kernel, which uses the definite article in English. + ;; The second parameter contains the version string. + #~(format #f (G_ "GNU with the ~a ~a") package version)) + (('linux name version) + ;; TRANSLATORS: The first parameter is the capitalized package name + ;; for Linux kernel, which doesn't use the definite article in + ;; English. The second parameter contains the version string. + #~(format #f (G_ "GNU with ~a ~a") package version)) + (('unknown) + ;; TRANSLATORS: This is the label for an unknown system to be booted. + #~(G_ "GNU")) + ((? string? old-format) + ;; We cannot translate properly the old format. + old-format))) + (define (menu-entry->gexp entry) - (let ((label (menu-entry-label entry)) + (let ((label (translate-label (menu-entry-label entry))) (linux (menu-entry-linux entry)) (device (menu-entry-device entry)) (device-mount-point (menu-entry-device-mount-point entry))) @@ -401,19 +425,36 @@ menuentry ~s { #:store-directory-prefix store-directory-prefix #:port #~port))) + (define init-gettext + #~(let ((locale #$(and locale + (locale-definition-name + (locale-name->definition locale))))) + (when locale + (setenv "GUIX_LOCPATH" (string-append #$glibc-locales + "/lib/locale/")) + (bindtextdomain "guix" (string-append #$guix "/share/locale")) + (textdomain "guix") + (setlocale LC_ALL locale)))) + (define locale-config #~(let ((locale #$(and locale (locale-definition-source (locale-name->definition locale))))) (when locale (format port "\ -# Localization configuration. +# ~a if search --file --set boot_partition /grub/grub.cfg; then set locale_dir=(${boot_partition})/grub/locale else set locale_dir=/boot/grub/locale fi -set lang=~a~%" locale)))) +set lang=~a~%" + ;; XXX: This should sanitized with a function that + ;; inserts # at the beginning of each line. + ;; TRANSLATORS: This must be one line or start each line + ;; with #. + (G_ "Localization configuration.") + locale)))) (define keyboard-layout-config (let* ((layout (bootloader-configuration-keyboard-layout config)) @@ -434,10 +475,17 @@ keymap ~a~%" #$keymap)))) (define builder #~(call-with-output-file #$output (lambda (port) + #$init-gettext + ;; Ensure xgettext extracts translatable messages + ;; with our current keywords. + (define G_ gettext) (format port - "# This file was generated from your Guix configuration. Any changes + ;; XXX: This should sanitized with a function to + ;; ensure the # at the beginning of each line. + (G_ "\ +# This file was generated from your Guix configuration. Any changes # will be lost upon reconfiguration. -") +")) #$(sugar) #$locale-config #$keyboard-layout-config @@ -450,16 +498,18 @@ set timeout=~a~%" #$@(if (pair? old-entries) #~((format port " -submenu \"GNU system, old configurations...\" {~%") +submenu \"~a\" {~%" + (G_ "GNU system, old configurations...")) #$@(map menu-entry->gexp old-entries) (format port "}~%")) #~()) (format port " if [ \"${grub_platform}\" == efi ]; then - menuentry \"Firmware setup\" { + menuentry \"~a\" { fwsetup } -fi~%")))) +fi~%" + (G_ "Firmware setup"))))) ;; Since this file is rather unique, there's no point in trying to ;; substitute it. diff --git a/gnu/system.scm b/gnu/system.scm index a3122eaa65..1257aa6223 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -1194,20 +1194,19 @@ listed in OS. The C library expects to find it under #:libcs (operating-system-locale-libcs os))) (define* (kernel->boot-label kernel #:key hurd) - "Return a label for the bootloader menu entry that boots KERNEL." + "Return a label for the bootloader menu entry that boots KERNEL. +Label is a list that contains the kernel identifier, @code{'hurd} or +@code{'linux}, its title name and the version, or @code{'unknown}." (cond ((package? hurd) - (string-append "GNU with the " - (string-titlecase (package-name hurd)) " " - (package-version hurd))) + (list 'hurd (string-titlecase (package-name hurd)) + (package-version hurd))) ((package? kernel) - (string-append "GNU with " - (string-titlecase (package-name kernel)) " " - (package-version kernel))) + (list 'linux (string-titlecase (package-name kernel)) + (package-version kernel))) ((inferior-package? kernel) - (string-append "GNU with " - (string-titlecase (inferior-package-name kernel)) " " - (inferior-package-version kernel))) - (else "GNU"))) + (list 'linux (string-titlecase (inferior-package-name kernel)) + (inferior-package-version kernel))) + (else '(unknown)))) (define (operating-system-default-label os) "Return the default label for OS, as it will appear in the bootloader menu diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in index b877fac9df..4386c8763d 100644 --- a/po/guix/POTFILES.in +++ b/po/guix/POTFILES.in @@ -40,6 +40,8 @@ gnu/installer/user.scm gnu/installer/utils.scm gnu/machine/ssh.scm gnu/packages/bootstrap.scm +gnu/bootloader/grub.scm +gnu/bootloader/extlinux.scm guix/build/utils.scm guix/scripts.scm guix/scripts/build.scm diff --git a/tests/boot-parameters.scm b/tests/boot-parameters.scm index d7e579bc89..678de1475f 100644 --- a/tests/boot-parameters.scm +++ b/tests/boot-parameters.scm @@ -34,7 +34,8 @@ #:use-module (srfi srfi-64) #:use-module (rnrs bytevectors)) -(define %default-label "GNU with Linux-libre 99.1.2") +(define %old-label "GNU with Linux-libre 99.1.2") +(define %default-label '(linux "Linux-libre" "99.1.2")) (define %default-kernel-path (string-append (%store-prefix) "/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz-linux-libre-99.1.2")) @@ -156,6 +157,9 @@ #:with-store #false #:locale #false))) +(test-assert "read, read old format" + (test-read-boot-parameters #:label %old-label)) + (test-equal "read, default equality" %grub-boot-parameters (test-read-boot-parameters)) -- 2.28.0 --=-=-=--