all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Julien Lepiller <julien@lepiller.eu>
To: guix-devel@gnu.org
Subject: Re: [PATCH 1/3] gnu: doc: Alloc documentation to be translated.
Date: Wed, 28 Mar 2018 23:05:15 +0200	[thread overview]
Message-ID: <20180328230515.0e70d96a@lepiller.eu> (raw)
In-Reply-To: <87tvtudh1g.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 1138 bytes --]

Le Mon, 05 Mar 2018 10:10:19 +0100,
ludo@gnu.org (Ludovic Courtès) a écrit :

> Julien Lepiller <julien@lepiller.eu> skribis:
> 
> > * po/doc/local.mk: New file.
> > * Makefile.am: Include it. Add silent rules for po4a.
> > * configure.ac: Look for po4a-translate and po4a-updatepo.
> > * doc/local.mk: Add rules to generate gettext files.
> > (TRANSLATED_INFO): New variable.
> > (BUILT_SOURCES, EXTRA_DIST, MAINTAINERCLEANFILES): Add it.
> > * .gitignore: Add generated files.  
> 
> LGTM!
> 
> For good measure, please check whether “make distcheck” doesn’t show
> any regression (I haven’t checked in recent master though, it could
> be that there are currently unrelated issues.)
> 
> Thanks,
> Ludo’.

Here is a newer version of the patches. I "fixed" the issue with
translated references, but a change in the English manual will still
create a change in the translated manuals and po files.

I tried to run make distcheck, but even on master, I get this error
message:

make[2]: ***  Aucune règle pour fabriquer la cible « bin/guix.in »,
nécessaire pour « distdir-am ». Arrêt.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-doc-Alloc-documentation-to-be-translated.patch --]
[-- Type: text/x-patch, Size: 7814 bytes --]

From bbad37ae7ca918c894f4aa4d46f6694991a97f29 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Fri, 2 Mar 2018 23:05:28 +0100
Subject: [PATCH 1/3] gnu: doc: Alloc documentation to be translated.

* po/doc/local.mk: New file.
* Makefile.am: Include it. Add silent rules for po4a.
* configure.ac: Look for po4a-translate and po4a-updatepo.
* doc/local.mk: Add rules to generate gettext files.
(TRANSLATED_INFO): New variable.
(BUILT_SOURCES, EXTRA_DIST, MAINTAINERCLEANFILES): Add it.
* .gitignore: Add generated files.
---
 .gitignore      | 17 +++++++++++++++++
 Makefile.am     |  8 +++++++-
 configure.ac    |  4 ++++
 doc/local.mk    | 48 +++++++++++++++++++++++++++++++++++++++++++++---
 po/doc/local.mk | 27 +++++++++++++++++++++++++++
 5 files changed, 100 insertions(+), 4 deletions(-)
 create mode 100644 po/doc/local.mk

