GNU bug report logs - #52736
[PATCH] home: services: Make strings in Gexps translateble.

Previous Next

Package: guix-patches;

Reported by: Xinglu Chen <public <at> yoctocell.xyz>

Date: Wed, 22 Dec 2021 15:38:01 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 52736 in the body.
You can then email your comments to 52736 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to ludo <at> gnu.org, guix-patches <at> gnu.org:
bug#52736; Package guix-patches. (Wed, 22 Dec 2021 15:38:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Xinglu Chen <public <at> yoctocell.xyz>:
New bug report received and forwarded. Copy sent to ludo <at> gnu.org, guix-patches <at> gnu.org. (Wed, 22 Dec 2021 15:38:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Xinglu Chen <public <at> yoctocell.xyz>
To: guix-patches <at> gnu.org
Subject: [PATCH] home: services: Make strings in Gexps translateble.
Date: Wed, 22 Dec 2021 16:37:09 +0100
* gnu/home/services.scm (%initialize-gettext): New variable.
(compute-on-first-login-script): Use it.
(compute-on-change-gexp): Likewise.
* gnu/home/services/symlink-manager.scm (update-symlinks-script): Likewise.
* po/guix/POTFILES.in: Add gnu/home-services.scm and
gnu/home/services/symlink-manager.scm.

Suggested-by: Ludovic Courtès <ludo <at> gnu.org>
Link: <https://yhetil.org/guix-bugs/87sfvy8k1u.fsf <at> gnu.org>
---
Is there a way to test if these strings are actually translatable
without pushing this to the Git repo and going to Weblate to check?

 gnu/home/services.scm                 | 66 ++++++++++++++++++---------
 gnu/home/services/symlink-manager.scm | 42 +++++++++--------
 po/guix/POTFILES.in                   |  2 +
 3 files changed, 69 insertions(+), 41 deletions(-)

diff --git a/gnu/home/services.scm b/gnu/home/services.scm
index 1aeca95e5a..2a3cb44952 100644
--- a/gnu/home/services.scm
+++ b/gnu/home/services.scm
@@ -19,6 +19,7 @@
 
 (define-module (gnu home services)
   #:use-module (gnu services)
+  #:use-module ((gnu packages package-management) #:select (guix))
   #:use-module (guix channels)
   #:use-module (guix monads)
   #:use-module (guix store)
@@ -28,7 +29,7 @@ (define-module (gnu home services)
   #:use-module (guix ui)
   #:use-module (guix discovery)
   #:use-module (guix diagnostics)
-
+  #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
 
@@ -41,7 +42,9 @@ (define-module (gnu home services)
             home-run-on-change-service-type
             home-provenance-service-type
 
-            fold-home-service-types)
+            fold-home-service-types
+
+            %initialize-gettext)
 
   #:re-export (service
                service-type
@@ -274,25 +277,38 @@ (define home-files-service-type
                 (description "Configuration files for programs that
 will be put in @file{~/.guix-home/files}.")))
 
+(define %initialize-gettext
+  #~(begin
+      (bindtextdomain %gettext-domain
+                      (string-append #$guix "/share/locale"))
+      (textdomain %gettext-domain)
+      (setlocale LC_ALL "")))
+
 (define (compute-on-first-login-script _ gexps)
   (program-file
    "on-first-login"
-   #~(let* ((xdg-runtime-dir (or (getenv "XDG_RUNTIME_DIR")
-                                 (format #f "/run/user/~a" (getuid))))
-            (flag-file-path (string-append
-                             xdg-runtime-dir "/on-first-login-executed"))
-            (touch (lambda (file-name)
-                     (call-with-output-file file-name (const #t)))))
-       ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
-       ;; allows to launch on-first-login script on first login only
-       ;; after complete logout/reboot.
-       (if (file-exists? xdg-runtime-dir)
-           (unless (file-exists? flag-file-path)
-             (begin #$@gexps (touch flag-file-path)))
-           (display "XDG_RUNTIME_DIR doesn't exists, on-first-login script
+   #~(begin
+       (use-modules (guix i18n))
+       #$%initialize-gettext
+
+       (let* ((xdg-runtime-dir (or (getenv "XDG_RUNTIME_DIR")
+                                   (format #f "/run/user/~a" (getuid))))
+              (flag-file-path (string-append
+                               xdg-runtime-dir "/on-first-login-executed"))
+              (touch (lambda (file-name)
+                       (call-with-output-file file-name (const #t)))))
+         ;; XDG_RUNTIME_DIR dissapears on logout, that means such trick
+         ;; allows to launch on-first-login script on first login only
+         ;; after complete logout/reboot.
+         (if (file-exists? xdg-runtime-dir)
+             (unless (file-exists? flag-file-path)
+               (begin #$@gexps (touch flag-file-path)))
+             ;; TRANSLATORS: 'on-first-login' is the name of a service and
+             ;; shouldn't be translated
+             (display (G_ "XDG_RUNTIME_DIR doesn't exists, on-first-login script
 won't execute anything.  You can check if xdg runtime directory exists,
 XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the
-script by running '$HOME/.guix-home/on-first-login'")))))
+script by running '$HOME/.guix-home/on-first-login'")))))))
 
 (define (on-first-login-script-entry on-first-login)
   "Return, as a monadic value, an entry for the on-first-login script
@@ -385,6 +401,10 @@ (define home-activation-service-type
 
 (define (compute-on-change-gexp eval-gexps? pattern-gexp-tuples)
   #~(begin
+      (use-modules (guix i18n))
+
+      #$%initialize-gettext
+
       (define (equal-regulars? file1 file2)
         "Check if FILE1 and FILE2 are bit for bit identical."
         (let* ((cmp-binary #$(file-append
@@ -449,21 +469,23 @@ (define expressions-to-eval
                               "/gnu/store/non-existing-generation")
                           "/" (car x)))
                   (file2 (string-append (getenv "GUIX_NEW_HOME") "/" (car x)))
-                  (_ (format #t "Comparing ~a and\n~10t~a..." file1 file2))
+                  (_ (format #t (G_ "Comparing ~a and\n~10t~a...") file1 file2))
                   (any-changes? (something-changed? file1 file2))
-                  (_ (format #t " done (~a)\n"
+                  (_ (format #t (G_ " done (~a)\n")
                              (if any-changes? "changed" "same"))))
              (if any-changes? (cadr x) "")))
          '#$pattern-gexp-tuples))
 
       (if #$eval-gexps?
           (begin
-            (display "Evaling on-change gexps.\n\n")
+            ;;; TRANSLATORS: 'on-change' is the name of a service type, it
+            ;;; probably shouldn't be translated.
+            (display (G_ "Evaluating on-change gexps.\n\n"))
             (for-each primitive-eval expressions-to-eval)
-            (display "On-change gexps evaluation finished.\n\n"))
+            (display (G_ "On-change gexps evaluation finished.\n\n")))
           (display "\
-On-change gexps won't be evaluated, disabled by service
-configuration.\n"))))
+On-change gexps won't be evaluated; evaluation has been disabled in the
+service configuration"))))
 
 (define home-run-on-change-service-type
   (service-type (name 'home-run-on-change)
diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm
index f4251e1e6a..314da3ba3e 100644
--- a/gnu/home/services/symlink-manager.scm
+++ b/gnu/home/services/symlink-manager.scm
@@ -41,7 +41,9 @@ (define (update-symlinks-script)
        (use-modules (ice-9 ftw)
                     (ice-9 curried-definitions)
                     (ice-9 match)
-                    (srfi srfi-1))
+                    (srfi srfi-1)
+                    (guix i18n))
+       #$%initialize-gettext
        (define ((simplify-file-tree parent) file)
          "Convert the result produced by `file-system-tree' to less
 verbose and more suitable for further processing format.
@@ -139,20 +141,21 @@ (define ((file-tree-traverse preordering) node)
               (backup-file
                (lambda (path)
                  (mkdir-p backup-dir)
-                 (format #t "Backing up ~a..." (get-target-path path))
+                 (format #t (G_ "Backing up ~a...") (get-target-path path))
                  (mkdir-p (dirname (get-backup-path path)))
                  (rename-file (get-target-path path) (get-backup-path path))
-                 (display " done\n")))
+                 (display (G_ " done\n"))))
 
               (cleanup-symlinks
                (lambda ()
                  (let ((to-delete ((file-tree-traverse #f) old-tree)))
                    (display
-                    "Cleaning up symlinks from previous home-environment.\n\n")
+                    (G_
+                    "Cleaning up symlinks from previous home-environment.\n\n"))
                    (map
                     (match-lambda
                       (('dir . ".")
-                       (display "Cleanup finished.\n\n"))
+                       (display (G_ "Cleanup finished.\n\n")))
 
                       (('dir . path)
                        (if (and
@@ -160,12 +163,13 @@ (define ((file-tree-traverse preordering) node)
                             (directory? (get-target-path path))
                             (empty-directory? (get-target-path path)))
                            (begin
-                             (format #t "Removing ~a..."
+                             (format #t (G_ "Removing ~a...")
                                      (get-target-path path))
                              (rmdir (get-target-path path))
-                             (display " done\n"))
+                             (display (G_ " done\n")))
                            (format
-                            #t "Skipping ~a (not an empty directory)... done\n"
+                            #t
+                            (G_ "Skipping ~a (not an empty directory)... done\n")
                             (get-target-path path))))
 
                       (('file . path)
@@ -175,12 +179,12 @@ (define ((file-tree-traverse preordering) node)
                          ;; up later during create-symlinks phase.
                          (if (symlink-to-store? (get-target-path path))
                              (begin
-                               (format #t "Removing ~a..." (get-target-path path))
+                               (format #t (G_ "Removing ~a...") (get-target-path path))
                                (delete-file (get-target-path path))
-                               (display " done\n"))
+                               (display (G_ " done\n")))
                              (format
                               #t
-                              "Skipping ~a (not a symlink to store)... done\n"
+                              (G_ "Skipping ~a (not a symlink to store)... done\n")
                               (get-target-path path))))))
                     to-delete))))
 
@@ -191,9 +195,9 @@ (define ((file-tree-traverse preordering) node)
                     (match-lambda
                       (('dir . ".")
                        (display
-                        "New symlinks to home-environment will be created soon.\n")
+                        (G_ "New symlinks to home-environment will be created soon.\n"))
                        (format
-                        #t "All conflicting files will go to ~a.\n\n" backup-dir))
+                        #t (G_ "All conflicting files will go to ~a.\n\n") backup-dir))
 
                       (('dir . path)
                        (let ((target-path (get-target-path path)))
@@ -203,20 +207,20 @@ (define ((file-tree-traverse preordering) node)
 
                          (if (file-exists? target-path)
                              (format
-                              #t "Skipping   ~a (directory already exists)... done\n"
+                              #t (G_ "Skipping   ~a (directory already exists)... done\n")
                               target-path)
                              (begin
-                               (format #t "Creating   ~a..." target-path)
+                               (format #t (G_ "Creating   ~a...") target-path)
                                (mkdir target-path)
-                               (display " done\n")))))
+                               (display (G_ " done\n"))))))
 
                       (('file . path)
                        (when (file-exists? (get-target-path path))
                          (backup-file path))
-                       (format #t "Symlinking ~a -> ~a..."
+                       (format #t (G_ "Symlinking ~a -> ~a...")
                                (get-target-path path) (get-source-path path))
                        (symlink (get-source-path path) (get-target-path path))
-                       (display " done\n")))
+                       (display (G_ " done\n"))))
                     to-create)))))
 
          (when old-tree
@@ -227,7 +231,7 @@ (define ((file-tree-traverse preordering) node)
          (symlink new-home new-he-path)
          (rename-file new-he-path he-path)
 
-         (display " done\nFinished updating symlinks.\n\n")))))
+         (display (G_" done\nFinished updating symlinks.\n\n"))))))
 
 
 (define (update-symlinks-gexp _)
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index a8ce6c3e8f..ee77bb7317 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -5,6 +5,8 @@ gnu/packages.scm
 gnu/services.scm
 gnu/system.scm
 gnu/services/shepherd.scm
+gnu/services/home.scm
+gnu/services/home/symlink-manager.scm
 gnu/system/file-systems.scm
 gnu/system/image.scm
 gnu/system/linux-container.scm

base-commit: 5b8ae331f73d970e29566b82c9fe36aa0d77ccb7
-- 
2.33.1







Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Mon, 03 Jan 2022 14:12:01 GMT) Full text and rfc822 format available.

Notification sent to Xinglu Chen <public <at> yoctocell.xyz>:
bug acknowledged by developer. (Mon, 03 Jan 2022 14:12:02 GMT) Full text and rfc822 format available.

Message #10 received at 52736-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Xinglu Chen <public <at> yoctocell.xyz>
Cc: 52736-done <at> debbugs.gnu.org
Subject: Re: [bug#52736] [PATCH] home: services: Make strings in Gexps
 translateble.
Date: Mon, 03 Jan 2022 15:10:52 +0100
Hello,

Xinglu Chen <public <at> yoctocell.xyz> skribis:

> * gnu/home/services.scm (%initialize-gettext): New variable.
> (compute-on-first-login-script): Use it.
> (compute-on-change-gexp): Likewise.
> * gnu/home/services/symlink-manager.scm (update-symlinks-script): Likewise.
> * po/guix/POTFILES.in: Add gnu/home-services.scm and
> gnu/home/services/symlink-manager.scm.
>
> Suggested-by: Ludovic Courtès <ludo <at> gnu.org>
> Link: <https://yhetil.org/guix-bugs/87sfvy8k1u.fsf <at> gnu.org>

Applied with a fix in POTFILES.in (the file names were incorrect).

> Is there a way to test if these strings are actually translatable
> without pushing this to the Git repo and going to Weblate to check?

Yes, you can run:

  # Regenerate the “PO template”.
  make -C po/guix guix.pot-update

  # Check whether it contains the new strings.
  grep "XDG_RUNTIME_DIR does" po/guix/guix.pot

Thank you!

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 01 Feb 2022 12:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 77 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.