From patchwork Wed Dec 22 15:37:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Xinglu Chen X-Patchwork-Id: 35585 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 34BB727BBEA; Wed, 22 Dec 2021 15:38:41 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FROM_SUSPICIOUS_NTLD,MAILING_LIST_MULTI,PDS_OTHER_BAD_TLD, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 665AD27BBE9 for ; Wed, 22 Dec 2021 15:38:40 +0000 (GMT) Received: from localhost ([::1]:39262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n03hP-0001Ir-H4 for patchwork@mira.cbaines.net; Wed, 22 Dec 2021 10:38:39 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45878) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n03gx-0001F8-HA for guix-patches@gnu.org; Wed, 22 Dec 2021 10:38:11 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:48008) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1n03go-0002vI-Fk; Wed, 22 Dec 2021 10:38:11 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1n03go-0000BJ-5v; Wed, 22 Dec 2021 10:38:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#52736] [PATCH] home: services: Make strings in Gexps translateble. Resent-From: Xinglu Chen Original-Sender: "Debbugs-submit" Resent-CC: ludo@gnu.org, guix-patches@gnu.org Resent-Date: Wed, 22 Dec 2021 15:38:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 52736 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 52736@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= X-Debbugs-Original-To: guix-patches@gnu.org X-Debbugs-Original-Xcc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by submit@debbugs.gnu.org id=B.1640187451655 (code B ref -1); Wed, 22 Dec 2021 15:38:01 +0000 Received: (at submit) by debbugs.gnu.org; 22 Dec 2021 15:37:31 +0000 Received: from localhost ([127.0.0.1]:59554 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n03gI-0000AV-Be for submit@debbugs.gnu.org; Wed, 22 Dec 2021 10:37:30 -0500 Received: from lists.gnu.org ([209.51.188.17]:40682) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1n03gH-0000AO-CZ for submit@debbugs.gnu.org; Wed, 22 Dec 2021 10:37:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n03gD-000161-J6 for guix-patches@gnu.org; Wed, 22 Dec 2021 10:37:29 -0500 Received: from h87-96-130-155.cust.a3fiber.se ([87.96.130.155]:49264 helo=mail.yoctocell.xyz) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n03gA-0002sv-NL for guix-patches@gnu.org; Wed, 22 Dec 2021 10:37:25 -0500 From: Xinglu Chen DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yoctocell.xyz; s=mail; t=1640187438; bh=tIjgewu1okVz/b1F2Pu1SSoLo0wMF5KhgyQW7JRHgqM=; h=From:To:Subject:Date; b=CvfZqIWtcTXTq8NVwSsrOxT+nju2xnFfU+vUOrS8hDQ0j67fP12gJowADiT3m9Wec mQOg47NTvkmJzVmG2gMbWwSvMUVsYKdo8tLdCL/iO5YCtuOayc1Js2kPtGHyIlXCp0 beGdgwQ3CKV3FmlyHegtuAXyZHuZbqRZi5rd2HHA= Message-Id: Date: Wed, 22 Dec 2021 16:37:09 +0100 MIME-Version: 1.0 Received-SPF: pass client-ip=87.96.130.155; envelope-from=public@yoctocell.xyz; helo=mail.yoctocell.xyz X-Spam_score_int: 18 X-Spam_score: 1.8 X-Spam_bar: + X-Spam_report: (1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.499, FROM_SUSPICIOUS_NTLD_FP=0.397, PDS_OTHER_BAD_TLD=1.999, PDS_RDNS_DYNAMIC_FP=0.01, RDNS_DYNAMIC=0.982, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, TO_NO_BRKTS_DYNIP=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * 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 Link: --- 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(-) base-commit: 5b8ae331f73d970e29566b82c9fe36aa0d77ccb7 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