diff --git a/.gitignore b/.gitignore
index 4a110fb1f..38a55a3b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,6 +28,21 @@
 /configure
 /doc/*.1
 /doc/.dirstamp
+/doc/guix.*.aux
+/doc/guix.*.cp
+/doc/guix.*.cps
+/doc/guix.*.fn
+/doc/guix.*.fns
+/doc/guix.*.html
+/doc/guix.*.info
+/doc/guix.*.info-[0-9]
+/doc/guix.*.ky
+/doc/guix.*.pg
+/doc/guix.*.toc
+/doc/guix.*.t2p
+/doc/guix.*.tp
+/doc/guix.*.vr
+/doc/guix.*.vrs
 /doc/guix.aux
 /doc/guix.cp
 /doc/guix.cps
@@ -47,6 +62,7 @@
 /doc/os-config-desktop.texi
 /doc/stamp-vti
 /doc/version.texi
+/doc/version-*.texi
 /etc/guix-daemon.cil
 /etc/guix-daemon.conf
 /etc/guix-daemon.service
@@ -79,6 +95,7 @@
 /nix/scripts/list-runtime-roots
 /nix/scripts/offload
 /nix/scripts/substitute
+/po/doc/*.mo
 /po/guix/*.gmo
 /po/guix/*.insert-header
 /po/guix/*.mo
diff --git a/Makefile.am b/Makefile.am
index feb99490d..36f5856b4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,6 +10,7 @@
 # Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 # Copyright © 2018 Nils Gillmann <ng0@n0.is>
+# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 #
 # This file is part of GNU Guix.
 #
@@ -51,6 +52,7 @@ MODULES_NOT_COMPILED =				\
   guix/man-db.scm
 
 include gnu/local.mk
+include po/doc/local.mk
 
 MODULES =					\
   guix/base16.scm				\
@@ -452,7 +454,7 @@ dist_fishcompletion_DATA = etc/completion/fish/guix.fish
 # SELinux policy
 dist_selinux_policy_DATA = etc/guix-daemon.cil
 
-EXTRA_DIST =						\
+EXTRA_DIST +=						\
   HACKING						\
   ROADMAP						\
   TODO							\
@@ -779,3 +781,7 @@ AM_V_DOT_0 = @echo "  DOT     " $@;
 AM_V_HELP2MAN = $(AM_V_HELP2MAN_$(V))
 AM_V_HELP2MAN_ = $(AM_V_HELP2MAN_$(AM_DEFAULT_VERBOSITY))
 AM_V_HELP2MAN_0 = @echo "  HELP2MAN" $@;
+
+AM_V_PO4A = $(AM_V_PO4A_$(V))
+AM_V_PO4A_ = $(AM_V_PO4A_$(AM_DEFAULT_VERBOSITY))
+AM_V_PO4A_0 = @echo "  PO4A" $@;
diff --git a/configure.ac b/configure.ac
index 5872a8482..557da6318 100644
--- a/configure.ac
+++ b/configure.ac
@@ -263,6 +263,10 @@ AM_MISSING_PROG([DOT], [dot])
 dnl Manual pages.
 AM_MISSING_PROG([HELP2MAN], [help2man])
 
+dnl Documentation translation.
+AM_MISSING_PROG([PO4A_TRANSLATE], [po4a-translate])
+AM_MISSING_PROG([PO4A_UPDATEPO], [po4a-updatepo])
+
 dnl Emacs (optional), for 'etc/indent-package.el'.
 AC_PATH_PROG([EMACS], [emacs], [/usr/bin/emacs])
 AC_SUBST([EMACS])
diff --git a/doc/local.mk b/doc/local.mk
index 397ade050..922d7581a 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -4,6 +4,7 @@
 # Copyright © 2013 Andreas Enge <andreas@enge.fr>
 # Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 # Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
+# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 #
 # This file is part of GNU Guix.
 #
@@ -51,10 +52,51 @@ OS_CONFIG_EXAMPLES_TEXI =			\
   %D%/os-config-desktop.texi			\
   %D%/os-config-lightweight-desktop.texi
 
+TRANSLATED_INFO =
+
 # Bundle this file so that makeinfo finds it in out-of-source-tree builds.
-BUILT_SOURCES        += $(OS_CONFIG_EXAMPLES_TEXI)
-EXTRA_DIST           += $(OS_CONFIG_EXAMPLES_TEXI)
-MAINTAINERCLEANFILES  = $(OS_CONFIG_EXAMPLES_TEXI)
+BUILT_SOURCES        += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
+EXTRA_DIST           += $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
+MAINTAINERCLEANFILES  = $(OS_CONFIG_EXAMPLES_TEXI) $(TRANSLATED_INFO)
+
+PO4A_PARAMS := -M UTF-8 -L UTF-8 #master and localized encoding
+PO4A_PARAMS += -k 0 # produce an output even if the translation is not complete
+PO4A_PARAMS += -f texinfo # texinfo format
+
+# When a change to guix.texi occurs, it is not translated immediately.
+# Because @pxref and @xref commands are reference to a section by name, they
+# should be translated. If a modification adds a reference to a section, this
+# reference is not translated, which means it references a section that does not
+# exist.
+# This command loops through the translated files looking for references. For
+# each of these references, it tries to find the translation and replaces the
+# reference name, even in untranslated strings.
+# The last sed is a multiline sed because some references span multiple lines.
+define xref_command
+cat "$@.tmp" | egrep '@p?x?ref' -A1 | sed 'N;s|--\n||g;P;D' | sed 's|^| |g' | \
+        tr -d '\012' | sed 's|\(@p\?x\?ref\)|\n\1|g' | egrep '@p?x?ref' | \
+        sed 's|^.*@p\?x\?ref{\([^,}]*\).*$$|\1|g' | sort | uniq | while read e; do \
+  line=$$(grep -n "msgid \"$$e\"" "$(word 2,$^)" | cut -f1 --delimiter=":") ;\
+  ((line++)) ;\
+  if [ "$$line" != "1" ]; then \
+    translation=$$(head -n $$line "$(word 2,$^)" | tail -1 | grep msgstr | sed 's|msgstr "\(.*\)"|\1|') ;\
+    if [ "$$translation" != "" ]; then \
+	  sed "N;s@\(p\?x\?ref\){$$(echo $$e | sed 's| |[\\n ]|g')\(,\|}\)@\1{$$translation\2@g;P;D" -i "$@.tmp" ;\
+    fi ;\
+  fi ;\
+done
+endef
+
+$(srcdir)/%D%/guix.%.texi: %D%/guix.texi po/doc/guix.%.po $(srcdir)/%D%/contributing.%.texi
+	-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "$<" -p "$(word 2,$^)" -l "$@.tmp"
+	-sed -i "s|guix\.info|$$(basename "$@" | sed 's|texi$$|info|')|" "$@.tmp"
+	-$(xref_command)
+	-mv "$@.tmp" "$@"
+
+$(srcdir)/%D%/contributing.%.texi: %D%/contributing.texi po/doc/guix.%.po po/doc/contributing.%.po
+	-$(AM_V_PO4A)$(PO4A_TRANSLATE) $(PO4A_PARAMS) -m "$<" -p "$(word 3,$^)" -l "$@.tmp"
+	-$(xref_command)
+	-mv "$@.tmp" "$@"
 
 %D%/os-config-%.texi: gnu/system/examples/%.tmpl
 	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";	\
diff --git a/po/doc/local.mk b/po/doc/local.mk
new file mode 100644
index 000000000..0e4ad352c
--- /dev/null
+++ b/po/doc/local.mk
@@ -0,0 +1,27 @@
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix 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.
+#
+# GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+EXTRA_DIST =
+
+$(srcdir)/po/doc/contributing.%.po: doc/contributing.texi
+	-$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" -p "$@"
+	-touch "$@"
+
+$(srcdir)/po/doc/guix.%.po: doc/guix.texi
+	-$(AM_V_PO4A)$(PO4A_UPDATEPO) -M UTF-8 -f texinfo -m "$<" -p "$@"
+	-touch "$@"
-- 
2.16.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-guix-Add-po4a-input.patch --]
[-- Type: text/x-patch, Size: 1282 bytes --]

From 8b5871cfc00f15dfe22131eaa4ba5b5fc6458c24 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Fri, 2 Mar 2018 23:11:46 +0100
Subject: [PATCH 2/3] gnu: guix: Add po4a input.

* gnu/packages/package-management.scm (guix)[inputs]: Add po4a.
---
 gnu/packages/package-management.scm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index a90ba7a21..f86afb1cb 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -244,7 +245,8 @@
                        ("gettext" ,gettext-minimal)
                        ("texinfo" ,texinfo)
                        ("graphviz" ,graphviz)
-                       ("help2man" ,help2man)))
+                       ("help2man" ,help2man)
+                       ("po4a" ,po4a)))
       (inputs
        `(("bzip2" ,bzip2)
          ("gzip" ,gzip)
-- 
2.16.3


  reply	other threads:[~2018-03-28 21:05 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-19 22:34 [WIP]: localize guix.texi Julien Lepiller
2018-02-19 22:45 ` Julien Lepiller
2018-03-02 13:31   ` Ludovic Courtès
2018-03-02 15:57     ` Gábor Boskovits
2018-03-02 23:07 ` [WIP] " Julien Lepiller
2018-03-02 23:07   ` [PATCH 1/3] gnu: doc: Alloc documentation to be translated Julien Lepiller
2018-03-05  9:10     ` Ludovic Courtès
2018-03-28 21:05       ` Julien Lepiller [this message]
2018-03-31 21:33         ` Ludovic Courtès
2018-03-02 23:07   ` [PATCH 2/3] gnu: guix: Add po4a input Julien Lepiller
2018-03-05  9:10     ` Ludovic Courtès
2018-03-05  9:08   ` [WIP] localize guix.texi Ludovic Courtès
2018-03-05  9:58     ` julien lepiller
2018-03-05 11:00       ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180328230515.0e70d96a@lepiller.eu \
    --to=julien@lepiller.eu \
    --cc=guix-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.