[PATCH] home: services: Make strings in Gexps translateble.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Xinglu Chen
Owner
unassigned
Submitted by
Xinglu Chen
Severity
normal

Debbugs page

Xinglu Chen wrote 3 years ago
(address . guix-patches@gnu.org)
b550416f7fbbbe40a39ca9541ef28515ca217e9e.1640186944.git.public@yoctocell.xyz
* 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@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(-)

Toggle diff (264 lines)
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
Ludovic Courtès wrote 3 years ago
(name . Xinglu Chen)(address . public@yoctocell.xyz)(address . 52736-done@debbugs.gnu.org)
87bl0slxjn.fsf@gnu.org
Hello,

Xinglu Chen <public@yoctocell.xyz> skribis:

Toggle quote (10 lines)
> * 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@gnu.org>
> Link: <https://yhetil.org/guix-bugs/87sfvy8k1u.fsf@gnu.org>

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

Toggle quote (3 lines)
> 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’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 52736@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 52736
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help