GNU bug report logs - #26302
[website] translations

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix; Reported by: ng0 <contact.ng0@HIDDEN>; dated Wed, 29 Mar 2017 15:41:01 UTC; Maintainer for guix is bug-guix@HIDDEN.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 24 Aug 2020 14:06:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Aug 24 10:06:10 2020
Received: from localhost ([127.0.0.1]:58709 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kAD6w-0007Di-2k
	for submit <at> debbugs.gnu.org; Mon, 24 Aug 2020 10:06:10 -0400
Received: from eggs.gnu.org ([209.51.188.92]:54022)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1kAD6u-0007DV-9Y
 for 26302 <at> debbugs.gnu.org; Mon, 24 Aug 2020 10:06:09 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:45348)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1kAD6o-0007ob-TB; Mon, 24 Aug 2020 10:06:02 -0400
Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=40898 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1kAD6n-0002JO-Sa; Mon, 24 Aug 2020 10:06:02 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: Multilingual web site is on-line!
References: <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729192103.2fug7t6to2tuiwew@HIDDEN>
 <874kpnu4j8.fsf@HIDDEN>
 <20200804153554.6vosez3tn3fa3tlk@HIDDEN>
 <874kotcq6u.fsf@HIDDEN>
 <20200824124557.wuhmf44r567z7z7j@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 8 Fructidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Mon, 24 Aug 2020 16:05:59 +0200
In-Reply-To: <20200824124557.wuhmf44r567z7z7j@HIDDEN>
 (pelzflorian@HIDDEN's message of "Mon, 24 Aug 2020 14:47:01
 +0200")
Message-ID: <87y2m43zqw.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hallo!

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Sun, Aug 23, 2020 at 05:55:21PM +0200, Ludovic Court=C3=A8s wrote:
>> Sorry for the long delay=E2=80=94vacations=E2=80=A6 so sweet. ;-)
>
> Sounds nice.  I wasn=E2=80=99t home either and the guix-website.pot is not
> online yet, but I believe the wheels are in motion already.
>
>
>> This version also LGTM.  Perhaps you can commit it tomorrow around noon,
>> when it=E2=80=99s more likely to be noticed than on a sunny (?) Sunday.
>
> I will wait for around noon on the day the TP publishes
> guix-website.pot.

Alright, makes sense!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 24 Aug 2020 12:47:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Aug 24 08:47:19 2020
Received: from localhost ([127.0.0.1]:56488 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kABsd-00065f-9l
	for submit <at> debbugs.gnu.org; Mon, 24 Aug 2020 08:47:19 -0400
Received: from pelzflorian.de ([5.45.111.108]:38294 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1kABsa-00062V-Ap
 for 26302 <at> debbugs.gnu.org; Mon, 24 Aug 2020 08:47:17 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id D7E1B36055C;
 Mon, 24 Aug 2020 14:47:14 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1598273235;
 bh=3Ogolo8HMHmiAf+m/dW3ffCgWs1omBr02AdCn6y4Wz8=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=ECYFnKpr4TavEEC50MGK4EcDL1Mr2a8UwLbM/ltREstylR5yzKI3hK/ys9Ej2AL5R
 qiR6ZKSCYK1PeesnF8HTVSZcDcUt0O0TCHCCrn/Dr7Dhoeifygs8j9yh6+7x8b6OXM
 oJnuEALllaMjP8RUtjZV+MnLCSncfv6xWcV30fdM=
Date: Mon, 24 Aug 2020 14:47:01 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200824124557.wuhmf44r567z7z7j@HIDDEN>
References: <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729192103.2fug7t6to2tuiwew@HIDDEN>
 <874kpnu4j8.fsf@HIDDEN>
 <20200804153554.6vosez3tn3fa3tlk@HIDDEN>
 <874kotcq6u.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <874kotcq6u.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sun, Aug 23, 2020 at 05:55:21PM +0200, Ludovic Courtès wrote:
> Sorry for the long delay—vacations… so sweet. ;-)

Sounds nice.  I wasn’t home either and the guix-website.pot is not
online yet, but I believe the wheels are in motion already.


> This version also LGTM.  Perhaps you can commit it tomorrow around noon,
> when it’s more likely to be noticed than on a sunny (?) Sunday.

I will wait for around noon on the day the TP publishes
guix-website.pot.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 23 Aug 2020 15:55:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Aug 23 11:55:37 2020
Received: from localhost ([127.0.0.1]:54945 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k9sLJ-000670-9V
	for submit <at> debbugs.gnu.org; Sun, 23 Aug 2020 11:55:37 -0400
Received: from eggs.gnu.org ([209.51.188.92]:49374)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1k9sLH-00066n-UC
 for 26302 <at> debbugs.gnu.org; Sun, 23 Aug 2020 11:55:36 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:54860)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1k9sLB-0006BC-8d; Sun, 23 Aug 2020 11:55:29 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=38200 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1k9sL8-0006Y6-1Z; Sun, 23 Aug 2020 11:55:28 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: Multilingual web site is on-line!
References: <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729192103.2fug7t6to2tuiwew@HIDDEN>
 <874kpnu4j8.fsf@HIDDEN>
 <20200804153554.6vosez3tn3fa3tlk@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 7 Fructidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Sun, 23 Aug 2020 17:55:21 +0200
In-Reply-To: <20200804153554.6vosez3tn3fa3tlk@HIDDEN>
 (pelzflorian@HIDDEN's message of "Tue, 4 Aug 2020 17:37:10
 +0200")
Message-ID: <874kotcq6u.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi Florian,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Fri, Jul 31, 2020 at 04:45:31PM +0200, Ludovic Court=C3=A8s wrote:
>> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
>> > On Tue, Jul 28, 2020 at 11:50:13PM +0200, Ludovic Court=C3=A8s wrote:
>> >> I wonder if we should link to more practical step-by-step instructions
>> >> on how to get started translating, to lower the barrier for those who
>> >> want to get started without engaging in possibly open-ended discussio=
ns
>> >> with the fabulous Guix team.  :-)
>> > I don=E2=80=99t know how best to integrate step-by-step instructions. =
 While
>> > the TP has instructions
>> > <https://translationproject.org/html/translators.html>, they seem more
>> > intimidating to me than, as a first step, talking to the helpful
>> > people at the TP.  A few steps also describe how to disclaim
>> > copyright, which Guix does not ask for anyway.
>> Yeah, dunno.  In the post you could duplicate/filter those steps just so
>> it=E2=80=99s more directly understandable what it takes to translate pag=
es.
>> Your call!
>
> I rewrote the part for translators that comes before the first source
> code in the post and changed it again and again while a
> not-yet-Guix-using friend gave helpful feedback.  I attach the current
> draft blog post, but currently you can also read it at:
>
> https://pelzflorian.de/adding-translations-to-guix-website/index.html
>
> Regards,
> Florian
>
> title: Adding translations to Guix=E2=80=99 website
> date: 2020-08-01 15:00
> author: Florian Pelz
> tags: Community

Sorry for the long delay=E2=80=94vacations=E2=80=A6 so sweet. ;-)

This version also LGTM.  Perhaps you can commit it tomorrow around noon,
when it=E2=80=99s more likely to be noticed than on a sunny (?) Sunday.

Thanks again!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 21 Aug 2020 07:51:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Aug 21 03:51:23 2020
Received: from localhost ([127.0.0.1]:44938 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k91pb-00083P-5O
	for submit <at> debbugs.gnu.org; Fri, 21 Aug 2020 03:51:23 -0400
Received: from pelzflorian.de ([5.45.111.108]:33690 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k91pY-00083E-OR
 for 26302 <at> debbugs.gnu.org; Fri, 21 Aug 2020 03:51:21 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 0D8D236055C;
 Fri, 21 Aug 2020 09:51:19 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1597996279;
 bh=FfvND9dMMfXJRcRhs15cykYJXZorhehQlLdllB2h6nY=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=V96yzZ714Be5Q/0eYYnSxu1CdDgfteFz8HplbDD1gpi259HzubD+55lxLOhVPASzf
 uuCijFARptUAniDVH/pGlg3iEGxLM45CNQIFsLJo0zP/jeTg0Qa61zivS+yKwX0t8I
 nEt2yhKojjMPYqTIFbQZ0j/bAt/4D284Y0n2eKEM=
Date: Fri, 21 Aug 2020 09:51:11 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Julien Lepiller <julien@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200821075111.aerqnrhpcr4wyuna@HIDDEN>
References: <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729032053.27c8ad4b@HIDDEN>
 <20200729135338.nqtpk3tugxlsjlu2@HIDDEN>
 <87ft93srur.fsf@HIDDEN>
 <20200821001420.xjdk3s22q6ynjd3c@HIDDEN>
 <4B72BBF4-3E63-4731-ACB0-62209776476C@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <4B72BBF4-3E63-4731-ACB0-62209776476C@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Aug 20, 2020 at 08:41:33PM -0400, Julien Lepiller wrote:
> Sure, let me know when the patcg is pushed and I'll send a tarball to the TP.

I have pushed now.  I hope and believe the TP robot and coordinator
will have no complaints.  Thank you for sending.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 21 Aug 2020 00:41:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Aug 20 20:41:53 2020
Received: from localhost ([127.0.0.1]:44496 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k8v7w-0000tp-Tu
	for submit <at> debbugs.gnu.org; Thu, 20 Aug 2020 20:41:53 -0400
Received: from lepiller.eu ([89.234.186.109]:41580)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <julien@HIDDEN>) id 1k8v7r-0000tc-QB
 for 26302 <at> debbugs.gnu.org; Thu, 20 Aug 2020 20:41:51 -0400
Received: from lepiller.eu (localhost [127.0.0.1])
 by lepiller.eu (OpenSMTPD) with ESMTP id 5421481e;
 Fri, 21 Aug 2020 00:41:45 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=lepiller.eu; h=date
 :in-reply-to:references:mime-version:content-type
 :content-transfer-encoding:subject:to:cc:from:message-id; s=
 dkim; bh=Sr9r/k/bTlborbeDrBuiOkfWxjzKlkAzijPtzFsbnek=; b=P/VC8OK
 105CnGaW/e79cimSkRHMp4wC1wrrU8UAGhIntx45S1MsvISn+RTI7YF+QV5AewA8
 4a0N/DrQ9KHTL68YxH1dOlNKCMM/egetmnLb5uq/ghRsqQfO9KW5f7biXy5NGTlW
 HRKa4o//fUpwvMNOq81hSeC4anuUY+g1oL3qARX3kjwScXagGEpp/Bx5PhtXjoBH
 DyFhYJpeOdTg3yEyDfWhgk8cyAiVvzmEYtdDO0VLTNQI26NbeIS5gzJ9aGFgreaE
 ERTY8B8eWJLZNbYZP7vCa82xAcQHK/Yl30zVDCuBo3cDpQsgBAA8f1e8MlbrgxrS
 K94Ju/IUWV2Ok0w==
Received: by lepiller.eu (OpenSMTPD) with ESMTPSA id 0920601d
 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO); 
 Fri, 21 Aug 2020 00:41:44 +0000 (UTC)
Date: Thu, 20 Aug 2020 20:41:33 -0400
User-Agent: K-9 Mail for Android
In-Reply-To: <20200821001420.xjdk3s22q6ynjd3c@HIDDEN>
References: <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN> <20200729032053.27c8ad4b@HIDDEN>
 <20200729135338.nqtpk3tugxlsjlu2@HIDDEN>
 <87ft93srur.fsf@HIDDEN>
 <20200821001420.xjdk3s22q6ynjd3c@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="----QGDUAB1R5UCGHMTWXJUJR49G6KF2XQ"
Content-Transfer-Encoding: 7bit
Subject: Re: Multilingual web site is on-line!
To: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
From: Julien Lepiller <julien@HIDDEN>
Message-ID: <4B72BBF4-3E63-4731-ACB0-62209776476C@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 =?ISO-8859-1?Q?Ludovic_Court=E8s?= <ludo@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

------QGDUAB1R5UCGHMTWXJUJR49G6KF2XQ
Content-Type: text/plain;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

Sure, let me know when the patcg is pushed and I'll send a tarball to the T=
P=2E

On 2020=E5=B9=B48=E6=9C=8820=E6=97=A5 20:14:20 GMT-04:00, "pelzflorian (Fl=
orian Pelz)" <pelzflorian@pelzflorian=2Ede> wrote:
>On Mon, Aug 03, 2020 at 04:53:48PM +0200, Ludovic Court=C3=A8s wrote:
>> "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian=2Ede> skribis:
>> > What version number should we give it?  That of Guix, or a
>YYYYMMDD?
>> > I suppose the version number should be part of the POT file=E2=80=99s
>> > Project-Id-Version field and the tar filename, but I don=E2=80=99t kn=
ow=2E
>>=20
>> I=E2=80=99d say YYYYMMDD=2E  The coordinator might have suggestions=2E
>
>I will push the attached patch if there are no objections=2E
>
>> > Could you Julien or someone else send the tarball(s) off to the TP
>> > coordinator?
>>=20
>> That=E2=80=99d be great=2E   Julien, let us know if you=E2=80=99d rathe=
r hand over this
>> responsibility=2E
>
>Is it OK if you send it when you have time after the patch is in?
>
>Regards,
>Florian

------QGDUAB1R5UCGHMTWXJUJR49G6KF2XQ
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head></head><body>Sure, let me know when the patcg is pushed and I'l=
l send a tarball to the TP=2E<br><br><div class=3D"gmail_quote">On 2020=E5=
=B9=B48=E6=9C=8820=E6=97=A5 20:14:20 GMT-04:00, "pelzflorian (Florian Pelz)=
" &lt;pelzflorian@pelzflorian=2Ede&gt; wrote:<blockquote class=3D"gmail_quo=
te" style=3D"margin: 0pt 0pt 0pt 0=2E8ex; border-left: 1px solid rgb(204, 2=
04, 204); padding-left: 1ex;">
<pre class=3D"k9mail">On Mon, Aug 03, 2020 at 04:53:48PM +0200, Ludovic Co=
urt=C3=A8s wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin: 0pt=
 0pt 1ex 0=2E8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">"pelz=
florian (Florian Pelz)" &lt;pelzflorian@pelzflorian=2Ede&gt; skribis:<br><b=
lockquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 1ex 0=2E8ex; borde=
r-left: 1px solid #ad7fa8; padding-left: 1ex;">What version number should w=
e give it?  That of Guix, or a YYYYMMDD?<br>I suppose the version number sh=
ould be part of the POT file=E2=80=99s<br>Project-Id-Version field and the =
tar filename, but I don=E2=80=99t know=2E<br></blockquote><br>I=E2=80=99d s=
ay YYYYMMDD=2E  The coordinator might have suggestions=2E<br></blockquote><=
br>I will push the attached patch if there are no objections=2E<br><br><blo=
ckquote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 1ex 0=2E8ex; border-=
left: 1px solid #729fcf; padding-left: 1ex;"><blockquote class=3D"gmail_quo=
te" style=3D"margin: 0pt 0pt 1ex 0=2E8ex; border-left: 1px solid #ad7fa8; p=
adding-left: 1ex;">Could you Julien or someone else send the tarball(s) off=
 to the TP<br>coordinator?<br></blockquote><br>That=E2=80=99d be great=2E  =
 Julien, let us know if you=E2=80=99d rather hand over this<br>responsibili=
ty=2E<br></blockquote><br>Is it OK if you send it when you have time after =
the patch is in?<br><br>Regards,<br>Florian<br></pre></blockquote></div></b=
ody></html>
------QGDUAB1R5UCGHMTWXJUJR49G6KF2XQ--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 21 Aug 2020 00:14:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Aug 20 20:14:37 2020
Received: from localhost ([127.0.0.1]:44484 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k8uhZ-0000FW-14
	for submit <at> debbugs.gnu.org; Thu, 20 Aug 2020 20:14:37 -0400
Received: from pelzflorian.de ([5.45.111.108]:33280 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k8uhU-0000FL-J2
 for 26302 <at> debbugs.gnu.org; Thu, 20 Aug 2020 20:14:36 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 2A81336055C;
 Fri, 21 Aug 2020 02:14:31 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1597968871;
 bh=JMIoNpbzYRA18vyefC4HGphSVLWw35ZHXxJlkcXAnO4=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Ml1q2GQbnDC6/cD7xZ2In6gK3NMvp0+sAG6AwXZX29dKB9xQQT+eWNICT4koxUZep
 n4go/uU6Zk6ORAqlvsGWwMdZzae/IcBgjy9ZT6fB620Yhw8d3JlCo6nS4Nx01yzyby
 aeST6rSocbg5ZO+J2WfupKVEx1ATE93DWZ4ySf2g=
Date: Fri, 21 Aug 2020 02:14:20 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Julien Lepiller <julien@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200821001420.xjdk3s22q6ynjd3c@HIDDEN>
References: <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729032053.27c8ad4b@HIDDEN>
 <20200729135338.nqtpk3tugxlsjlu2@HIDDEN>
 <87ft93srur.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="d7hu55zyk5a5pbvk"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87ft93srur.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--d7hu55zyk5a5pbvk
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Mon, Aug 03, 2020 at 04:53:48PM +0200, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > What version number should we give it?  That of Guix, or a YYYYMMDD?
> > I suppose the version number should be part of the POT file’s
> > Project-Id-Version field and the tar filename, but I don’t know.
> 
> I’d say YYYYMMDD.  The coordinator might have suggestions.

I will push the attached patch if there are no objections.

> > Could you Julien or someone else send the tarball(s) off to the TP
> > coordinator?
> 
> That’d be great.   Julien, let us know if you’d rather hand over this
> responsibility.

Is it OK if you send it when you have time after the patch is in?

Regards,
Florian

--d7hu55zyk5a5pbvk
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment;
	filename="0001-website-nls-Include-package-version-in-the-POT-file.patch"
Content-Transfer-Encoding: 8bit

From 6e60fb3f7272b5e4996c2366758a151e2ebc3495 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Fri, 21 Aug 2020 02:03:08 +0200
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [PATCH] website: nls: Include package version in the POT file.

Including a package version in the .pot file is probably necessary for
sending it to the Translation Project.

* i18n-howto.txt: Advice using '--package-version' command-line argument.
* po/guix-website.pot: Recreate with '--package-version'.
---
 website/i18n-howto.txt      |  3 ++-
 website/po/guix-website.pot | 24 ++++++++++++------------
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/website/i18n-howto.txt b/website/i18n-howto.txt
index 29b8852..98a4d00 100644
--- a/website/i18n-howto.txt
+++ b/website/i18n-howto.txt
@@ -34,13 +34,14 @@ The following commands are an example of the translation for locale
 de_DE.  Adapt as necessary.  We assume the software requirements
 mentioned in the README are installed.
 
-To create a pot file:
+To create a pot file (adjust the package version!):
 
 guile scripts/sexp-xgettext.scm -f po/POTFILES \
                                 -o po/guix-website.pot \
                                 --from-code=UTF-8 \
                                 --copyright-holder="Ludovic Courts" \
                                 --package-name="guix-website" \
+                                --package-version="20200821" \
                                 --msgid-bugs-address="ludo@HIDDEN" \
                                 --keyword=G_ \
                                 --keyword=N_:1,2 \
diff --git a/website/po/guix-website.pot b/website/po/guix-website.pot
index f200bcd..502e2de 100644
--- a/website/po/guix-website.pot
+++ b/website/po/guix-website.pot
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: guix-website\n"
+"Project-Id-Version: guix-website 20200821\n"
 "Report-Msgid-Bugs-To: ludo@HIDDEN\n"
-"POT-Creation-Date: 2020-07-28 10:47+0200\n"
+"POT-Creation-Date: 2020-08-21 02:01+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@HIDDEN>\n"
@@ -228,36 +228,36 @@ msgctxt "website menu"
 msgid "Latest"
 msgstr ""
 
-#: apps/base/templates/components.scm:406 apps/packages/templates/detailed-index.scm:31 apps/packages/templates/detailed-index.scm:38 apps/packages/templates/detailed-package-list.scm:34 apps/packages/templates/detailed-package-list.scm:43 apps/packages/templates/index.scm:31 apps/packages/templates/index.scm:37 apps/packages/templates/package-list.scm:34 apps/packages/templates/package-list.scm:40 apps/packages/templates/package.scm:36 apps/packages/templates/package.scm:41
+#: apps/base/templates/components.scm:406 apps/base/templates/help.scm:26 apps/base/templates/help.scm:30
+msgctxt "website menu"
+msgid "Help"
+msgstr ""
+
+#: apps/base/templates/components.scm:407 apps/packages/templates/detailed-index.scm:31 apps/packages/templates/detailed-index.scm:38 apps/packages/templates/detailed-package-list.scm:34 apps/packages/templates/detailed-package-list.scm:43 apps/packages/templates/index.scm:31 apps/packages/templates/index.scm:37 apps/packages/templates/package-list.scm:34 apps/packages/templates/package-list.scm:40 apps/packages/templates/package.scm:36 apps/packages/templates/package.scm:41
 msgctxt "website menu"
 msgid "Packages"
 msgstr ""
 
-#: apps/base/templates/components.scm:407 apps/blog/templates/post-list.scm:33 apps/blog/templates/post-list.scm:39 apps/blog/templates/post.scm:29 apps/blog/templates/post.scm:35 apps/blog/templates/tag.scm:37 apps/blog/templates/tag.scm:43
+#: apps/base/templates/components.scm:408 apps/blog/templates/post-list.scm:33 apps/blog/templates/post-list.scm:39 apps/blog/templates/post.scm:29 apps/blog/templates/post.scm:35 apps/blog/templates/tag.scm:37 apps/blog/templates/tag.scm:43
 msgctxt "website menu"
 msgid "Blog"
 msgstr ""
 
-#: apps/base/templates/components.scm:409 apps/media/templates/screenshot.scm:28 apps/media/templates/screenshots-overview.scm:25 apps/media/templates/video.scm:29 apps/media/templates/video-list.scm:29
+#: apps/base/templates/components.scm:410 apps/media/templates/screenshot.scm:28 apps/media/templates/screenshots-overview.scm:25 apps/media/templates/video.scm:29 apps/media/templates/video-list.scm:29
 msgctxt "website menu"
 msgid "Media"
 msgstr ""
 
-#: apps/base/templates/components.scm:412 apps/media/templates/video.scm:33 apps/media/templates/video-list.scm:33
+#: apps/base/templates/components.scm:413 apps/media/templates/video.scm:33 apps/media/templates/video-list.scm:33
 msgctxt "website menu"
 msgid "Videos"
 msgstr ""
 
-#: apps/base/templates/components.scm:413
+#: apps/base/templates/components.scm:414
 msgctxt "website menu"
 msgid "Screenshots"
 msgstr ""
 
-#: apps/base/templates/components.scm:415 apps/base/templates/help.scm:26 apps/base/templates/help.scm:30
-msgctxt "website menu"
-msgid "Help"
-msgstr ""
-
 #: apps/base/templates/components.scm:416 apps/base/templates/donate.scm:26 apps/base/templates/donate.scm:29
 msgctxt "website menu"
 msgid "Donate"
-- 
2.28.0


--d7hu55zyk5a5pbvk--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 4 Aug 2020 15:37:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Aug 04 11:37:30 2020
Received: from localhost ([127.0.0.1]:48886 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k2z0F-0008DV-16
	for submit <at> debbugs.gnu.org; Tue, 04 Aug 2020 11:37:30 -0400
Received: from pelzflorian.de ([5.45.111.108]:43196 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k2z0C-0008DM-PQ
 for 26302 <at> debbugs.gnu.org; Tue, 04 Aug 2020 11:37:22 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 2D15A3602A4;
 Tue,  4 Aug 2020 17:37:19 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1596555439;
 bh=FXzmxx7pqXZYz3sUGgfLRIgpp8k2SrE6sNgSGoOTbYM=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=WSzMbjE9QE7l2XJST9TkIZccExXjZ8SyZMdkKgH36lqTRAqhkRzktFf3G0P0aMlS3
 cz6igKXrjUghQcJ9UJvre2kOl/E+GmvqOkilb6pd9UrNH6nfXNi6+XlKK/h2aCAqFf
 5iHjzmgYJCS6Ui94ykf0d8Aq1R69Q45BnebpJuD0=
Date: Tue, 4 Aug 2020 17:37:10 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200804153554.6vosez3tn3fa3tlk@HIDDEN>
References: <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729192103.2fug7t6to2tuiwew@HIDDEN>
 <874kpnu4j8.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="wvhxrlscuggwwcba"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <874kpnu4j8.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--wvhxrlscuggwwcba
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Fri, Jul 31, 2020 at 04:45:31PM +0200, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > On Tue, Jul 28, 2020 at 11:50:13PM +0200, Ludovic Courtès wrote:
> >> I wonder if we should link to more practical step-by-step instructions
> >> on how to get started translating, to lower the barrier for those who
> >> want to get started without engaging in possibly open-ended discussions
> >> with the fabulous Guix team.  :-)
> > I don’t know how best to integrate step-by-step instructions.  While
> > the TP has instructions
> > <https://translationproject.org/html/translators.html>, they seem more
> > intimidating to me than, as a first step, talking to the helpful
> > people at the TP.  A few steps also describe how to disclaim
> > copyright, which Guix does not ask for anyway.
> Yeah, dunno.  In the post you could duplicate/filter those steps just so
> it’s more directly understandable what it takes to translate pages.
> Your call!

I rewrote the part for translators that comes before the first source
code in the post and changed it again and again while a
not-yet-Guix-using friend gave helpful feedback.  I attach the current
draft blog post, but currently you can also read it at:

https://pelzflorian.de/adding-translations-to-guix-website/index.html

Regards,
Florian

--wvhxrlscuggwwcba
Content-Type: text/markdown; charset=utf-8
Content-Disposition: attachment;
	filename="3rd-draft-adding-translations-to-guix-website.md"
Content-Transfer-Encoding: 8bit

title: Adding translations to Guix’ website
date: 2020-08-01 15:00
author: Florian Pelz
tags: Community
---
As part of [GNU](https://www.gnu.org), Guix aims to bring freedom to
computer users all over the world, no matter the languages they
(prefer to) speak.  For example, Guix users asking for
[help](https://guix.gnu.org/help) can expect an answer even if they do
so in languages other than English.

We also offer translated software for people more comfortable with a
language other than English.  Thanks to many people who contribute
translations, GNU Guix and the packages it distributes can be used in
various languages, which we value greatly.  We are happy to announce
that Guix’ website can now be translated in the same manner.  If you
want to get a glimpse on how the translation process works, first from
a translator’s, then from a programmer’s perspective, read on.

The process for translators is kept simple.  Like lots of other free
software packages, Guix uses
[GNU Gettext](https://www.gnu.org/software/gettext) for its
translations, with which translatable strings are extracted from the
source code to so-called PO files.  If this is new to you, the magic
behind the translation process is best understood by taking a look at
one of them.  Download a PO file from [your language’s team at the
Translation Project (TP)](https://translationproject.org/team).

Even though PO files are text files, changes should not be made with a
text editor but with PO editing software.  Translators can use any of
various free-software tools for filling in translations, of which
[Poedit](https://poedit.net) is one example.  There also is a [special
PO editing mode](https://www.emacswiki.org/emacs/PoMode) for users of
[GNU Emacs](https://www.gnu.org/software/emacs).  Over time
translators find out what software they are happy with and what
features they need.

Help with translations is much appreciated.  If you intend to become a
translator, before you begin with serious editing of a PO file, you
should learn about how your TP team is organized.  You need to talk to
[your team](https://translationproject.org/team) at the Translation
Project, which also helps avoid duplicate work.  The TP also hosts a
[list of steps](https://translationproject.org/html/translators.html)
to help new translators getting started, though not all are needed for
Guix — we at Guix do not require a copyright disclaimer — and it may
be easier to talk to the helpful people at your TP team.

So much for the translation of ordinary source code.  With
[Po4a](https://po4a.org), we can also use Gettext’s tooling to
translate Guix’ [manual](https://guix.gnu.org/manual/) and
[cookbook](https://guix.gnu.org/cookbook/).  But all this was not true
of its web presence.  That’s why after a [lengthy
process,](https://issues.guix.info/issue/26302) the website of
GNU Guix has undergone an update.  It now supports translation into
other languages.  Such support is known as internationalization
(“i18n”).

Guix’ website is written in a variant of HTML (in which web pages are
usually written) that integrates better with the [Scheme programming
language](https://schemers.org).  Instead of XML tags, we use
[SXML](https://www.gnu.org/software/guile/manual/html_node/SXML.html).
This allows web authors to mix code and text.  It looks like this:

```scheme
`(section
  (h2 "On packaging")
  (p
   "Packages are "
   (a (@ (href ,(manual-url "Defining-Packages.html"))) "defined")
   " as native "
   (a (@ (href ,(gnu-url "software/guile"))) "Guile")
   " modules."))
```

However, this mixing makes it more difficult to extract the strings to
be translated.  We therefore cannot take the same approach as
[gnu.org](https://www.gnu.org), which uses a software package called
[GNUnited Nations](https://www.gnu.org/software/gnun) to extract from
pure HTML mark-up.  Translators are not always coders and we would
prefer to show them only the textual part, like this:

```
msgid "Packages are <1>defined</1> as native <2>Guile</2> modules."
```

Our new, custom i18n system does this.  The website authors need to
mark translatable expressions in the same way ordinary strings are
[usually marked in Guile Scheme
programs:](https://www.gnu.org/software/guile/manual/html_node/Gettext-Support.html#Gettext-Support)

```scheme
`(section
  ,(G_ `(h2 "On packaging"))
  ;; TRANSLATORS: Defining Packages is a section name
  ;; in the English (en) manual.
  ,(G_ `(p
         "Packages are "
         ,(G_ (manual-href "defined" (G_ "en") (G_ "Defining-Packages.html")))
         " as native "
         ,(G_ `(a (@ (href ,(gnu-url "software/guile"))) "Guile"))
         " modules.")))
```

Translators can arbitrarily change the ordering:

```
#. TRANSLATORS: Defining Packages is a section name
#. in the English (en) manual.
#: apps/base/templates/about.scm:64
msgid "Packages are <1>defined<1.1>en</1.1><1.2>Defining-Packages.html</1.2></1> as native <2>Guile</2> modules."
msgstr "Pakete werden als reine <2>Guile</2>-Module <1>definiert<1.1>de</1.1><1.2>Pakete-definieren.html</1.2></1>."
```

Details are [documented
here](https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/tree/website/i18n-howto.txt).
We hope it strikes the right balance between simplicity for the
website’s developers and translator comfort.  Still missing is a way
to translate blog posts like the one you are reading here.

With ideas for and by a more diverse community, we can look forward to
a bright multi-lingual future.  Please get in touch with [your
language’s team](https://translationproject.org/team) or [us Guix
developers](https://guix.gnu.org/contact) if you want to help make
Guix’ website available in your language as well!

#### About GNU Guix

[GNU Guix](https://guix.gnu.org) is a transactional package
manager and an advanced distribution of the GNU system that [respects
user
freedom](https://www.gnu.org/distros/free-system-distribution-guidelines.html).
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.

In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection.  When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management.  Guix is highly customizable
and hackable through [Guile](https://www.gnu.org/software/guile)
programming interfaces and extensions to the
[Scheme](https://schemers.org) language.

--wvhxrlscuggwwcba--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 3 Aug 2020 14:53:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Aug 03 10:53:59 2020
Received: from localhost ([127.0.0.1]:45839 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k2bqh-0001aj-G0
	for submit <at> debbugs.gnu.org; Mon, 03 Aug 2020 10:53:59 -0400
Received: from eggs.gnu.org ([209.51.188.92]:34606)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1k2bqg-0001aV-HZ
 for 26302 <at> debbugs.gnu.org; Mon, 03 Aug 2020 10:53:59 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:43243)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1k2bqZ-0007jV-Ld; Mon, 03 Aug 2020 10:53:51 -0400
Received: from [2a01:e35:2ffd:930:68c2:32f7:f96f:b343] (port=51460 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1k2bqY-0007sX-Os; Mon, 03 Aug 2020 10:53:51 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: Multilingual web site is on-line!
References: <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729032053.27c8ad4b@HIDDEN>
 <20200729135338.nqtpk3tugxlsjlu2@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 17 Thermidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Mon, 03 Aug 2020 16:53:48 +0200
In-Reply-To: <20200729135338.nqtpk3tugxlsjlu2@HIDDEN>
 (pelzflorian@HIDDEN's message of "Wed, 29 Jul 2020 15:56:02
 +0200")
Message-ID: <87ft93srur.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> Since there is no Makefile, I suppose it is enough to put the website
> directory of the guix-artwork repo in a tar file.

Sounds good to me.

> What version number should we give it?  That of Guix, or a YYYYMMDD?
> I suppose the version number should be part of the POT file=E2=80=99s
> Project-Id-Version field and the tar filename, but I don=E2=80=99t know.

I=E2=80=99d say YYYYMMDD.  The coordinator might have suggestions.

> Should we at the same time send a tarball of Guix=E2=80=99 prospective new
> release?

It can happen separately but it=E2=80=99d be nice!

> Could you Julien or someone else send the tarball(s) off to the TP
> coordinator?

That=E2=80=99d be great.   Julien, let us know if you=E2=80=99d rather hand=
 over this
responsibility.

Cheers,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 31 Jul 2020 14:45:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jul 31 10:45:43 2020
Received: from localhost ([127.0.0.1]:38396 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k1WI3-0006EN-67
	for submit <at> debbugs.gnu.org; Fri, 31 Jul 2020 10:45:43 -0400
Received: from eggs.gnu.org ([209.51.188.92]:47150)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1k1WI1-0006E9-5D
 for 26302 <at> debbugs.gnu.org; Fri, 31 Jul 2020 10:45:41 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:43022)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1k1WHv-0000nm-KY; Fri, 31 Jul 2020 10:45:35 -0400
Received: from [2a01:e35:2ffd:930:68c2:32f7:f96f:b343] (port=48716 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1k1WHv-00048x-0C; Fri, 31 Jul 2020 10:45:35 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: Multilingual web site is on-line!
References: <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729192103.2fug7t6to2tuiwew@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 14 Thermidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Fri, 31 Jul 2020 16:45:31 +0200
In-Reply-To: <20200729192103.2fug7t6to2tuiwew@HIDDEN>
 (pelzflorian@HIDDEN's message of "Wed, 29 Jul 2020 21:21:03
 +0200")
Message-ID: <874kpnu4j8.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi!

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Tue, Jul 28, 2020 at 11:50:13PM +0200, Ludovic Court=C3=A8s wrote:
>> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
>> > Guix=E2=80=99 website is written in
>> > [SHTML](https://www.nongnu.org/guile-lib/doc/ref/htmlprag/), which is
>> > a variant of HTML (in which web pages are usually written) that
>>=20
>> I think it=E2=80=99s technically SXHTML, no?
>> https://www.gnu.org/software/guile/manual/html_node/SXML.html
>
> The result is not valid XHTML.  I will just call it SXML now, which is
> what the Haunt info manual calls it.

OK.

>> I wonder if we should link to more practical step-by-step instructions
>> on how to get started translating, to lower the barrier for those who
>> want to get started without engaging in possibly open-ended discussions
>> with the fabulous Guix team.  :-)
>
> I don=E2=80=99t know how best to integrate step-by-step instructions.  Wh=
ile
> the TP has instructions
> <https://translationproject.org/html/translators.html>, they seem more
> intimidating to me than, as a first step, talking to the helpful
> people at the TP.  A few steps also describe how to disclaim
> copyright, which Guix does not ask for anyway.

Yeah, dunno.  In the post you could duplicate/filter those steps just so
it=E2=80=99s more directly understandable what it takes to translate pages.
Your call!

> I propose the attached blog post draft if noone objects, taking into
> account Ludo=E2=80=99s helpful suggestions.  Is it missing anything
> interesting about the i18n system?
>
> Should I add it to the website as a draft?  I suppose no, I suppose I
> should just publish it as-is once guix-website.pot is at the TP.

Yes.

> title: Adding translations to Guix=E2=80=99 website
> date: 2020-07-29 15:00
> author: Florian Pelz
> tags: Community

LGTM!  :-)

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 29 Jul 2020 19:21:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 29 15:21:32 2020
Received: from localhost ([127.0.0.1]:33752 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0rdl-0005Gp-7N
	for submit <at> debbugs.gnu.org; Wed, 29 Jul 2020 15:21:32 -0400
Received: from pelzflorian.de ([5.45.111.108]:35202 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k0rde-0005GW-5W
 for 26302 <at> debbugs.gnu.org; Wed, 29 Jul 2020 15:21:24 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 492463602A4;
 Wed, 29 Jul 2020 21:21:13 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1596050473;
 bh=b4w1VuTYRYklpHTP+Env5Mx/VZYqGNXAt3NGJR5Q9wY=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=v5DH3xl7UxYFAVf3JaRF4YDzC1/YvXPb+o62TGHenzPiZW637rGtNJ/YEKeYMZI4l
 pRYiFsZ5RXb5/bVxxLYqc7ExKUAR1nqEnlbP1xUa+Pwf8/fK12JVt5N7pqMoQrj4uH
 OU7CIe7ROv/XT2wOC/9nNcvbi2R7pRVHRFu0hgzQ=
Date: Wed, 29 Jul 2020 21:21:03 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200729192103.2fug7t6to2tuiwew@HIDDEN>
References: <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="wki2oaaslwyprwuv"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87k0yns416.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--wki2oaaslwyprwuv
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Tue, Jul 28, 2020 at 11:50:13PM +0200, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > Guix’ website is written in
> > [SHTML](https://www.nongnu.org/guile-lib/doc/ref/htmlprag/), which is
> > a variant of HTML (in which web pages are usually written) that
> 
> I think it’s technically SXHTML, no?
> https://www.gnu.org/software/guile/manual/html_node/SXML.html

The result is not valid XHTML.  I will just call it SXML now, which is
what the Haunt info manual calls it.


> I wonder if we should link to more practical step-by-step instructions
> on how to get started translating, to lower the barrier for those who
> want to get started without engaging in possibly open-ended discussions
> with the fabulous Guix team.  :-)

I don’t know how best to integrate step-by-step instructions.  While
the TP has instructions
<https://translationproject.org/html/translators.html>, they seem more
intimidating to me than, as a first step, talking to the helpful
people at the TP.  A few steps also describe how to disclaim
copyright, which Guix does not ask for anyway.

I propose the attached blog post draft if noone objects, taking into
account Ludo’s helpful suggestions.  Is it missing anything
interesting about the i18n system?

Should I add it to the website as a draft?  I suppose no, I suppose I
should just publish it as-is once guix-website.pot is at the TP.

Regards,
Florian

--wki2oaaslwyprwuv
Content-Type: text/markdown; charset=utf-8
Content-Disposition: attachment;
	filename="2nd-draft-blog-post-translatable-website.md"
Content-Transfer-Encoding: 8bit

title: Adding translations to Guix’ website
date: 2020-07-29 15:00
author: Florian Pelz
tags: Community
---
As part of [GNU](https://www.gnu.org), Guix aims to bring freedom to
computer users all over the world, no matter the languages they
(prefer to) speak.  For example, Guix users asking for
[help](https://guix.gnu.org/help) can expect an answer even if they do
so in languages other than English.

We also offer software translations for people more comfortable with a
language other than English.  Thanks to many people who contribute
translations, GNU Guix and the packages it distributes can be used in
various languages.  Guix uses
[GNU Gettext](https://www.gnu.org/software/gettext) for its
translations, with which translatable strings are extracted from the
source code to so-called PO files.  Translators can use any of various
free-software tools, such as
[GNU Emacs](https://www.gnu.org/software/emacs) or
[Poedit](https://poedit.net), for filling in translations.  With
[Po4a](https://po4a.org), we can also use Gettext’s tooling to
translate Guix’ [manual](https://guix.gnu.org/manual/) and
[cookbook](https://guix.gnu.org/cookbook/).

But this was not true of its web presence.  That’s why after a
[lengthy process,](https://issues.guix.info/issue/26302) the website
of GNU Guix has undergone an update.  It now supports translation into
other languages.  Such support is known as internationalization
(“i18n”).

Guix’ website is written in a variant of HTML (in which web pages are
usually written) that integrates better with the [Scheme programming
language](https://schemers.org).  Instead of XML tags, we use
[SXML](https://www.gnu.org/software/guile/manual/html_node/SXML.html).
This allows web authors to mix code and text.  It looks like this:

```scheme
`(section
  (h2 "On packaging")
  (p
   "Packages are "
   (a (@ (href ,(manual-url "Defining-Packages.html"))) "defined")
   " as native "
   (a (@ (href ,(gnu-url "software/guile"))) "Guile")
   " modules."))
```

However, this mixing makes it more difficult to extract the strings to
be translated.  We therefore cannot take the same approach as
[gnu.org](https://www.gnu.org), which uses a software package called
[GNUnited Nations](https://www.gnu.org/software/gnun) to extract from
pure HTML mark-up.  Translators are not always coders and we would
prefer to show them only the textual part, like this:

```
msgid "Packages are <1>defined</1> as native <2>Guile</2> modules."
```

Our new, custom i18n system does this.  The website authors need to
mark translatable expressions in the same way ordinary strings are
[usually marked in Guile Scheme
programs:](https://www.gnu.org/software/guile/manual/html_node/Gettext-Support.html#Gettext-Support)

```scheme
`(section
  ,(G_ `(h2 "On packaging"))
  ;; TRANSLATORS: Defining Packages is a section name
  ;; in the English (en) manual.
  ,(G_ `(p
         "Packages are "
         ,(G_ (manual-href "defined" (G_ "en") (G_ "Defining-Packages.html")))
         " as native "
         ,(G_ `(a (@ (href ,(gnu-url "software/guile"))) "Guile"))
         " modules.")))
```

Translators can arbitrarily change the ordering:

```
#. TRANSLATORS: Defining Packages is a section name
#. in the English (en) manual.
#: apps/base/templates/about.scm:64
msgid "Packages are <1>defined<1.1>en</1.1><1.2>Defining-Packages.html</1.2></1> as native <2>Guile</2> modules."
msgstr "Pakete werden als reine <2>Guile</2>-Module <1>definiert<1.1>de</1.1><1.2>Pakete-definieren.html</1.2></1>."
```

Details are [documented
here](https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/tree/website/i18n-howto.txt).
We hope it strikes the right balance between simplicity for the
website’s developers and translator comfort.  Still missing is a way
to translate blog posts like the one you are reading here.

With ideas for and by a more diverse community, we can look forward to
a bright multi-lingual future.  Please get in touch with [your
language’s team](https://translationproject.org/team) at the
[Translation Project](https://translationproject.org) or [us Guix
developers](https://guix.gnu.org/contact) if you want to help make
Guix’ website available in your language as well!

#### About GNU Guix

[GNU Guix](https://guix.gnu.org) is a transactional package
manager and an advanced distribution of the GNU system that [respects
user
freedom](https://www.gnu.org/distros/free-system-distribution-guidelines.html).
Guix can be used on top of any system running the kernel Linux, or it
can be used as a standalone operating system distribution for i686,
x86_64, ARMv7, and AArch64 machines.

In addition to standard package management features, Guix supports
transactional upgrades and roll-backs, unprivileged package management,
per-user profiles, and garbage collection.  When used as a standalone
GNU/Linux distribution, Guix offers a declarative, stateless approach to
operating system configuration management.  Guix is highly customizable
and hackable through [Guile](https://www.gnu.org/software/guile)
programming interfaces and extensions to the
[Scheme](https://schemers.org) language.

--wki2oaaslwyprwuv--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 29 Jul 2020 13:56:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 29 09:56:20 2020
Received: from localhost ([127.0.0.1]:33399 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0mZ9-0001TS-PA
	for submit <at> debbugs.gnu.org; Wed, 29 Jul 2020 09:56:19 -0400
Received: from pelzflorian.de ([5.45.111.108]:34894 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k0mZ5-0001TK-AK
 for 26302 <at> debbugs.gnu.org; Wed, 29 Jul 2020 09:56:18 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 2567C3602A4;
 Wed, 29 Jul 2020 15:56:14 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1596030974;
 bh=e1Vx27NHLNsKN9eB9E3hVCSBcwCjs8DgZPQJdcLtRTs=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=oztCTFjJsD65WSzN6i1zDbFZYqVSpJXBEB3LyCewFum19+HcypPAP9FOmXaMMS8F3
 4ueu+2x6YwHNqzExZzJERilW0ccbzfSsWsJSUWFO5d6TzG8zwHqWoxI9I3l2VP5sK5
 Kv4XMtbzU6HoSZtkoPCvRxNLVVxZnH4oRmdeEERk=
Date: Wed, 29 Jul 2020 15:56:02 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Julien Lepiller <julien@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200729135338.nqtpk3tugxlsjlu2@HIDDEN>
References: <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
 <20200729032053.27c8ad4b@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200729032053.27c8ad4b@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Jul 29, 2020 at 03:21:09AM +0200, Julien Lepiller wrote:
> Le Tue, 28 Jul 2020 23:50:13 +0200,
> Ludovic Courtès <ludo@HIDDEN> a écrit :
> > 
> > I’m not as enthusiastic as you are about the TP but why not.
> > Julien, what are your thoughts?
> 
> Not sure we're going to do the switch soon, so we can send it to the TP.

Since there is no Makefile, I suppose it is enough to put the website
directory of the guix-artwork repo in a tar file.

What version number should we give it?  That of Guix, or a YYYYMMDD?
I suppose the version number should be part of the POT file’s
Project-Id-Version field and the tar filename, but I don’t know.

Should we at the same time send a tarball of Guix’ prospective new
release?

Could you Julien or someone else send the tarball(s) off to the TP
coordinator?

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 29 Jul 2020 01:21:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jul 28 21:21:25 2020
Received: from localhost ([127.0.0.1]:59511 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0ama-0001An-Qr
	for submit <at> debbugs.gnu.org; Tue, 28 Jul 2020 21:21:25 -0400
Received: from lepiller.eu ([89.234.186.109]:55806)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <julien@HIDDEN>) id 1k0amZ-0001Ad-1V
 for 26302 <at> debbugs.gnu.org; Tue, 28 Jul 2020 21:21:24 -0400
Received: from lepiller.eu (localhost [127.0.0.1])
 by lepiller.eu (OpenSMTPD) with ESMTP id f2602185;
 Wed, 29 Jul 2020 01:21:20 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=lepiller.eu; h=date:from
 :to:cc:subject:message-id:in-reply-to:references:mime-version
 :content-type:content-transfer-encoding; s=dkim; bh=sL5Fsf+j98Si
 1O9yegE3EJrWMPhT2EIPYxykV+uR4i4=; b=JOSIEphaLDFl6UVGkZAeiYVjXJrC
 a5i5o7wt2jIhe3TPnaoF/2MHxlx4ZLJyiS5RyQckeMCIERV14P9KHkY6dDouu2sn
 Pn1fkgZuPLHS4Pc55kzcHggvIYCWQ6KC4cRbpzrqIbJuKszzavVbmZ3jqWnzR7mT
 kOWu/DF1tJj3VKIC0BebSxwr+yWoWtAIgny0s3QdJOy1KbuiMXdEZmrOqBt4GrIO
 WL+MAumA4uGSfF4YM5R9KrVSYbNJyVR8bq0JiD4nr5YsDFZzubnwYzEcKm+b+YF9
 2LwYDLFai+3NmsqNCl/CwdyTvOD39GhKW9t36M8toyAxa00dwNGyckif1g==
Received: by lepiller.eu (OpenSMTPD) with ESMTPSA id 4305cd14
 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO); 
 Wed, 29 Jul 2020 01:21:20 +0000 (UTC)
Date: Wed, 29 Jul 2020 03:21:09 +0200
From: Julien Lepiller <julien@HIDDEN>
To: Ludovic =?UTF-8?B?Q291cnTDqHM=?= <ludo@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200729032053.27c8ad4b@HIDDEN>
In-Reply-To: <87k0yns416.fsf@HIDDEN>
References: <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 <87k0yns416.fsf@HIDDEN>
X-Mailer: Claws Mail 3.17.6 (GTK+ 2.24.32; x86_64-unknown-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Le Tue, 28 Jul 2020 23:50:13 +0200,
Ludovic Court=C3=A8s <ludo@HIDDEN> a =C3=A9crit :
>=20
> I=E2=80=99m not as enthusiastic as you are about the TP but why not.
> Julien, what are your thoughts?

Not sure we're going to do the switch soon, so we can send it to the TP.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 28 Jul 2020 21:50:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jul 28 17:50:27 2020
Received: from localhost ([127.0.0.1]:59336 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0XUR-0004QQ-BZ
	for submit <at> debbugs.gnu.org; Tue, 28 Jul 2020 17:50:27 -0400
Received: from eggs.gnu.org ([209.51.188.92]:38218)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1k0XUM-0004QA-Sg
 for 26302 <at> debbugs.gnu.org; Tue, 28 Jul 2020 17:50:26 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:33656)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1k0XUF-0000wI-FR; Tue, 28 Jul 2020 17:50:15 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=48294 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1k0XUE-0001o9-UE; Tue, 28 Jul 2020 17:50:15 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: Multilingual web site is on-line!
References: <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
 <20200727160101.nsznenkv75wcsuoe@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 11 Thermidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Tue, 28 Jul 2020 23:50:13 +0200
In-Reply-To: <20200727160101.nsznenkv75wcsuoe@HIDDEN>
 (pelzflorian@HIDDEN's message of "Mon, 27 Jul 2020 18:01:01
 +0200")
Message-ID: <87k0yns416.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, Julien Lepiller <julien@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hello Florian,

(+Cc: Julien.)

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Sun, Jul 26, 2020 at 08:58:11PM +0200, pelzflorian (Florian Pelz) wrot=
e:
>> Ohh sorry, the manual disappeared.  I suppose it is built in /srv/=E2=80=
=A6/manual/?
>
> Thank you Ludo for fixing this!

That=E2=80=99s my modest contribution.  :-)

>> > Should we publicize a process to contribute translations?  It could be=
 a
>> > page on the web site linked from the bottom of each page or something.
>> > Thoughts?
>>=20
>> One way would be to tar up the website and send it to the Translation
>> Project.  I don=E2=80=99t know about the status of the Weblate plans.
>
> I would suggest sending a tar archive with the website directory of
> guix-artwork to the TP once more (ideally along with a current tarball
> of Guix proper).  Also I think even if once we use different
> technology like Weblate instead of the TP, the TP should remain the
> go-to place for our translators, because it is where many other
> projects=E2=80=99 translators gather.

I=E2=80=99m not as enthusiastic as you are about the TP but why not.
Julien, what are your thoughts?

>> > It would also be nice to have a blog post mentioning this, perhaps
>> > explaining the tools behind it, and why we think it matters.  I could
>> > contribute a paragraph on linguistic diversity.  :-)
>> >=20
>> > Thanks!
>> >=20
>> > Ludo=E2=80=99.
>>=20
>> So far I think Guix always needs more users and translations help.
>> Also Scheme=E2=80=99s homoiconicity makes it easy to write translation m=
acros.
>> I will think some more what I could say about this tomorrow.
>
> Please find attached a first draft blog post.

Woow, that was fast!

> title: Adding translations to Guix=E2=80=99 website
> date: 2020-07-28 15:00
> author: Florian Pelz
> tags: Community
> ---
> As part of [GNU](https://www.gnu.org/), Guix aims to bring freedom to
> computer users all over the world, no matter the languages they
> (prefer to) speak.  For example, Guix users asking for [help](/help)
                                                                ^
You should use absolute URLs to get valid links on, say,
<https://planet.gnu.org>.

> Guix=E2=80=99 website is written in
> [SHTML](https://www.nongnu.org/guile-lib/doc/ref/htmlprag/), which is
> a variant of HTML (in which web pages are usually written) that

I think it=E2=80=99s technically SXHTML, no?
https://www.gnu.org/software/guile/manual/html_node/SXML.html

> However, this mixing makes it more difficult to extract the strings to
> be translated.  We therefore cannot take the same approach as
> [gnu.org](https://www.gnu.org/), which uses a software called

s/a software/a software package/

> With ideas for and by a more diverse community, we can look forward to
> a bright multi-lingual future.  Please get in touch with [the
> Translation Project](https://translationproject.org/team/) or [us Guix
> developers](/contact) if you want to help make Guix=E2=80=99 website avai=
lable
> in your language as well!

I wonder if we should link to more practical step-by-step instructions
on how to get started translating, to lower the barrier for those who
want to get started without engaging in possibly open-ended discussions
with the fabulous Guix team.  :-)

Anyway the post looks great to me!  Perhaps you should publish it once
the TP (or Weblate?) is set up?  When you publish, make sure to adjust
the date at the top and add the =E2=80=9CAbout=E2=80=9D footer at the botto=
m (which you
can take from the latest post).

I=E2=80=99ll be mostly away from keyboard in the coming weeks so you don=E2=
=80=99t need
to wait for me.

Thank you!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 28 Jul 2020 16:02:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jul 28 12:02:42 2020
Received: from localhost ([127.0.0.1]:58891 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0S3t-0004H2-R7
	for submit <at> debbugs.gnu.org; Tue, 28 Jul 2020 12:02:41 -0400
Received: from pelzflorian.de ([5.45.111.108]:33664 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k0S3o-0004Gq-Pd
 for 26302 <at> debbugs.gnu.org; Tue, 28 Jul 2020 12:02:40 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 465DB3602A4;
 Tue, 28 Jul 2020 18:02:35 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595952155;
 bh=VFtNSXK3QCPPXF5SFL0SM17HNC4TBuB32k13SFOKrnk=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=EI6ekq2aXZ7hMwubeErmGhkcOqkAGSSjLu0yvBTrD741DEJz7HdiRLOfNSgU/kOVk
 YCCReCpuTC9qcfjKiO4Uty1oZMoekDHE18LXy5R0YwpiRN5QDZuO7/Mr/6Qf0OyMY0
 /8/dLNDqClu3pLhHlQsIfcsFTfTf2Pjn/KvTJq+o=
Date: Tue, 28 Jul 2020 18:02:27 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: 26302 <26302 <at> debbugs.gnu.org>
Subject: Re: bug#26302: Fwd: website translation English (US)?
Message-ID: <20200728160141.delqzffweykiahkc@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <20200728094425.q7bmtjxqc26fu22c@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20200728094425.q7bmtjxqc26fu22c@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: zimoun <zimon.toutoune@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Tue, Jul 28, 2020 at 11:44:25AM +0200, pelzflorian (Florian Pelz) wrote:
> I will push the patch this evening.

Pushed as 68410f28e374c6b322fa69e1fbc5775e1bb0c8a4 (with minor changes
to the commit message and a smaller diff of the PO file).




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 28 Jul 2020 10:03:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jul 28 06:03:32 2020
Received: from localhost ([127.0.0.1]:57342 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0MSJ-0005f9-U0
	for submit <at> debbugs.gnu.org; Tue, 28 Jul 2020 06:03:32 -0400
Received: from mail-wm1-f43.google.com ([209.85.128.43]:50373)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <zimon.toutoune@HIDDEN>) id 1k0MSH-0005ex-Sz
 for 26302 <at> debbugs.gnu.org; Tue, 28 Jul 2020 06:03:30 -0400
Received: by mail-wm1-f43.google.com with SMTP id c80so16731747wme.0
 for <26302 <at> debbugs.gnu.org>; Tue, 28 Jul 2020 03:03:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:subject:in-reply-to:references:date:message-id:mime-version;
 bh=Lo30vlx1AmrOuP4BudufPZoyjaM/3FkDSt8aioqQrCw=;
 b=aFf1U57GlBQABmXu0P4cTig3Ew7hIGUY6hGlzgZc0dvr79O7mvFTpZJo7ihk586T8S
 GwsMcN/qMPLUB+gJNaMcqJfWQU0VHvYwjjjeFcncf9s3Ro+5GajBxCQATnFPhzB3a32A
 gnTcuudIZGtN1u2xAn1FCRsfHMqmr7dswvVan+By8IN0eLf9QMDGq9oz+vb9U9k8lHul
 raRZCVLsSNZ63iXs/uVhV/VjhunyHHQkbbnsYNmhtsw03eVFBTgJeoKSp+1TEtsnF3dK
 qy12buexsLaHk9HFVDXbOz/aAj6dl8mQyb3AmrvDPvzzGx4yR7FIlzTFwCwOKUl250zX
 1Gqg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:subject:in-reply-to:references:date
 :message-id:mime-version;
 bh=Lo30vlx1AmrOuP4BudufPZoyjaM/3FkDSt8aioqQrCw=;
 b=Hxi+Puk4B7mwG4ox5QPdEpoMkFAugVqWO4Ojr00LICQaryIEtXjOlJkBAwzBfimhd4
 sXKKHjRL0N7U9gsraWmfEBJKPYjBnBay3k7PeyZXtJYKqmm8GfNV0OP5WOwPjGAQO5Ok
 c+PZJuf3PxiR0V4G5fzaOBc/5xjMHSBv8t8At9bGRxmuDRdlHI4EIepGsJcaiugehVws
 +XZwLnvZVUxYe5Kly1YuT+2QyFIRB6FP9uA35FKAB4NIDj0rwUh+XelkcdvkU9d/4cEs
 yCznMzjm8sN6fnVrhZy1teh5v/PsJpVzYhepOraiWZY8j4Lfb/8ZbFjhWUStkWuupD+C
 7Tmw==
X-Gm-Message-State: AOAM532FsnCxqjPpACcB1lBNSBgzCVUROBcG4bq+bCqHvjhudo9mosp7
 w8/rBwB3vQKM/KMG7fsKToVVifmb
X-Google-Smtp-Source: ABdhPJyNMOfnO1QicefoWqxVuyD6M+ZM7qZxnzYAyT65lw1hMqucXzw2tB+VpsO7Fiq+tDCUpY7bew==
X-Received: by 2002:a1c:a9ce:: with SMTP id s197mr3224999wme.58.1595930603704; 
 Tue, 28 Jul 2020 03:03:23 -0700 (PDT)
Received: from lili ([2a01:e0a:59b:9120:65d2:2476:f637:db1e])
 by smtp.gmail.com with ESMTPSA id f15sm3138696wmj.39.2020.07.28.03.03.22
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 28 Jul 2020 03:03:23 -0700 (PDT)
From: zimoun <zimon.toutoune@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
Subject: Re: Fwd: website translation English (US)?
In-Reply-To: <20200728094425.q7bmtjxqc26fu22c@HIDDEN>
References: <20200728094425.q7bmtjxqc26fu22c@HIDDEN>
Date: Tue, 28 Jul 2020 12:03:21 +0200
Message-ID: <861rkwyn12.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi Florian,

> I will push the patch this evening.

Cool!  Thank you.

All the best,
simon






Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 28 Jul 2020 09:44:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jul 28 05:44:36 2020
Received: from localhost ([127.0.0.1]:57287 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k0MA0-0005A0-R9
	for submit <at> debbugs.gnu.org; Tue, 28 Jul 2020 05:44:36 -0400
Received: from pelzflorian.de ([5.45.111.108]:33220 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k0M9y-00059s-Su
 for 26302 <at> debbugs.gnu.org; Tue, 28 Jul 2020 05:44:35 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id B3F0D3602A4;
 Tue, 28 Jul 2020 11:44:33 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595929473;
 bh=XGTVJMD0NcQBopnDfEskKc094OjY4QUCK3ROAVIF72w=;
 h=Date:From:To:Cc:Subject;
 b=eFoc/3JrwK8H5UOU3c0oJCZhxdU8YsTEGB5SG9hTUnzrpdUSy+87yE1NrogUCvczk
 eyXZiraFy4eyIAhhroKT/5X2EYnbR5NXIt1xbp4Vg7SaUkK7bMbSmju3URb8vqvnL9
 Os1SdrMaf2CEh1JRWz6b0jSfJDFlJys/l4Rx+HQk=
Date: Tue, 28 Jul 2020 11:44:25 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: 26302 <26302 <at> debbugs.gnu.org>
Subject: Fwd: website translation English (US)?
Message-ID: <20200728094425.q7bmtjxqc26fu22c@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="gcpxdtdsnvmvvuwa"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
X-Debbugs-Envelope-To: 26302
Cc: zimoun <zimon.toutoune@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>


--gcpxdtdsnvmvvuwa
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

I just noticed simon and I forgot to reply to the bug.
Here is our conversation on the English (US) display name.

----- Forwarded message from zimoun <zimon.toutoune@HIDDEN> -----

Date: Mon, 27 Jul 2020 21:25:06 +0200
From: zimoun <zimon.toutoune@HIDDEN>
To: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
Subject: website translation English (US)?

Hi Florian,

Thank you for the work!  Really nice.

Aside, why is it "English (US)" and not simply "English".  Well, I am
not sure that the translation to "English (UK)" would be really
different.

Back to holidays (on September) I will try to do the French one if
roptat does not beat me. ;-)

All the best,
simon

----- End forwarded message -----

----- Forwarded message from zimoun <zimon.toutoune@HIDDEN> -----

Date: Tue, 28 Jul 2020 00:40:43 +0200
From: zimoun <zimon.toutoune@HIDDEN>
To: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
Subject: Re: website translation English (US)?

On Mon, 27 Jul 2020 at 22:49, "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> wrote:

> The differences would be few and far between (some
> “have”s might become “have got”s, publicized becomes publicised) and
> there currently is no UK English translation.
>
> Hmm.  I am hesitant to remove the (US) from English (US).  I agree
> that if we do not have a separate English (UK) translation (Guix
> proper does not), then it would look better without the country code.
> However if we ever do get a separate UK/AU/… variant, then a rename to
> English (US) would break all older PO files.

Well, I have never checked but I do not know if the manual fully
respects US English.  I understand the PO files issue but currently the
trasnlationproject.org has en_GB and en_ZA registered, only.

From my point of view, it looks weird to have French (FR), French (CA),
French (BE), etc..  And even it is not exactly the same French, as
French native, I can read and understand all kind of French (which is
not the case about listen) even if some sentence or vocabulary could
sound awkward.  Whatever!

I have not checked in the code (just pulled now :-)), but is it not
possible to add a comment in guix-website.pot about the variant and in
the same time having just “English” as msgid i.e. change to (G_
"English") in utils.scm.  Or something like that.

The English variant would be still possible and it would require an
update by all the translator – which appears to me fine.

WDYT?

All the best,
simon

ps:
Thank you again for all this tough work.

----- End forwarded message -----

----- Forwarded message from "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> -----

Date: Tue, 28 Jul 2020 11:23:56 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: zimoun <zimon.toutoune@HIDDEN>
Subject: Re: website translation English (US)?

Since the only reason I have for wanting to keep English (US) is a
minor, technical one, you are of course right, simon.  Better now
than later.

On Tue, Jul 28, 2020 at 12:40:43AM +0200, zimoun wrote:
> Well, I have never checked but I do not know if the manual fully
> respects US English.

I think it only contains U.S. English.

> I understand the PO files issue but currently the
> trasnlationproject.org has en_GB and en_ZA registered, only.

AFAIK most variants of English are similar to en_GB, so IIRC some
projects have an en.po for en_GB and an en_US.po for U.S. English.
This makes en.po the default for other Englishes, which is usually
enough.


> From my point of view, it looks weird to have French (FR), French (CA),
> French (BE), etc..  And even it is not exactly the same French, as
> French native, I can read and understand all kind of French (which is
> not the case about listen) even if some sentence or vocabulary could
> sound awkward.  Whatever!

Yes, I concur.

> I have not checked in the code (just pulled now :-)), but is it not
> possible to add a comment in guix-website.pot about the variant and in
> the same time having just “English” as msgid i.e. change to (G_
> "English") in utils.scm.  Or something like that.
> 
> The English variant would be still possible and it would require an
> update by all the translator – which appears to me fine.

In the attached patch I added a comment *maybe* not to change the
(G_ "English").  I do not know how many out-of-date translations will exist,

Regards,
Florian

----- End forwarded message -----

I will push the patch this evening.

Regards,
Florian
--gcpxdtdsnvmvvuwa
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment;
	filename="0001-website-Change-display-name-of-default-locale-from-E.patch"
Content-Transfer-Encoding: 8bit

From 0f070c14220c3328e987986857d9fc7f624c9235 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Tue, 28 Jul 2020 10:51:31 +0200
Subject: [PATCH] website: Change display name of default locale from 'English
 (US)' to 'English'.

We currently have only one English version of the website,
so adding a country code is confusing.

Suggested by zimoun <zimon.toutoune@HIDDEN>.

* website/apps/base/utils.scm (locale-display-name): Change to "English".
Add warning that changing it would break existing translations.
* website/po/guix-website.pot: Update.
* website/po/de.po: Update.
---
 website/apps/base/utils.scm |    7 +-
 website/po/de.po            | 1077 ++++++++++++++++++++++++++---------
 website/po/guix-website.pot |  142 ++---
 3 files changed, 878 insertions(+), 348 deletions(-)

diff --git a/website/apps/base/utils.scm b/website/apps/base/utils.scm
index bb202e4..7b8ecee 100644
--- a/website/apps/base/utils.scm
+++ b/website/apps/base/utils.scm
@@ -70,8 +70,11 @@
   "Return the display name of the current locale."
   ;; TRANSLATORS: The locale’s display name; please include a country
   ;; code like in English (US) *only* if there are multiple
-  ;; Translation Project teams for the same language.
-  (let ((str '(G_ "English (US)")))
+  ;; translations for the same language.
+  (let ((str '(G_ "English")))
+    ;;; XXX: If we ever add a separate English (UK) translation, then
+    ;;; change the display name to English (US), but maybe do not
+    ;;; change str, because it would break translated PO files.
     (gettext (cadr str))))
 
 
diff --git a/website/po/de.po b/website/po/de.po
index 4ec7da9..ac485b2 100644
--- a/website/po/de.po
+++ b/website/po/de.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: guix-website\n"
 "Report-Msgid-Bugs-To: ludo@HIDDEN\n"
-"POT-Creation-Date: 2020-07-15 08:13+0200\n"
-"PO-Revision-Date: 2020-07-15 08:21+0200\n"
+"POT-Creation-Date: 2020-07-28 10:47+0200\n"
+"PO-Revision-Date: 2020-07-28 10:49+0200\n"
 "Last-Translator: Florian Pelz <pelzflorian@HIDDEN>\n"
 "Language-Team: none\n"
 "Language: de\n"
@@ -19,9 +19,9 @@ msgstr ""
 
 #. TRANSLATORS: The locale’s display name; please include a country
 #. code like in English (US) *only* if there are multiple
-#. Translation Project teams for the same language.
+#. translations for the same language.
 #: apps/base/utils.scm:74
-msgid "English (US)"
+msgid "English"
 msgstr "Deutsch"
 
 #: apps/base/templates/home.scm:19
@@ -37,8 +37,10 @@ msgid ""
 "   works, improve it, and share it with the whole world."
 msgstr ""
 "Guix ist eine fortgeschrittene Distribution des GNU-Betriebssystems.\n"
-"   Guix ist eine Technologie, die die Freiheit der Benutzer von Rechengeräten respektiert.\n"
-"   Es steht Ihnen frei, das System zu jedem Zweck auszuführen, seine Funktionsweise zu studieren,\n"
+"   Guix ist eine Technologie, die die Freiheit der Benutzer von "
+"Rechengeräten respektiert.\n"
+"   Es steht Ihnen frei, das System zu jedem Zweck auszuführen, seine "
+"Funktionsweise zu studieren,\n"
 "   es zu verbessern und es mit der ganzen Welt zu teilen."
 
 #. TRANSLATORS: |-separated list of webpage keywords
@@ -61,10 +63,16 @@ msgstr ""
 #: apps/packages/templates/index.scm:27
 #: apps/packages/templates/package-list.scm:30
 #: apps/packages/templates/package.scm:32
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|GNU Guile|Guile Scheme|Transactional upgrades|Functional package management|Reproducibility"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|GNU Guile|Guile Scheme|Transaktionelle Aktualisierungen|Funktionale Paketverwaltung|Reproduzierbarkeit"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|GNU Guile|Guile Scheme|Transactional upgrades|"
+"Functional package management|Reproducibility"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|GNU Guile|Guile Scheme|Transaktionelle Aktualisierungen|"
+"Funktionale Paketverwaltung|Reproduzierbarkeit"
 
-#: apps/base/templates/home.scm:31 apps/base/templates/components.scm:343
+#: apps/base/templates/home.scm:31 apps/base/templates/components.scm:394
 msgctxt "website menu"
 msgid "Overview"
 msgstr "Übersicht"
@@ -74,21 +82,51 @@ msgid "Summary"
 msgstr "Zusammenfassung"
 
 #: apps/base/templates/home.scm:43
-msgid "<1>Liberating.</1> Guix is an advanced distribution of the <2>GNU operating system</2> developed by the <3>GNU Project</3>—which respects the <4>freedom of computer users</4>. "
-msgstr "<1>Befreiend.</1> Guix ist eine fortgeschrittene Distribution des <2>GNU-Betriebssystems</2>, das vom <3>GNU-Projekt</3> entwickelt wurde und die <4>Freiheit der Benutzer von Rechengeräten</4> respektiert. "
+msgid ""
+"<1>Liberating.</1> Guix is an advanced distribution of the <2>GNU operating "
+"system</2> developed by the <3>GNU Project</3>—which respects the <4>freedom "
+"of computer users</4>. "
+msgstr ""
+"<1>Befreiend.</1> Guix ist eine fortgeschrittene Distribution des <2>GNU-"
+"Betriebssystems</2>, das vom <3>GNU-Projekt</3> entwickelt wurde und die "
+"<4>Freiheit der Benutzer von Rechengeräten</4> respektiert. "
 
 #. TRANSLATORS: Package Management, Features and Using the
 #. Configuration System are section names in the English (en)
 #. manual.
 #: apps/base/templates/home.scm:64
-msgid "<1>Dependable.</1> Guix <2>supports<2.1>en</2.1><2.2>Package-Management.html</2.2></2> transactional upgrades and roll-backs, unprivileged package management, <3>and more<3.1>en</3.1><3.2>Features.html</3.2></3>.  When used as a standalone distribution, Guix supports <4>declarative system configuration<4.1>en</4.1><4.2>Using-the-Configuration-System.html</4.2></4> for transparent and reproducible operating systems."
-msgstr "<1>Verlässlich.</1> Guix <2>unterstützt<2.1>de</2.1><2.2>Paketverwaltung.html</2.2></2> transaktionelle Aktualisierungen und Rücksetzungen, „unprivilegierte“ Paketverwaltung für Nutzer ohne besondere Berechtigungen <3>und noch mehr<3.1>de</3.1><3.2>Funktionalitaten.html</3.2></3>. Wenn es als eigenständige Distribution verwendet wird, unterstützt Guix eine <4>deklarative Konfiguration des Systems<4.1>de</4.1><4.2>Das-Konfigurationssystem-nutzen.html</4.2></4> für transparente und reproduzierbare Betriebssysteme."
+msgid ""
+"<1>Dependable.</1> Guix <2>supports<2.1>en</2.1><2.2>Package-Management."
+"html</2.2></2> transactional upgrades and roll-backs, unprivileged package "
+"management, <3>and more<3.1>en</3.1><3.2>Features.html</3.2></3>.  When used "
+"as a standalone distribution, Guix supports <4>declarative system "
+"configuration<4.1>en</4.1><4.2>Using-the-Configuration-System.html</4.2></4> "
+"for transparent and reproducible operating systems."
+msgstr ""
+"<1>Verlässlich.</1> Guix <2>unterstützt<2.1>de</2.1><2.2>Paketverwaltung."
+"html</2.2></2> transaktionelle Aktualisierungen und Rücksetzungen, "
+"„unprivilegierte“ Paketverwaltung für Nutzer ohne besondere Berechtigungen "
+"<3>und noch mehr<3.1>de</3.1><3.2>Funktionalitaten.html</3.2></3>. Wenn es "
+"als eigenständige Distribution verwendet wird, unterstützt Guix eine "
+"<4>deklarative Konfiguration des Systems<4.1>de</4.1><4.2>Das-"
+"Konfigurationssystem-nutzen.html</4.2></4> für transparente und "
+"reproduzierbare Betriebssysteme."
 
 #. TRANSLATORS: Defining Packages and System Configuration are
 #. section names in the English (en) manual.
 #: apps/base/templates/home.scm:84
-msgid "<1>Hackable.</1> It provides <2>Guile Scheme</2> APIs, including high-level embedded domain-specific languages (EDSLs) to <3>define packages<3.1>en</3.1><3.2>Defining-Packages.html</3.2></3> and <4>whole-system configurations<4.1>en</4.1><4.2>System-Configuration.html</4.2></4>."
-msgstr "<1>Hackbar.</1> Programmierschnittstellen (APIs) in <2>Guile Scheme</2> werden zur Verfügung gestellt, einschließlich hochsprachlicher eingebetteter domänenspezifischer Sprachen (Embedded Domain-Specific Languages, EDSLs), mit denen Sie <3>Pakete definieren<3.1>de</3.1><3.2>Pakete-definieren.html</3.2></3> und <4>Konfigurationen des gesamten Systems<4.1>de</4.1><4.2>Systemkonfiguration.html</4.2></4> festlegen können."
+msgid ""
+"<1>Hackable.</1> It provides <2>Guile Scheme</2> APIs, including high-level "
+"embedded domain-specific languages (EDSLs) to <3>define "
+"packages<3.1>en</3.1><3.2>Defining-Packages.html</3.2></3> and <4>whole-"
+"system configurations<4.1>en</4.1><4.2>System-Configuration.html</4.2></4>."
+msgstr ""
+"<1>Hackbar.</1> Programmierschnittstellen (APIs) in <2>Guile Scheme</2> "
+"werden zur Verfügung gestellt, einschließlich hochsprachlicher eingebetteter "
+"domänenspezifischer Sprachen (Embedded Domain-Specific Languages, EDSLs), "
+"mit denen Sie <3>Pakete definieren<3.1>de</3.1><3.2>Pakete-definieren."
+"html</3.2></3> und <4>Konfigurationen des gesamten "
+"Systems<4.1>de</4.1><4.2>Systemkonfiguration.html</4.2></4> festlegen können."
 
 #: apps/base/templates/home.scm:106
 msgctxt "button"
@@ -105,8 +143,15 @@ msgid "Discover Guix"
 msgstr "Entdecken Sie Guix"
 
 #: apps/base/templates/home.scm:120
-msgid "Guix comes with thousands of packages which include applications, system tools, documentation, fonts, and other digital goods readily available for installing with the <1>GNU Guix</1> package manager."
-msgstr "Mit Guix kommen Tausende von Paketen. Dazu gehören Anwendungen, Systemwerkzeuge, Dokumentation, Schriftarten sowie andere digitale Güter, die jederzeit zur Installation mit dem Paketverwaltungswerkzeug <1>GNU Guix</1> bereitstehen."
+msgid ""
+"Guix comes with thousands of packages which include applications, system "
+"tools, documentation, fonts, and other digital goods readily available for "
+"installing with the <1>GNU Guix</1> package manager."
+msgstr ""
+"Mit Guix kommen Tausende von Paketen. Dazu gehören Anwendungen, "
+"Systemwerkzeuge, Dokumentation, Schriftarten sowie andere digitale Güter, "
+"die jederzeit zur Installation mit dem Paketverwaltungswerkzeug <1>GNU "
+"Guix</1> bereitstehen."
 
 #: apps/base/templates/home.scm:132
 msgid "Instructional videos"
@@ -159,16 +204,34 @@ msgid "GNU Guix in other GNU/Linux distros"
 msgstr "GNU Guix auf anderen GNU/Linux-Distributionen"
 
 #: apps/base/templates/home.scm:204
-msgid "Video: <1>Demo of Guix in another GNU/Linux distribution<1.1/>https://audio-video.gnu.org/video/misc/2016-07__GNU_Guix_Demo_2.webm</1> (1 minute, 30 seconds)."
-msgstr "Video: <1>Vorführung von Guix auf einer anderen GNU/Linux-Distribution<1.1/>https://audio-video.gnu.org/video/misc/2016-07__GNU_Guix_Demo_2.webm</1> (1 Minute, 30 Sekunden)."
+msgid ""
+"Video: <1>Demo of Guix in another GNU/Linux distribution<1.1/>https://audio-"
+"video.gnu.org/video/misc/2016-07__GNU_Guix_Demo_2.webm</1> (1 minute, 30 "
+"seconds)."
+msgstr ""
+"Video: <1>Vorführung von Guix auf einer anderen GNU/Linux-Distribution<1.1/"
+">https://audio-video.gnu.org/video/misc/2016-07__GNU_Guix_Demo_2.webm</1> (1 "
+"Minute, 30 Sekunden)."
 
 #: apps/base/templates/home.scm:215
-msgid "If you don't use GNU Guix as a standalone GNU/Linux distribution, you still can use it as a package manager on top of any GNU/Linux distribution. This way, you can benefit from all its conveniences."
-msgstr "Wenn Sie GNU Guix nicht als eine eigenständige GNU/Linux-Distribution verwenden, können Sie es trotzdem zur Paketverwaltung benutzen, aufgesetzt auf eine beliebige bestehende GNU/Linux-Distribution. Auf diese Weise können Sie all seine Vorteile genießen."
+msgid ""
+"If you don't use GNU Guix as a standalone GNU/Linux distribution, you still "
+"can use it as a package manager on top of any GNU/Linux distribution. This "
+"way, you can benefit from all its conveniences."
+msgstr ""
+"Wenn Sie GNU Guix nicht als eine eigenständige GNU/Linux-Distribution "
+"verwenden, können Sie es trotzdem zur Paketverwaltung benutzen, aufgesetzt "
+"auf eine beliebige bestehende GNU/Linux-Distribution. Auf diese Weise können "
+"Sie all seine Vorteile genießen."
 
 #: apps/base/templates/home.scm:220
-msgid "Guix won't interfere with the package manager that comes with your distribution. They can live together."
-msgstr "Guix und das Paketverwaltungswerkzeug, das mit Ihrer Distribution ausgeliefert wird, werden sich gegenseitig nicht stören. Sie können friedlich koexistieren."
+msgid ""
+"Guix won't interfere with the package manager that comes with your "
+"distribution. They can live together."
+msgstr ""
+"Guix und das Paketverwaltungswerkzeug, das mit Ihrer Distribution "
+"ausgeliefert wird, werden sich gegenseitig nicht stören. Sie können "
+"friedlich koexistieren."
 
 #: apps/base/templates/home.scm:227
 msgctxt "button"
@@ -193,10 +256,11 @@ msgctxt "button"
 msgid "ALL CONTACT MEDIA"
 msgstr "ALLE KONTAKTMÖGLICHKEITEN"
 
-#: apps/base/templates/theme.scm:17 apps/base/templates/components.scm:367
-#: apps/base/templates/about.scm:27 apps/base/templates/about.scm:30
-#: apps/base/templates/contact.scm:26 apps/base/templates/contribute.scm:26
-#: apps/base/templates/graphics.scm:24 apps/base/templates/security.scm:28
+#: apps/base/templates/theme.scm:17 apps/base/templates/components.scm:418
+#: apps/base/templates/components.scm:421 apps/base/templates/about.scm:27
+#: apps/base/templates/about.scm:30 apps/base/templates/contact.scm:26
+#: apps/base/templates/contribute.scm:26 apps/base/templates/graphics.scm:24
+#: apps/base/templates/security.scm:28
 msgctxt "website menu"
 msgid "About"
 msgstr "Über Guix"
@@ -212,31 +276,35 @@ msgid "GNU Guix — Activity Feed"
 msgstr "GNU Guix — Aktivitäten-Feed"
 
 #: apps/base/templates/theme.scm:115
-msgid "Made with <1>♥</1> by humans and powered by <2>GNU Guile</2>.  <3>Source code</3> under the <4>GNU AGPL</4>."
-msgstr "Mit <1>♥</1> von Menschen gemacht und durch <2>GNU Guile</2> ermöglicht. <3>Quellcode</3> unter der <4>GNU AGPL</4>."
+msgid ""
+"Made with <1>♥</1> by humans and powered by <2>GNU Guile</2>.  <3>Source "
+"code</3> under the <4>GNU AGPL</4>."
+msgstr ""
+"Mit <1>♥</1> von Menschen gemacht und durch <2>GNU Guile</2> ermöglicht. "
+"<3>Quellcode</3> unter der <4>GNU AGPL</4>."
 
-#: apps/base/templates/components.scm:47
+#: apps/base/templates/components.scm:49
 msgid "Your location:"
 msgstr "Sie befinden sich hier:"
 
-#: apps/base/templates/components.scm:49
+#: apps/base/templates/components.scm:51
 msgid "Home"
 msgstr "Hauptseite"
 
-#: apps/base/templates/components.scm:153
+#: apps/base/templates/components.scm:155
 msgid "archive"
 msgstr "Archiv"
 
-#: apps/base/templates/components.scm:337
+#: apps/base/templates/components.scm:384
 msgctxt "website menu"
 msgid "Guix"
 msgstr "Guix"
 
-#: apps/base/templates/components.scm:341
+#: apps/base/templates/components.scm:388
 msgid "website menu:"
 msgstr "Menü des Webauftritts:"
 
-#: apps/base/templates/components.scm:345
+#: apps/base/templates/components.scm:396
 #: apps/download/templates/download.scm:43
 #: apps/download/templates/download.scm:47
 #: apps/download/templates/download-latest.scm:125
@@ -245,18 +313,18 @@ msgctxt "website menu"
 msgid "Download"
 msgstr "Herunterladen"
 
-#: apps/base/templates/components.scm:351
+#: apps/base/templates/components.scm:402
 msgctxt "website menu"
 msgid "Stable"
 msgstr "Stabil"
 
-#: apps/base/templates/components.scm:354
+#: apps/base/templates/components.scm:405
 #: apps/download/templates/download-latest.scm:130
 msgctxt "website menu"
 msgid "Latest"
 msgstr "Am neuesten"
 
-#: apps/base/templates/components.scm:355
+#: apps/base/templates/components.scm:406
 #: apps/packages/templates/detailed-index.scm:31
 #: apps/packages/templates/detailed-index.scm:38
 #: apps/packages/templates/detailed-package-list.scm:34
@@ -270,7 +338,7 @@ msgctxt "website menu"
 msgid "Packages"
 msgstr "Pakete"
 
-#: apps/base/templates/components.scm:356 apps/blog/templates/post-list.scm:33
+#: apps/base/templates/components.scm:407 apps/blog/templates/post-list.scm:33
 #: apps/blog/templates/post-list.scm:39 apps/blog/templates/post.scm:29
 #: apps/blog/templates/post.scm:35 apps/blog/templates/tag.scm:37
 #: apps/blog/templates/tag.scm:43
@@ -278,7 +346,7 @@ msgctxt "website menu"
 msgid "Blog"
 msgstr "Blog"
 
-#: apps/base/templates/components.scm:358
+#: apps/base/templates/components.scm:409
 #: apps/media/templates/screenshot.scm:28
 #: apps/media/templates/screenshots-overview.scm:25
 #: apps/media/templates/video.scm:29 apps/media/templates/video-list.scm:29
@@ -286,54 +354,54 @@ msgctxt "website menu"
 msgid "Media"
 msgstr "Medien"
 
-#: apps/base/templates/components.scm:361 apps/media/templates/video.scm:33
+#: apps/base/templates/components.scm:412 apps/media/templates/video.scm:33
 #: apps/media/templates/video-list.scm:33
 msgctxt "website menu"
 msgid "Videos"
 msgstr "Videos"
 
-#: apps/base/templates/components.scm:362
+#: apps/base/templates/components.scm:413
 msgctxt "website menu"
 msgid "Screenshots"
 msgstr "Screenshots"
 
-#: apps/base/templates/components.scm:364 apps/base/templates/help.scm:26
+#: apps/base/templates/components.scm:415 apps/base/templates/help.scm:26
 #: apps/base/templates/help.scm:30
 msgctxt "website menu"
 msgid "Help"
 msgstr "Hilfe"
 
-#: apps/base/templates/components.scm:365 apps/base/templates/donate.scm:26
+#: apps/base/templates/components.scm:416 apps/base/templates/donate.scm:26
 #: apps/base/templates/donate.scm:29
 msgctxt "website menu"
 msgid "Donate"
 msgstr "Spenden"
 
-#: apps/base/templates/components.scm:370 apps/base/templates/contact.scm:31
+#: apps/base/templates/components.scm:423 apps/base/templates/contact.scm:31
 msgctxt "website menu"
 msgid "Contact"
 msgstr "Kontakt"
 
-#: apps/base/templates/components.scm:371 apps/base/templates/contribute.scm:30
+#: apps/base/templates/components.scm:424 apps/base/templates/contribute.scm:30
 msgctxt "website menu"
 msgid "Contribute"
 msgstr "Mitmachen"
 
-#: apps/base/templates/components.scm:372 apps/base/templates/security.scm:31
+#: apps/base/templates/components.scm:425 apps/base/templates/security.scm:31
 msgctxt "website menu"
 msgid "Security"
 msgstr "Sicherheit"
 
-#: apps/base/templates/components.scm:373 apps/base/templates/graphics.scm:27
+#: apps/base/templates/components.scm:426 apps/base/templates/graphics.scm:27
 msgctxt "website menu"
 msgid "Graphics"
 msgstr "Grafiken"
 
-#: apps/base/templates/components.scm:391
+#: apps/base/templates/components.scm:463
 msgid " (Page <1/> of <2/>)"
 msgstr " (Seite <1/> von <2/>)"
 
-#: apps/base/templates/components.scm:415
+#: apps/base/templates/components.scm:487
 msgid "Page <1/> of <2/>. Go to another page: "
 msgstr "Seite <1/> von <2/>. Besuchen Sie eine andere Seite: "
 
@@ -350,14 +418,20 @@ msgid ""
 "    works, improve it, and share it with the whole world."
 msgstr ""
 "Guix ist eine fortgeschrittene Distribution des GNU-Betriebssystems.\n"
-"    Guix ist eine Technologie, die die Freiheit der Benutzer von Rechengeräten respektiert.\n"
-"    Es steht Ihnen frei, das System zu jedem Zweck auszuführen, seine Funktionsweise zu studieren,\n"
+"    Guix ist eine Technologie, die die Freiheit der Benutzer von "
+"Rechengeräten respektiert.\n"
+"    Es steht Ihnen frei, das System zu jedem Zweck auszuführen, seine "
+"Funktionsweise zu studieren,\n"
 "    es zu verbessern und es mit der ganzen Welt zu teilen."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/about.scm:25
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung"
 
 #: apps/base/templates/about.scm:35
 msgid "About the Project"
@@ -365,24 +439,53 @@ msgstr "Über das Projekt"
 
 #: apps/base/templates/about.scm:37
 msgid ""
-"The <1>GNU Guix</1> package and system manager is a <2>free software</2> project developed by volunteers around the world under the\n"
+"The <1>GNU Guix</1> package and system manager is a <2>free software</2> "
+"project developed by volunteers around the world under the\n"
 "            umbrella of the <3>GNU Project</3>. "
-msgstr "<1>GNU Guix</1>, ein Programm zur Verwaltung von Paketen und Systemen, ist ein <2>Freie-Software-Projekt</2>, das von Freiwilligen aus der ganzen Welt im Rahmen des <3>GNU-Projekts</3> entwickelt wird. "
+msgstr ""
+"<1>GNU Guix</1>, ein Programm zur Verwaltung von Paketen und Systemen, ist "
+"ein <2>Freie-Software-Projekt</2>, das von Freiwilligen aus der ganzen Welt "
+"im Rahmen des <3>GNU-Projekts</3> entwickelt wird. "
 
 #: apps/base/templates/about.scm:46
 msgid ""
-"Guix System is an advanced distribution of the <1>GNU operating system</1>.  It uses the <2>Linux-libre</2> kernel, and support for <3>the Hurd</3> is being worked on.  As a GNU distribution, it is committed\n"
-"            to respecting and enhancing <4>the freedom of its users</4>.  As such, it adheres to the <5>GNU Free System Distribution Guidelines</5>."
-msgstr "„Guix System“ ist eine fortgeschrittene Distribution des <1>GNU-Betriebssystems</1>. Es verwendet <2>Linux-libre</2> als seinen Kernel; an Unterstützung für <3>GNU Hurd</3> wird gearbeitet. Als GNU-Distribution gehört es zu seiner Zielsetzung, <4>die Freiheit seiner Nutzer</4> zu respektieren und zu vermehren. Daher folgt es den <5>Richtlinien für Freie Systemdistributionen</5>."
+"Guix System is an advanced distribution of the <1>GNU operating system</1>.  "
+"It uses the <2>Linux-libre</2> kernel, and support for <3>the Hurd</3> is "
+"being worked on.  As a GNU distribution, it is committed\n"
+"            to respecting and enhancing <4>the freedom of its users</4>.  As "
+"such, it adheres to the <5>GNU Free System Distribution Guidelines</5>."
+msgstr ""
+"„Guix System“ ist eine fortgeschrittene Distribution des <1>GNU-"
+"Betriebssystems</1>. Es verwendet <2>Linux-libre</2> als seinen Kernel; an "
+"Unterstützung für <3>GNU Hurd</3> wird gearbeitet. Als GNU-Distribution "
+"gehört es zu seiner Zielsetzung, <4>die Freiheit seiner Nutzer</4> zu "
+"respektieren und zu vermehren. Daher folgt es den <5>Richtlinien für Freie "
+"Systemdistributionen</5>."
 
 #. TRANSLATORS: Features and Defining Packages are section names
 #. in the English (en) manual.
 #: apps/base/templates/about.scm:64
 msgid ""
-"GNU Guix provides <1>state-of-the-art package management features<1.1>en</1.1><1.2>Features.html</1.2></1> such as transactional upgrades and roll-backs, reproducible\n"
+"GNU Guix provides <1>state-of-the-art package management "
+"features<1.1>en</1.1><1.2>Features.html</1.2></1> such as transactional "
+"upgrades and roll-backs, reproducible\n"
 "            build environments, unprivileged package management, and\n"
-"            per-user profiles.  It uses low-level mechanisms from the <2>Nix</2> package manager, but packages are <3>defined<3.1>en</3.1><3.2>Defining-Packages.html</3.2></3> as native <4>Guile</4> modules, using extensions to the <5>Scheme</5> language—which makes it nicely hackable."
-msgstr "GNU Guix bietet <1>Paketverwaltungsfunktionalitäten auf dem Stand der Technik<1.1>de</1.1><1.2>Funktionalitaten.html</1.2></1>, wie etwa transaktionelle Aktualisierungen und Rücksetzungen, reproduzierbare Erstellungsumgebungen, eine „unprivilegierte“ Paketverwaltung für Nutzer ohne besondere Berechtigungen sowie ein eigenes Paketprofil für jeden Nutzer. Dazu verwendet es dieselben Mechanismen, die dem Paketverwaltungsprogramm <2>Nix</2> zu Grunde liegen, jedoch werden Pakete als reine <4>Guile</4>-Module <3>definiert<3.1>de</3.1><3.2>Pakete-definieren.html</3.2></3>. Dazu erweitert Guix die <5>Scheme</5>-Programmiersprache, wodurch es leicht ist, selbst an diesen zu hacken."
+"            per-user profiles.  It uses low-level mechanisms from the "
+"<2>Nix</2> package manager, but packages are "
+"<3>defined<3.1>en</3.1><3.2>Defining-Packages.html</3.2></3> as native "
+"<4>Guile</4> modules, using extensions to the <5>Scheme</5> language—which "
+"makes it nicely hackable."
+msgstr ""
+"GNU Guix bietet <1>Paketverwaltungsfunktionalitäten auf dem Stand der "
+"Technik<1.1>de</1.1><1.2>Funktionalitaten.html</1.2></1>, wie etwa "
+"transaktionelle Aktualisierungen und Rücksetzungen, reproduzierbare "
+"Erstellungsumgebungen, eine „unprivilegierte“ Paketverwaltung für Nutzer "
+"ohne besondere Berechtigungen sowie ein eigenes Paketprofil für jeden "
+"Nutzer. Dazu verwendet es dieselben Mechanismen, die dem "
+"Paketverwaltungsprogramm <2>Nix</2> zu Grunde liegen, jedoch werden Pakete "
+"als reine <4>Guile</4>-Module <3>definiert<3.1>de</3.1><3.2>Pakete-"
+"definieren.html</3.2></3>. Dazu erweitert Guix die <5>Scheme</5>-"
+"Programmiersprache, wodurch es leicht ist, selbst an diesen zu hacken."
 
 #. TRANSLATORS: Using the Configuration System, Initial RAM Disk
 #. and Defining Services are section names in the English (en)
@@ -390,8 +493,21 @@ msgstr "GNU Guix bietet <1>Paketverwaltungsfunktionalitäten auf dem Stand der T
 #: apps/base/templates/about.scm:85
 msgid ""
 "Guix takes that a step further by additionally supporting stateless,\n"
-"           reproducible <1>operating system configurations<1.1>en</1.1><1.2>Using-the-Configuration-System.html</1.2></1>. This time the whole system is hackable in Scheme, from the <2>initial RAM disk<2.1>en</2.1><2.2>Initial-RAM-Disk.html</2.2></2> to the <3>initialization system</3>, and to the <4>system services<4.1>en</4.1><4.2>Defining-Services.html</4.2></4>."
-msgstr "Guix geht dabei noch einen Schritt weiter, indem es zusätzlich noch zustandslose, reproduzierbare <1>Betriebssystemkonfigurationen<1.1>de</1.1><1.2>Das-Konfigurationssystem-nutzen.html</1.2></1> unterstützt. In diesem Fall kann am ganzen System in Scheme gehackt werden, von der <2>initialen RAM-Disk<2.1>de</2.1><2.2>Initiale-RAM_002dDisk.html</2.2></2> bis hin zum <3>Initialisierungssystem</3> und den <4>Systemdiensten<4.1>de</4.1><4.2>Dienste-definieren.html</4.2></4>."
+"           reproducible <1>operating system "
+"configurations<1.1>en</1.1><1.2>Using-the-Configuration-System."
+"html</1.2></1>. This time the whole system is hackable in Scheme, from the "
+"<2>initial RAM disk<2.1>en</2.1><2.2>Initial-RAM-Disk.html</2.2></2> to the "
+"<3>initialization system</3>, and to the <4>system "
+"services<4.1>en</4.1><4.2>Defining-Services.html</4.2></4>."
+msgstr ""
+"Guix geht dabei noch einen Schritt weiter, indem es zusätzlich noch "
+"zustandslose, reproduzierbare "
+"<1>Betriebssystemkonfigurationen<1.1>de</1.1><1.2>Das-Konfigurationssystem-"
+"nutzen.html</1.2></1> unterstützt. In diesem Fall kann am ganzen System in "
+"Scheme gehackt werden, von der <2>initialen RAM-"
+"Disk<2.1>de</2.1><2.2>Initiale-RAM_002dDisk.html</2.2></2> bis hin zum "
+"<3>Initialisierungssystem</3> und den "
+"<4>Systemdiensten<4.1>de</4.1><4.2>Dienste-definieren.html</4.2></4>."
 
 #: apps/base/templates/about.scm:106
 msgid "Maintainers"
@@ -400,8 +516,14 @@ msgstr "Betreuer"
 #: apps/base/templates/about.scm:108
 msgid ""
 "Guix is currently maintained by Ludovic Courtès, Marius Bakke, Maxim\n"
-"Cournoyer, Tobias Geerinckx-Rice and Mathieu Othacehe.  Please use the <1>mailing lists</1> for contact.  For sensitive issues, you can reach them using the <2/> private alias."
-msgstr "Die Betreuer („Maintainer“) von Guix sind zur Zeit Ludovic Courtès, Marius Bakke, Maxim Cournoyer, Tobias Geerinckx-Rice und Mathieu Othacehe. Benutzen Sie bitte die <1>Mailing-Listen</1>, um Kontakt aufzunehmen. Für sensible Themen können Sie sie über die private Aliasadresse <2/> erreichen."
+"Cournoyer, Tobias Geerinckx-Rice and Mathieu Othacehe.  Please use the "
+"<1>mailing lists</1> for contact.  For sensitive issues, you can reach them "
+"using the <2/> private alias."
+msgstr ""
+"Die Betreuer („Maintainer“) von Guix sind zur Zeit Ludovic Courtès, Marius "
+"Bakke, Maxim Cournoyer, Tobias Geerinckx-Rice und Mathieu Othacehe. Benutzen "
+"Sie bitte die <1>Mailing-Listen</1>, um Kontakt aufzunehmen. Für sensible "
+"Themen können Sie sie über die private Aliasadresse <2/> erreichen."
 
 #: apps/base/templates/about.scm:117
 msgid "Licensing"
@@ -410,10 +532,15 @@ msgstr "Lizenzierung"
 #: apps/base/templates/about.scm:119
 msgid ""
 "Guix is free software; you can redistribute it and/or modify\n"
-"          it under the terms of the <1>GNU General Public License</1> as published by the Free Software Foundation; either\n"
+"          it under the terms of the <1>GNU General Public License</1> as "
+"published by the Free Software Foundation; either\n"
 "          version 3 of the License, or (at your option) any later\n"
 "          version. "
-msgstr "Guix ist freie Software. Sie können es weitergeben und/oder verändern, solange Sie sich an die Regeln der <1>GNU General Public License</1> halten, so wie sie von der Free Software Foundation festgelegt wurden; entweder in Version 3 der Lizenz oder (nach Ihrem Ermessen) in jeder neueren Version."
+msgstr ""
+"Guix ist freie Software. Sie können es weitergeben und/oder verändern, "
+"solange Sie sich an die Regeln der <1>GNU General Public License</1> halten, "
+"so wie sie von der Free Software Foundation festgelegt wurden; entweder in "
+"Version 3 der Lizenz oder (nach Ihrem Ermessen) in jeder neueren Version."
 
 #: apps/base/data.scm:24
 msgid "IRC Channel"
@@ -424,7 +551,9 @@ msgid ""
 "Join the <1/> channel on the Freenode IRC network to chat\n"
 "       with the community about GNU Guix or to get help in\n"
 "       real-time."
-msgstr "Treten Sie dem <1/>-Kanal auf dem Freenode-IRC-Netzwerk bei, um mit der Gemeinde über GNU Guix zu reden oder im Gespräch Hilfe zu bekommen."
+msgstr ""
+"Treten Sie dem <1/>-Kanal auf dem Freenode-IRC-Netzwerk bei, um mit der "
+"Gemeinde über GNU Guix zu reden oder im Gespräch Hilfe zu bekommen."
 
 #: apps/base/data.scm:35
 msgid "Info Mailing List"
@@ -435,7 +564,10 @@ msgid ""
 "Subscribe to the <1/> low-traffic mailing\n"
 "list to receive important announcements sent by the project maintainers (in\n"
 "English)."
-msgstr "Tragen Sie sich auf der Mailing-Liste <1/> ein, um wichtige Ankündigungen durch die Projektbetreuer zu empfangen (auf Englisch). Diese Liste hat ein geringes E-Mail-Aufkommen."
+msgstr ""
+"Tragen Sie sich auf der Mailing-Liste <1/> ein, um wichtige Ankündigungen "
+"durch die Projektbetreuer zu empfangen (auf Englisch). Diese Liste hat ein "
+"geringes E-Mail-Aufkommen."
 
 #: apps/base/data.scm:46
 msgid "Help Mailing List"
@@ -448,96 +580,131 @@ msgid ""
 "Subscribe to the Help mailing list to get support\n"
 "from the GNU Guix community via email.  You can post messages in English\n"
 "though we also accept other languages."
-msgstr "Melden Sie sich bei der „Help“-Mailingliste an, um per E-Mail gemeinschaftlichen Rat zu GNU Guix zu bekommen. Sie können Nachrichten auch auf Deutsch verfassen."
+msgstr ""
+"Melden Sie sich bei der „Help“-Mailingliste an, um per E-Mail "
+"gemeinschaftlichen Rat zu GNU Guix zu bekommen. Sie können Nachrichten auch "
+"auf Deutsch verfassen."
 
 #: apps/base/data.scm:55
 msgctxt "unique lingua code like en or zh-cn"
 msgid "en"
 msgstr "de"
 
-#: apps/base/data.scm:126
+#: apps/base/data.scm:122
 msgid "Bug Reporting"
 msgstr "Fehler melden"
 
-#: apps/base/data.scm:128
+#: apps/base/data.scm:124
 msgid ""
 "If you found a bug in Guix, check whether the bug is\n"
-"       already in the <1>bug database</1>. If it is not, please <2>report it.</2>"
-msgstr "Wenn Sie einen Fehler in Guix gefunden haben, schauen Sie bitte, ob er bereits in der <1>Fehlerdatenbank</1> steht. Wenn nicht, sind wir dankbar, wenn Sie <2>ihn melden</2>."
+"       already in the <1>bug database</1>. If it is not, please <2>report it."
+"</2>"
+msgstr ""
+"Wenn Sie einen Fehler in Guix gefunden haben, schauen Sie bitte, ob er "
+"bereits in der <1>Fehlerdatenbank</1> steht. Wenn nicht, sind wir dankbar, "
+"wenn Sie <2>ihn melden</2>."
 
-#: apps/base/data.scm:140
+#: apps/base/data.scm:136
 msgid "Development Mailing List"
 msgstr "Entwicklungs-Mailing-Liste"
 
-#: apps/base/data.scm:142
-msgid "Discussion about the development of GNU Guix. <1> Until July 2013</1>, the bug-Guix mailing list filled that role. "
-msgstr "Hier finden Diskussionen über die Entwicklung von GNU Guix statt. <1>Bis zum Juli 2013</1> hat die Mailing-Liste bug-Guix diese Rolle übernommen. "
+#: apps/base/data.scm:138
+msgid ""
+"Discussion about the development of GNU Guix. <1> Until July 2013</1>, the "
+"bug-Guix mailing list filled that role. "
+msgstr ""
+"Hier finden Diskussionen über die Entwicklung von GNU Guix statt. <1>Bis zum "
+"Juli 2013</1> hat die Mailing-Liste bug-Guix diese Rolle übernommen. "
 
-#: apps/base/data.scm:152
+#: apps/base/data.scm:148
 msgid "Patches Mailing List"
 msgstr "Patches-Mailing-Liste"
 
-#: apps/base/data.scm:154
+#: apps/base/data.scm:150
 msgid ""
 "Submission of patches.  Every message sent to this mailing list\n"
-"       leads to a new entry in our <1>patch tracking tool</1>.  See <2>this page</2> for more information on how to use it; see <3>the manual<3.1>en</3.1><3.2>Submitting-Patches.html</3.2></3> for more information on how to submit a patch.  <4>Until February 2017</4>, the guix-devel mailing list filled that role."
-msgstr "Hier werden Patches eingereicht. Jede E-Mail, die an diese Liste geschickt wird, hat die Erzeugung eines neuen Eintrags in unserem <1>Werkzeug zur Erfassung von Patches</1> zur Folge. Auf <2>dieser Seite</2> finden Sie weitere Informationen darüber, wie Sie mit der Liste umgehen; <3>im Handbuch<3.1>de</3.1><3.2>Einreichen-von-Patches.html</3.2></3> sind Informationen zu finden, wie Sie einen Patch einreichen. <4>Bis zum 4. Februar 2017</4> hatte die Mailing-Liste guix-devel diese Rolle inne."
-
-#: apps/base/data.scm:173
+"       leads to a new entry in our <1>patch tracking tool</1>.  See <2>this "
+"page</2> for more information on how to use it; see <3>the "
+"manual<3.1>en</3.1><3.2>Submitting-Patches.html</3.2></3> for more "
+"information on how to submit a patch.  <4>Until February 2017</4>, the guix-"
+"devel mailing list filled that role."
+msgstr ""
+"Hier werden Patches eingereicht. Jede E-Mail, die an diese Liste geschickt "
+"wird, hat die Erzeugung eines neuen Eintrags in unserem <1>Werkzeug zur "
+"Erfassung von Patches</1> zur Folge. Auf <2>dieser Seite</2> finden Sie "
+"weitere Informationen darüber, wie Sie mit der Liste umgehen; <3>im "
+"Handbuch<3.1>de</3.1><3.2>Einreichen-von-Patches.html</3.2></3> sind "
+"Informationen zu finden, wie Sie einen Patch einreichen. <4>Bis zum 4. "
+"Februar 2017</4> hatte die Mailing-Liste guix-devel diese Rolle inne."
+
+#: apps/base/data.scm:169
 msgid "Science Mailing List"
 msgstr "Science-Mailing-Liste"
 
-#: apps/base/data.scm:175
-msgid "Discussions about using GNU Guix for scientific purposes: reproducible research, high-performance computing (HPC), and more."
-msgstr "Diskussionen über die Nutzung von GNU Guix zu wissenschaftlichen Zwecken: reproduzierbare Forschung, Hochleistungsrechnen (High-Performance Computing, HPC) und mehr."
+#: apps/base/data.scm:171
+msgid ""
+"Discussions about using GNU Guix for scientific purposes: reproducible "
+"research, high-performance computing (HPC), and more."
+msgstr ""
+"Diskussionen über die Nutzung von GNU Guix zu wissenschaftlichen Zwecken: "
+"reproduzierbare Forschung, Hochleistungsrechnen (High-Performance Computing, "
+"HPC) und mehr."
 
-#: apps/base/data.scm:183
+#: apps/base/data.scm:179
 msgid "Commits Mailing List"
 msgstr "Commits-Mailing-Liste"
 
-#: apps/base/data.scm:185
+#: apps/base/data.scm:181
 msgid "Notifications of commits made to the <1>Git repositories</1>."
 msgstr "Benachrichtigt über Commits auf den <1>Git-Repositorys</1>."
 
-#: apps/base/data.scm:194
+#: apps/base/data.scm:190
 msgid "Security Mailing List"
 msgstr "Sicherheits-Mailing-Liste"
 
-#: apps/base/data.scm:196
+#: apps/base/data.scm:192
 msgid ""
-"This is a private mailing list that anyone can post to to <1>report security issues</1> in Guix itself or in the <2>packages</2> it provides.  Posting here allows Guix developers to address\n"
+"This is a private mailing list that anyone can post to to <1>report security "
+"issues</1> in Guix itself or in the <2>packages</2> it provides.  Posting "
+"here allows Guix developers to address\n"
 "       the problem before it is widely publicized."
-msgstr "Dies ist eine private Mailing-Liste, an die jeder schreiben kann, um <1>Sicherheitslücken zu melden</1>, die sich in Guix selbst oder in den zur Verfügung gestellten <2>Paketen</2> befinden. Eine E-Mail an diese Liste gibt den Guix-Entwicklern die Gelegenheit, Lücken zu beseitigen, bevor sie weithin bekannt werden."
+msgstr ""
+"Dies ist eine private Mailing-Liste, an die jeder schreiben kann, um "
+"<1>Sicherheitslücken zu melden</1>, die sich in Guix selbst oder in den zur "
+"Verfügung gestellten <2>Paketen</2> befinden. Eine E-Mail an diese Liste "
+"gibt den Guix-Entwicklern die Gelegenheit, Lücken zu beseitigen, bevor sie "
+"weithin bekannt werden."
 
-#: apps/base/data.scm:208
+#: apps/base/data.scm:204
 msgid "Sysadmin Mailing List"
 msgstr "Sysadmin-Mailing-Liste"
 
-#: apps/base/data.scm:210
+#: apps/base/data.scm:206
 msgid "Private mailing list for the <1>build farm</1> system administration."
-msgstr "Private Mailing-Liste für Systemadministratoren der <1>Erstellungsfarm</1>."
+msgstr ""
+"Private Mailing-Liste für Systemadministratoren der <1>Erstellungsfarm</1>."
 
-#: apps/base/data.scm:222
+#: apps/base/data.scm:218
 msgid "GNU System Discuss Mailing List"
 msgstr "Mailing-Liste für GNU-System-Diskussionen"
 
-#: apps/base/data.scm:224
+#: apps/base/data.scm:220
 msgid "Discussion about the development of the broader GNU system."
 msgstr "Für Diskussionen über die Entwicklung des GNU-Systems allgemein."
 
-#: apps/base/data.scm:229
+#: apps/base/data.scm:225
 msgid "GNU/Linux-libre Mailing List"
 msgstr "GNU/Linux-libre-Mailing-Liste"
 
-#: apps/base/data.scm:231
+#: apps/base/data.scm:227
 msgid "Workgroup for fully free GNU/Linux distributions."
 msgstr "Arbeitsgruppe für völlig freie GNU/Linux-Distributionen."
 
-#: apps/base/data.scm:236
+#: apps/base/data.scm:232
 msgid "GNU Info Mailing List"
 msgstr "GNU-Info-Mailing-Liste"
 
-#: apps/base/data.scm:238
+#: apps/base/data.scm:234
 msgid "GNU software announcements."
 msgstr "Ankündigungen für GNU-Software."
 
@@ -551,12 +718,19 @@ msgid ""
 "A list of resources about how to use GNU Guix, plus\n"
 "   information about getting help from the community of users and\n"
 "   developers."
-msgstr "Eine Liste von Ressourcen, wie man GNU Guix benutzt, sowie Informationen darüber, wie Sie Hilfe von der Nutzer- und Entwicklergemeinde bekommen können."
+msgstr ""
+"Eine Liste von Ressourcen, wie man GNU Guix benutzt, sowie Informationen "
+"darüber, wie Sie Hilfe von der Nutzer- und Entwicklergemeinde bekommen "
+"können."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/help.scm:24
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Help resources"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Hilfe-Ressourcen"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Help resources"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Hilfe-Ressourcen"
 
 #: apps/base/templates/help.scm:35
 msgid "Help"
@@ -569,8 +743,11 @@ msgstr "Handbuch von GNU Guix"
 #: apps/base/templates/help.scm:47
 msgid ""
 "Documentation for GNU Guix is available\n"
-"            online.  You may also find more information about Guix by running <1>info guix</1>."
-msgstr "Sie können Dokumentation für GNU Guix online lesen. Sie können weitere Informationen über Guix auch bekommen, indem Sie <1>info guix</1> ausführen."
+"            online.  You may also find more information about Guix by "
+"running <1>info guix</1>."
+msgstr ""
+"Sie können Dokumentation für GNU Guix online lesen. Sie können weitere "
+"Informationen über Guix auch bekommen, indem Sie <1>info guix</1> ausführen."
 
 #: apps/base/templates/help.scm:53
 msgid "Read Guix manual"
@@ -590,7 +767,10 @@ msgid ""
 "            to help you get started with every day use of GNU Guix as\n"
 "            well as other topics that present advanced features of the\n"
 "            system."
-msgstr "Zur Videosammlung gehören Anleitungen, um Ihnen den Einstieg in die alltägliche Nutzung von GNU Guix zu erleichtern, sowie andere Themen, wo fortgeschrittene Funktionalitäten des Systems vorgestellt werden."
+msgstr ""
+"Zur Videosammlung gehören Anleitungen, um Ihnen den Einstieg in die "
+"alltägliche Nutzung von GNU Guix zu erleichtern, sowie andere Themen, wo "
+"fortgeschrittene Funktionalitäten des Systems vorgestellt werden."
 
 #: apps/base/templates/help.scm:81
 msgid "Browse all videos"
@@ -606,7 +786,10 @@ msgid ""
 "            Guix community which show you how to use the system and its\n"
 "            collection of packages to achieve common and not-so-common\n"
 "            goals users may have."
-msgstr "Tutorials, Anleitungen und Beispiele, die von der Guix-Gemeinde beigesteuert wurden. Sie erklären, wie Sie mit dem System und seiner Paketsammlung bewerkstelligen, was einem häufig und weniger häufig an Vorhaben begegnet."
+msgstr ""
+"Tutorials, Anleitungen und Beispiele, die von der Guix-Gemeinde beigesteuert "
+"wurden. Sie erklären, wie Sie mit dem System und seiner Paketsammlung "
+"bewerkstelligen, was einem häufig und weniger häufig an Vorhaben begegnet."
 
 #: apps/base/templates/help.scm:98
 msgid "Browse the recipes"
@@ -618,9 +801,12 @@ msgstr "GNU-Handbücher"
 
 #: apps/base/templates/help.scm:107
 msgid ""
-"Guix is a distribution of the <1>GNU operating system</1>.  Documentation for GNU packages is\n"
+"Guix is a distribution of the <1>GNU operating system</1>.  Documentation "
+"for GNU packages is\n"
 "            available online in various formats. "
-msgstr "Guix ist eine Distribution des <1>GNU-Betriebssystems</1>. Dokumentation für GNU-Pakete gibt es online in verschiedenen Formaten."
+msgstr ""
+"Guix ist eine Distribution des <1>GNU-Betriebssystems</1>. Dokumentation für "
+"GNU-Pakete gibt es online in verschiedenen Formaten."
 
 #: apps/base/templates/help.scm:115
 msgid "Browse GNU manuals"
@@ -635,13 +821,19 @@ msgid ""
 "For real-time support from the community, you can connect\n"
 "            to the <1/> channel on irc.freenode.net. There\n"
 "            you can get help about anything related to GNU Guix."
-msgstr "Sie können Hilfe von der Guix-Gemeinde per Chat bekommen, indem Sie sich mit dem <1/>-Kanal auf irc.freenode.net verbinden. Dort bekommen Sie Hilfe zu allem, was mit GNU Guix zu tun hat."
+msgstr ""
+"Sie können Hilfe von der Guix-Gemeinde per Chat bekommen, indem Sie sich mit "
+"dem <1/>-Kanal auf irc.freenode.net verbinden. Dort bekommen Sie Hilfe zu "
+"allem, was mit GNU Guix zu tun hat."
 
 #: apps/base/templates/help.scm:129
 msgid ""
 "The <1/> channel is logged. Previous\n"
-"            conversations can be browsed online. See the <2>channel logs</2>. "
-msgstr "Der <1/>-Kanal wird protokolliert. Vergangene Kommunikation kann online eingesehen werden; siehe die <2>Kanalprotokolle</2>. "
+"            conversations can be browsed online. See the <2>channel "
+"logs</2>. "
+msgstr ""
+"Der <1/>-Kanal wird protokolliert. Vergangene Kommunikation kann online "
+"eingesehen werden; siehe die <2>Kanalprotokolle</2>. "
 
 #: apps/base/templates/help.scm:136
 msgid "Connect"
@@ -656,7 +848,10 @@ msgid ""
 "Email support from the community is also available through\n"
 "            several mailing list. The messages sent to the lists are\n"
 "            public and archived online."
-msgstr "E-Mail-Hilfe aus der Gemeinde bekommen Sie auch auf mehreren Mailing-Listen. Die Nachrichten, die an die Listen geschickt werden, sind öffentlich einsehbar und werden online archiviert."
+msgstr ""
+"E-Mail-Hilfe aus der Gemeinde bekommen Sie auch auf mehreren Mailing-Listen. "
+"Die Nachrichten, die an die Listen geschickt werden, sind öffentlich "
+"einsehbar und werden online archiviert."
 
 #: apps/base/templates/help.scm:153
 msgid "See all lists"
@@ -672,12 +867,19 @@ msgstr "Kontakt"
 msgid ""
 "A list of channels to communicate with GNU Guix users\n"
 "   and developers about anything you want."
-msgstr "Eine Liste der Kanäle, auf denen Sie mit Nutzern und Entwicklern von GNU Guix reden können, worüber Sie möchten."
+msgstr ""
+"Eine Liste der Kanäle, auf denen Sie mit Nutzern und Entwicklern von "
+"GNU Guix reden können, worüber Sie möchten."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/contact.scm:23
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Community|Mailing lists|IRC channels|Bug reports|Help"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Gemeinde|Community|Mailing-Listen|IRC-Kanäle|Probleme melden|Hilfe"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Community|Mailing lists|IRC channels|Bug reports|Help"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Gemeinde|Community|Mailing-Listen|IRC-Kanäle|Probleme "
+"melden|Hilfe"
 
 #: apps/base/templates/contribute.scm:17
 msgctxt "webpage title"
@@ -688,12 +890,19 @@ msgstr "Mitmachen"
 msgid ""
 "Check all the ways you can contribute to make GNU Guix\n"
 "   better, and join the world-wide community of volunteers."
-msgstr "Sehen Sie, wo Sie mitmachen können, um GNU Guix zu verbessern, und treten Sie der weltweiten Gemeinschaft der Freiwilligen bei."
+msgstr ""
+"Sehen Sie, wo Sie mitmachen können, um GNU Guix zu verbessern, und treten "
+"Sie der weltweiten Gemeinschaft der Freiwilligen bei."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/contribute.scm:23
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Volunteer|Development|Translation|I18N|L10N|Artwork"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Mitmachen|Entwicklung|Übersetzung|I18N|L10N|Grafiken|Medien|Design"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Volunteer|Development|Translation|I18N|L10N|Artwork"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Mitmachen|Entwicklung|Übersetzung|I18N|L10N|Grafiken|"
+"Medien|Design"
 
 #: apps/base/templates/contribute.scm:35 apps/base/templates/contribute.scm:110
 #: apps/base/templates/contribute.scm:227
@@ -704,17 +913,32 @@ msgstr "Mitmachen"
 msgid ""
 "GNU Guix is a large project developed\n"
 "           mostly by volunteers from all around the world. You are welcome\n"
-"           to join us in the <1>development mailing list</1> or in the <2>#guix channel</2> in IRC Freenode. Tell us how would you like to help, and we\n"
+"           to join us in the <1>development mailing list</1> or in the "
+"<2>#guix channel</2> in IRC Freenode. Tell us how would you like to help, "
+"and we\n"
 "          will do our best to guide you. "
-msgstr "GNU Guix ist ein großes Projekt, das hauptsächlich von Freiwilligen aus aller Welt entwickelt wird. Sie sind bei uns auf der <1>Mailing-Liste zur Guix-Entwicklung</1> oder auf dem <2>„#guix“-Kanal</2> im IRC von Freenode herzlich willkommen. Sagen Sie uns, wie Sie uns helfen möchten, und wir tun unser Bestes, um Sie dabei zu begleiten."
+msgstr ""
+"GNU Guix ist ein großes Projekt, das hauptsächlich von Freiwilligen aus "
+"aller Welt entwickelt wird. Sie sind bei uns auf der <1>Mailing-Liste zur "
+"Guix-Entwicklung</1> oder auf dem <2>„#guix“-Kanal</2> im IRC von Freenode "
+"herzlich willkommen. Sagen Sie uns, wie Sie uns helfen möchten, und wir tun "
+"unser Bestes, um Sie dabei zu begleiten."
 
 #: apps/base/templates/contribute.scm:51
 msgid ""
 "We want to provide a warm, friendly, and harassment-free environment,\n"
-"           so that anyone can contribute to the best of their abilities.  To\n"
-"           this end our project uses a “Contributor Covenant”, which was adapted\n"
-"           from <1>https://contributor-covenant.org/</1>.  You can find the full pledge in the <2>CODE-OF-CONDUCT</2> file."
-msgstr "Wir möchten eine warme, freundliche Umgebung frei von Belästigungen bieten, damit jeder so gut er kann mithelfen kann. Deshalb folgt dieses Projekt einer Vereinbarung („Contributor Covenant“), die auf <1>https://www.contributor-covenant.org/translations</1> basiert. Sie können unser vollständiges Versprechen in der Datei <2>CODE-OF-CONDUCT</2> nachlesen."
+"           so that anyone can contribute to the best of their abilities.  "
+"To\n"
+"           this end our project uses a “Contributor Covenant”, which was "
+"adapted\n"
+"           from <1>https://contributor-covenant.org/</1>.  You can find the "
+"full pledge in the <2>CODE-OF-CONDUCT</2> file."
+msgstr ""
+"Wir möchten eine warme, freundliche Umgebung frei von Belästigungen bieten, "
+"damit jeder so gut er kann mithelfen kann. Deshalb folgt dieses Projekt "
+"einer Vereinbarung („Contributor Covenant“), die auf <1>https://www."
+"contributor-covenant.org/translations</1> basiert. Sie können unser "
+"vollständiges Versprechen in der Datei <2>CODE-OF-CONDUCT</2> nachlesen."
 
 #: apps/base/templates/contribute.scm:72
 msgid "Project Management"
@@ -722,16 +946,23 @@ msgstr "Projektverwaltung"
 
 #: apps/base/templates/contribute.scm:73
 msgid ""
-"We use <1>Savannah</1> as the central point for development, maintenance and\n"
+"We use <1>Savannah</1> as the central point for development, maintenance "
+"and\n"
 "            distribution of the Guix System Distribution and GNU Guix."
-msgstr "Wir verwenden <1>Savannah</1> als zentralen Sammlungspunkt für die Entwicklung, Wartung und Verteilung der Guix-System-Distribution und von GNU Guix."
+msgstr ""
+"Wir verwenden <1>Savannah</1> als zentralen Sammlungspunkt für die "
+"Entwicklung, Wartung und Verteilung der Guix-System-Distribution und von "
+"GNU Guix."
 
 #: apps/base/templates/contribute.scm:79
 msgid ""
 "The source files for all the components of the project,\n"
 "            including software, web site, documentation, and artwork, are\n"
 "            available in <1>Git repositories</1> at Savannah. "
-msgstr "Die Quelldateien für alle Komponenten des Projekts, einschließlich seiner Software, seines Webauftritts, seiner Dokumentation, seiner Grafiken und Mediendateien, befinden sich in <1>Git-Repositorys</1> bei Savannah. "
+msgstr ""
+"Die Quelldateien für alle Komponenten des Projekts, einschließlich seiner "
+"Software, seines Webauftritts, seiner Dokumentation, seiner Grafiken und "
+"Mediendateien, befinden sich in <1>Git-Repositorys</1> bei Savannah. "
 
 #: apps/base/templates/contribute.scm:89
 msgid "Access Savannah"
@@ -746,13 +977,19 @@ msgid ""
 "We are always looking for artists to help us design and\n"
 "            improve user interfaces, and create multimedia material for\n"
 "            documentation, presentations, and promotional items. "
-msgstr "Wir sind immer auf der Suche nach Künstlern, die uns beim Design und der Verbesserung von Benutzeroberflächen unterstützen und Multimedia-Material für die Dokumentation, für Präsentationen und Werbeartikel erschaffen."
+msgstr ""
+"Wir sind immer auf der Suche nach Künstlern, die uns beim Design und der "
+"Verbesserung von Benutzeroberflächen unterstützen und Multimedia-Material "
+"für die Dokumentation, für Präsentationen und Werbeartikel erschaffen."
 
 #: apps/base/templates/contribute.scm:100
 msgid ""
 "The artwork used in the different components of the project\n"
 "            is available in the <1>guix-artwork</1> repository. "
-msgstr "Die Grafiken und Mediendateien, die in den verschiedenen Komponenten des Projekts zum Einsatz kommen, stehen im <1>guix-artwork</1>-Repository zur Verfügung."
+msgstr ""
+"Die Grafiken und Mediendateien, die in den verschiedenen Komponenten des "
+"Projekts zum Einsatz kommen, stehen im <1>guix-artwork</1>-Repository zur "
+"Verfügung."
 
 #: apps/base/templates/contribute.scm:116
 msgid "Documentation"
@@ -760,15 +997,26 @@ msgstr "Dokumentation"
 
 #: apps/base/templates/contribute.scm:117
 msgid ""
-"You can read the <1>project documentation</1> already available in the system and in the website, and\n"
+"You can read the <1>project documentation</1> already available in the "
+"system and in the website, and\n"
 "            help us identify any errors or omissions. Creating new\n"
 "            manuals, tutorials, and blog entries will also help users and\n"
 "            developers discover what we do. "
-msgstr "Sie können die <1>Projektdokumentation</1>, die es schon im System und auf dem Webauftritt gibt, lesen und uns dabei helfen, Fehler zu finden und Unvollständiges zu ergänzen. Wenn Sie neue Handbücher, Anleitungen und Blog-Einträge schreiben, können Nutzer und Entwickler leichter erkennen, was wir tun."
+msgstr ""
+"Sie können die <1>Projektdokumentation</1>, die es schon im System und auf "
+"dem Webauftritt gibt, lesen und uns dabei helfen, Fehler zu finden und "
+"Unvollständiges zu ergänzen. Wenn Sie neue Handbücher, Anleitungen und Blog-"
+"Einträge schreiben, können Nutzer und Entwickler leichter erkennen, was wir "
+"tun."
 
 #: apps/base/templates/contribute.scm:125
-msgid "Helping improve the documentation of the <1>packaged software</1> is another way to contribute. "
-msgstr "Hilfe bei der Verbesserung der Dokumentation der von uns <1>in Paketen angebotenen Software</1> ist eine weitere Möglichkeit, GNU Guix zu unterstützen."
+msgid ""
+"Helping improve the documentation of the <1>packaged software</1> is another "
+"way to contribute. "
+msgstr ""
+"Hilfe bei der Verbesserung der Dokumentation der von uns <1>in Paketen "
+"angebotenen Software</1> ist eine weitere Möglichkeit, GNU Guix zu "
+"unterstützen."
 
 #: apps/base/templates/contribute.scm:132
 msgid "Start writing"
@@ -786,19 +1034,31 @@ msgid ""
 "            packaged to make it easier for users to install their\n"
 "            favorite tools with the Guix package manager, and be\n"
 "            productive using the system. "
-msgstr "Für Hunderte von Programmen, Dokumentation und Medien müssen noch Pakete geschrieben werden, damit es Benutzer leichter haben, ihre Lieblingswerkzeuge mit dem Guix-Paketverwaltungsprogramm zu installieren und das System produktiv zu nutzen."
+msgstr ""
+"Für Hunderte von Programmen, Dokumentation und Medien müssen noch Pakete "
+"geschrieben werden, damit es Benutzer leichter haben, ihre "
+"Lieblingswerkzeuge mit dem Guix-Paketverwaltungsprogramm zu installieren und "
+"das System produktiv zu nutzen."
 
 #. TRANSLATORS: Packaging Guidelines is a section name in the
 #. English (en) manual.
 #: apps/base/templates/contribute.scm:147
 msgid ""
 "Information on how to add packages to the distribution can\n"
-"            be found <1>in the manual<1.1>en</1.1><1.2>Packaging-Guidelines.html</1.2></1>. "
-msgstr "Informationen, wie Sie Pakete zur Distribution hinzufügen können, finden Sie <1>im Handbuch<1.1>de</1.1><1.2>Paketrichtlinien.html</1.2></1>. "
+"            be found <1>in the manual<1.1>en</1.1><1.2>Packaging-Guidelines."
+"html</1.2></1>. "
+msgstr ""
+"Informationen, wie Sie Pakete zur Distribution hinzufügen können, finden Sie "
+"<1>im Handbuch<1.1>de</1.1><1.2>Paketrichtlinien.html</1.2></1>. "
 
 #: apps/base/templates/contribute.scm:157
-msgid "Check out the <1>package database</1> for a list of available packages, and the <2>patch-tracking database</2> for a list of pending submissions."
-msgstr "Schauen Sie in die <1>Paketdatenbank</1>, wenn Sie eine Liste der verfügbaren Pakete sehen wollen, und in die <2>Datenbank zur Patch-Erfassung</2> für eine Liste unbearbeiteter Einreichungen."
+msgid ""
+"Check out the <1>package database</1> for a list of available packages, and "
+"the <2>patch-tracking database</2> for a list of pending submissions."
+msgstr ""
+"Schauen Sie in die <1>Paketdatenbank</1>, wenn Sie eine Liste der "
+"verfügbaren Pakete sehen wollen, und in die <2>Datenbank zur Patch-"
+"Erfassung</2> für eine Liste unbearbeiteter Einreichungen."
 
 #: apps/base/templates/contribute.scm:168
 msgid "Send a new package"
@@ -810,18 +1070,31 @@ msgstr "Programmierung"
 
 #: apps/base/templates/contribute.scm:175
 msgid ""
-"Source code is in the <1>main Git repository</1>.  We use <2>GNU Guile</2> as the main programming and extension language for the\n"
+"Source code is in the <1>main Git repository</1>.  We use <2>GNU Guile</2> "
+"as the main programming and extension language for the\n"
 "            components of the system. "
-msgstr "Der Quellcode ist im <1>Haupt-Git-Repository</1> zu finden. Wir benutzen die Programmier- und Erweiterungssprache <2>GNU Guile</2> für den Großteil der Programmierung und der Komponenten des Systems."
+msgstr ""
+"Der Quellcode ist im <1>Haupt-Git-Repository</1> zu finden. Wir benutzen die "
+"Programmier- und Erweiterungssprache <2>GNU Guile</2> für den Großteil der "
+"Programmierung und der Komponenten des Systems."
 
 #. TRANSLATORS: Contributing is a section name in the English
 #. (en) manual.
 #: apps/base/templates/contribute.scm:187
 msgid ""
-"You will find it useful to browse the <1>Guile manual</1> or other <2>introductory material about Scheme</2>. Also, make sure to read the <3>Contributing<3.1>en</3.1><3.2>Contributing.html</3.2></3> section of the manual for more details on the development\n"
+"You will find it useful to browse the <1>Guile manual</1> or other "
+"<2>introductory material about Scheme</2>. Also, make sure to read the "
+"<3>Contributing<3.1>en</3.1><3.2>Contributing.html</3.2></3> section of the "
+"manual for more details on the development\n"
 "            setup, as well as the coding and cooperation conventions used\n"
 "            in the project. "
-msgstr "Sie werden es hilfreich finden, das <1>Guile-Handbuch</1> oder andere <2>einführende Texte über Scheme</2> zu lesen. Sie sollten außerdem den Abschnitt <3>Mitwirken<3.1>de</3.1><3.2>Mitwirken.html</3.2></3> im Handbuch lesen, um mehr Details über die Einrichtung Ihrer Entwicklungsumgebung sowie die Konventionen für Programmierung und Zusammenarbeit zu erfahren, die im Projekt gelten."
+msgstr ""
+"Sie werden es hilfreich finden, das <1>Guile-Handbuch</1> oder andere "
+"<2>einführende Texte über Scheme</2> zu lesen. Sie sollten außerdem den "
+"Abschnitt <3>Mitwirken<3.1>de</3.1><3.2>Mitwirken.html</3.2></3> im Handbuch "
+"lesen, um mehr Details über die Einrichtung Ihrer Entwicklungsumgebung sowie "
+"die Konventionen für Programmierung und Zusammenarbeit zu erfahren, die im "
+"Projekt gelten."
 
 #: apps/base/templates/contribute.scm:205
 msgid "Send a patch"
@@ -837,11 +1110,18 @@ msgid ""
 "            contributors to communicate and collaborate in the project,\n"
 "            and users to be able to download and install packages. Help\n"
 "            us keep the system up and running smoothly. "
-msgstr "Dank unserer Systeminfrastruktur ist es allen Beteiligten möglich, im Projekt zu kommunizieren und zusammenzuarbeiten, und Nutzer können Pakete herunterladen und installieren. Helfen Sie uns dabei, dass das System weiter gut läuft."
+msgstr ""
+"Dank unserer Systeminfrastruktur ist es allen Beteiligten möglich, im "
+"Projekt zu kommunizieren und zusammenzuarbeiten, und Nutzer können Pakete "
+"herunterladen und installieren. Helfen Sie uns dabei, dass das System weiter "
+"gut läuft."
 
 #: apps/base/templates/contribute.scm:218
-msgid "You can also <1>donate hardware or hosting</1> for our <2>build farm</2>.  "
-msgstr "Sie können für unsere <2>Erstellungsfarm</2> auch <1>Hardware spenden oder sie bei Ihnen aufstellen („Hosting“)</1>."
+msgid ""
+"You can also <1>donate hardware or hosting</1> for our <2>build farm</2>.  "
+msgstr ""
+"Sie können für unsere <2>Erstellungsfarm</2> auch <1>Hardware spenden oder "
+"sie bei Ihnen aufstellen („Hosting“)</1>."
 
 #: apps/base/templates/contribute.scm:233
 msgid "Test and Bug Reports"
@@ -850,14 +1130,24 @@ msgstr "Testen und Fehlerberichte"
 #: apps/base/templates/contribute.scm:234
 msgid ""
 "Install the software and send feedback to the community\n"
-"            about your experience. Help the project by reporting bugs. You can also get started by <1>picking an “easy” bug</1> to work on."
-msgstr "Installieren Sie die Software und geben Sie der Gemeinde Rückmeldung über Ihre Erfahrungen. Helfen Sie dem Projekt, indem Sie Fehler melden. Ein guter Einstieg ist auch, sich einen <1>„leichten“ Bug zu suchen</1>, an dem Sie arbeiten können."
+"            about your experience. Help the project by reporting bugs. You "
+"can also get started by <1>picking an “easy” bug</1> to work on."
+msgstr ""
+"Installieren Sie die Software und geben Sie der Gemeinde Rückmeldung über "
+"Ihre Erfahrungen. Helfen Sie dem Projekt, indem Sie Fehler melden. Ein guter "
+"Einstieg ist auch, sich einen <1>„leichten“ Bug zu suchen</1>, an dem Sie "
+"arbeiten können."
 
 #: apps/base/templates/contribute.scm:243
 msgid ""
 "Before reporting a bug, please check whether the bug is\n"
-"            already <1>in the bug database</1>. See <2>the developer information page</2> for more information on how to manipulate bug reports. "
-msgstr "Bevor Sie einen Fehler melden, schauen Sie bitte, ob es den Fehler schon in der <1>Fehlerdatenbank</1> gibt. Siehe <2>die Informationsseite für Entwickler</2>, um weitere Informationen zu bekommen, wie Sie Fehlerberichte ergänzen."
+"            already <1>in the bug database</1>. See <2>the developer "
+"information page</2> for more information on how to manipulate bug reports. "
+msgstr ""
+"Bevor Sie einen Fehler melden, schauen Sie bitte, ob es den Fehler schon in "
+"der <1>Fehlerdatenbank</1> gibt. Siehe <2>die Informationsseite für "
+"Entwickler</2>, um weitere Informationen zu bekommen, wie Sie Fehlerberichte "
+"ergänzen."
 
 #: apps/base/templates/contribute.scm:255
 msgid "Report a bug"
@@ -868,14 +1158,24 @@ msgid "Translation"
 msgstr "Übersetzung"
 
 #: apps/base/templates/contribute.scm:262
-msgid "You can help translate the <1>software</1>, the <2>package descriptions</2>, and the <3>manual</3> into your language.  See the <4>Translation Project</4> for information on how you can help."
-msgstr "Sie können dabei helfen, die <1>Software</1>, die <2>Paketbeschreibungen</2> oder das <3>Handbuch</3> auf Ihre Sprache zu übersetzen. Siehe das <4>Translation Project</4> für Informationen, wie Sie helfen können."
+msgid ""
+"You can help translate the <1>software</1>, the <2>package descriptions</2>, "
+"and the <3>manual</3> into your language.  See the <4>Translation "
+"Project</4> for information on how you can help."
+msgstr ""
+"Sie können dabei helfen, die <1>Software</1>, die <2>Paketbeschreibungen</2> "
+"oder das <3>Handbuch</3> auf Ihre Sprache zu übersetzen. Siehe das "
+"<4>Translation Project</4> für Informationen, wie Sie helfen können."
 
 #: apps/base/templates/contribute.scm:281
 msgid ""
-"<1>Software packages</1> provided by the system may have their own translation\n"
+"<1>Software packages</1> provided by the system may have their own "
+"translation\n"
 "            tools.  Visit their websites and help translate. "
-msgstr "Die vom System bereitgestellten <1>Software-Pakete</1> können ihre eigenen Werkzeuge haben, mit denen sie übersetzt werden können. Besuchen Sie deren Webauftritte und helfen Sie dort bei deren Übersetzung."
+msgstr ""
+"Die vom System bereitgestellten <1>Software-Pakete</1> können ihre eigenen "
+"Werkzeuge haben, mit denen sie übersetzt werden können. Besuchen Sie deren "
+"Webauftritte und helfen Sie dort bei deren Übersetzung."
 
 #: apps/base/templates/contribute.scm:288
 msgid "Start translating"
@@ -890,7 +1190,10 @@ msgid ""
 "Documents, supporting material of previous talks, and\n"
 "          auxiliary information useful to hackers and maintainers is\n"
 "          available at <1/>."
-msgstr "Dokumente, unterstützendes Material vergangener Vorträge sowie zusätzliche Informationen, die für Hacker und Betreuer nützlich sein können, sind auf <1/> zu finden."
+msgstr ""
+"Dokumente, unterstützendes Material vergangener Vorträge sowie zusätzliche "
+"Informationen, die für Hacker und Betreuer nützlich sein können, sind auf <1/"
+"> zu finden."
 
 #: apps/base/templates/donate.scm:17
 msgctxt "webpage title"
@@ -902,26 +1205,47 @@ msgid ""
 "We are looking for donations of hardware and optionally\n"
 "   hosting for machines (they should be usable with exclusively\n"
 "   free software)."
-msgstr "Wir suchen gespendete Hardware und optional auch Hosting für Maschinen (sie sollten mit ausschließlich freier Software nutzbar sein)."
+msgstr ""
+"Wir suchen gespendete Hardware und optional auch Hosting für Maschinen (sie "
+"sollten mit ausschließlich freier Software nutzbar sein)."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/donate.scm:24
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Donations"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Spenden"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Donations"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Spenden"
 
 #: apps/base/templates/donate.scm:34
 msgid "Donate"
 msgstr "Spenden"
 
 #: apps/base/templates/donate.scm:36
-msgid "The <1>build farm</1> of Guix runs on donated hardware and hosting. As the distribution grows (see the <2>package list</2>), so do the computing and storage needs."
-msgstr "Die <1>Erstellungsfarm</1> von Guix läuft mit gespendeter Hardware und Hosting. So wie die Distribution wächst (siehe die <2>Liste der Pakete</2>), so wachsen auch die nötigen Rechen- und Speicherkapazitäten."
+msgid ""
+"The <1>build farm</1> of Guix runs on donated hardware and hosting. As the "
+"distribution grows (see the <2>package list</2>), so do the computing and "
+"storage needs."
+msgstr ""
+"Die <1>Erstellungsfarm</1> von Guix läuft mit gespendeter Hardware und "
+"Hosting. So wie die Distribution wächst (siehe die <2>Liste der Pakete</2>), "
+"so wachsen auch die nötigen Rechen- und Speicherkapazitäten."
 
 #: apps/base/templates/donate.scm:47
 msgid ""
-"Back in 2015 we <1>ran a fundraising campaign</1> to strengthen our build farm, with <2>support from the Free Software Foundation (FSF)</2>.  The Guix project can always use financial support to further its mission.  Please consider helping out by making a donation on this\n"
+"Back in 2015 we <1>ran a fundraising campaign</1> to strengthen our build "
+"farm, with <2>support from the Free Software Foundation (FSF)</2>.  The Guix "
+"project can always use financial support to further its mission.  Please "
+"consider helping out by making a donation on this\n"
 "          FSF-hosted page:"
-msgstr "Im Jahre 2015 haben wir <1>eine Spendensammlung veranstaltet</1>, um unsere Erstellungsfarm zu verstärken, mit <2>Unterstützung durch die Free Software Foundation (FSF)</2>. Das Guix-Projekt kann finanzielle Unterstützung immer gut gebrauchen, um seine Aufgabe voranzutreiben. Bitte denken Sie darüber nach, ob Sie uns mit einer Spende auf dieser von der FSF betriebenen Seite unterstützen möchten:"
+msgstr ""
+"Im Jahre 2015 haben wir <1>eine Spendensammlung veranstaltet</1>, um unsere "
+"Erstellungsfarm zu verstärken, mit <2>Unterstützung durch die Free Software "
+"Foundation (FSF)</2>. Das Guix-Projekt kann finanzielle Unterstützung immer "
+"gut gebrauchen, um seine Aufgabe voranzutreiben. Bitte denken Sie darüber "
+"nach, ob Sie uns mit einer Spende auf dieser von der FSF betriebenen Seite "
+"unterstützen möchten:"
 
 #: apps/base/templates/donate.scm:63
 msgctxt "button"
@@ -937,19 +1261,26 @@ msgid ""
 "We are also looking for donations of hardware and optionally\n"
 "           hosting for the following kinds of machines (they should be\n"
 "           usable with exclusively free software): "
-msgstr "Wir suchen auch Hardware-Spenden und optional auch Hosting für die folgenden Arten von Maschinen (sie sollten mit ausschließlich freier Software nutzbar sein):"
+msgstr ""
+"Wir suchen auch Hardware-Spenden und optional auch Hosting für die folgenden "
+"Arten von Maschinen (sie sollten mit ausschließlich freier Software nutzbar "
+"sein):"
 
 #: apps/base/templates/donate.scm:78
 msgid ""
 "x86_64 machines, with on the order of 1 TiB of storage\n"
 "               and 4 GiB of RAM;"
-msgstr "x86_64-Maschinen mit in der Größenordnung von 1 TiB an Plattenspeicher und 4 GiB Arbeitsspeicher,"
+msgstr ""
+"x86_64-Maschinen mit in der Größenordnung von 1 TiB an Plattenspeicher und "
+"4 GiB Arbeitsspeicher,"
 
 #: apps/base/templates/donate.scm:81
 msgid ""
 "armv7 machines (such as the Novena) to more quickly test\n"
 "               and provide binaries for the armhf-linux port;"
-msgstr "ARMv7-Maschinen (wie Novena), um schnell Binärdateien für die Portierung auf armhf-linux testen und bereitstellen zu können,"
+msgstr ""
+"ARMv7-Maschinen (wie Novena), um schnell Binärdateien für die Portierung auf "
+"armhf-linux testen und bereitstellen zu können,"
 
 #: apps/base/templates/donate.scm:84
 msgid "mips64el machines to strengthen this port."
@@ -957,9 +1288,12 @@ msgstr "MIPS64el-Maschinen, um diese Portierung zu verstärken."
 
 #: apps/base/templates/donate.scm:87
 msgid ""
-"Please get in touch with us through the <1>usual channels</1> or using the <2/> private alias to\n"
+"Please get in touch with us through the <1>usual channels</1> or using the "
+"<2/> private alias to\n"
 "           discuss any opportunities. "
-msgstr "Bitte treten Sie mit uns über die <1>üblichen Kanäle</1> oder über die private Alias-Adresse <2/> in Kontakt, um Möglichkeiten zu diskutieren."
+msgstr ""
+"Bitte treten Sie mit uns über die <1>üblichen Kanäle</1> oder über die "
+"private Alias-Adresse <2/> in Kontakt, um Möglichkeiten zu diskutieren."
 
 #: apps/base/templates/donate.scm:95
 msgid "Thanks to the donors!"
@@ -968,8 +1302,12 @@ msgstr "Danke an die Spender!"
 #: apps/base/templates/donate.scm:100
 msgid ""
 "The table below summarizes hardware and hosting donations that\n"
-"           make the <1>build farm</1> for the Guix System Distribution a reality."
-msgstr "Die folgende Tabelle fasst Hardware- und Hosting-Spenden zusammen, die die <1>Erstellungsfarm</1> für die Guix-System-Distribution Wirklichkeit werden lassen."
+"           make the <1>build farm</1> for the Guix System Distribution a "
+"reality."
+msgstr ""
+"Die folgende Tabelle fasst Hardware- und Hosting-Spenden zusammen, die die "
+"<1>Erstellungsfarm</1> für die Guix-System-Distribution Wirklichkeit werden "
+"lassen."
 
 #: apps/base/templates/donate.scm:110
 msgid "<1>machine</1><2>system</2><3>donors</3>"
@@ -977,43 +1315,82 @@ msgstr "<1>Maschine</1><2>System</2><3>Spender</3>"
 
 #: apps/base/templates/donate.scm:115
 msgid ""
-"<1>berlin.guixsd.org</1><2>build farm with 25 build nodes for x86_64-linux and\n"
-"i686-linux, and dedicated storage</2><3><3.1>Max Delbrück Center for Molecular Medicine</3.1> (hardware and hosting)</3>"
-msgstr "<1>berlin.guixsd.org</1><2>Erstellungsfarm mit 25 Erstellungsknoten für x86_64-linux und i686-linux, mit dediziertem Speicher</2><3><3.1>Max-Delbrück-Centrum für Molekulare Medizin</3.1> (Hardware und Hosting)</3>"
+"<1>berlin.guixsd.org</1><2>build farm with 25 build nodes for x86_64-linux "
+"and\n"
+"i686-linux, and dedicated storage</2><3><3.1>Max Delbrück Center for "
+"Molecular Medicine</3.1> (hardware and hosting)</3>"
+msgstr ""
+"<1>berlin.guixsd.org</1><2>Erstellungsfarm mit 25 Erstellungsknoten für "
+"x86_64-linux und i686-linux, mit dediziertem Speicher</2><3><3.1>Max-"
+"Delbrück-Centrum für Molekulare Medizin</3.1> (Hardware und Hosting)</3>"
 
 #: apps/base/templates/donate.scm:127
-msgid "<1>overdrive1.guixsd.org</1><2>aarch64-linux</2><3><3.1>ARM Holdings</3.1></3>"
-msgstr "<1>overdrive1.guixsd.org</1><2>aarch64-linux</2><3><3.1>ARM Holdings</3.1></3>"
+msgid ""
+"<1>overdrive1.guixsd.org</1><2>aarch64-linux</2><3><3.1>ARM "
+"Holdings</3.1></3>"
+msgstr ""
+"<1>overdrive1.guixsd.org</1><2>aarch64-linux</2><3><3.1>ARM "
+"Holdings</3.1></3>"
 
 #: apps/base/templates/donate.scm:137
-msgid "<1>bayfront.guixsd.org</1><2>new build farm front-end (WIP)</2><3>Igalia</3>"
-msgstr "<1>bayfront.guixsd.org</1><2>Neues Vordergrundsystem („Front-end“), in Arbeit</2><3>Igalia</3>"
+msgid ""
+"<1>bayfront.guixsd.org</1><2>new build farm front-end (WIP)</2><3>Igalia</3>"
+msgstr ""
+"<1>bayfront.guixsd.org</1><2>Neues Vordergrundsystem („Front-end“), in "
+"Arbeit</2><3>Igalia</3>"
 
 #: apps/base/templates/donate.scm:149
-msgid "<1>guix-x15.sjd.se, guix-x15b.sjd.se</1><2>armhf-linux</2><3>Simon Josefsson</3>"
-msgstr "<1>guix-x15.sjd.se, guix-x15b.sjd.se</1><2>armhf-linux</2><3>Simon Josefsson</3>"
+msgid ""
+"<1>guix-x15.sjd.se, guix-x15b.sjd.se</1><2>armhf-linux</2><3>Simon "
+"Josefsson</3>"
+msgstr ""
+"<1>guix-x15.sjd.se, guix-x15b.sjd.se</1><2>armhf-linux</2><3>Simon "
+"Josefsson</3>"
 
 #: apps/base/templates/donate.scm:159
-msgid "<1>hydra-slave1</1><2>armhf-linux</2><3><3.1>Steve Sprang (hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
-msgstr "<1>hydra-slave1</1><2>armhf-linux</2><3><3.1>Steve Sprang (Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
+msgid ""
+"<1>hydra-slave1</1><2>armhf-linux</2><3><3.1>Steve Sprang "
+"(hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
+msgstr ""
+"<1>hydra-slave1</1><2>armhf-linux</2><3><3.1>Steve Sprang "
+"(Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
 
 #: apps/base/templates/donate.scm:169
-msgid "<1>hydra-slave2</1><2>armhf-linux</2><3><3.1><3.1.1>Harmon Instruments</3.1.1> (hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
-msgstr "<1>hydra-slave2</1><2>armhf-linux</2><3><3.1><3.1.1>Harmon Instruments</3.1.1> (Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
+msgid ""
+"<1>hydra-slave2</1><2>armhf-linux</2><3><3.1><3.1.1>Harmon "
+"Instruments</3.1.1> (hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
+msgstr ""
+"<1>hydra-slave2</1><2>armhf-linux</2><3><3.1><3.1.1>Harmon "
+"Instruments</3.1.1> (Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
 
 #: apps/base/templates/donate.scm:182
-msgid "<1>hydra-slave3</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi Pte Ltd)</3.1.1> (hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
-msgstr "<1>hydra-slave3</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi Pte Ltd)</3.1.1> (Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
+msgid ""
+"<1>hydra-slave3</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi "
+"Pte Ltd)</3.1.1> (hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
+msgstr ""
+"<1>hydra-slave3</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi "
+"Pte Ltd)</3.1.1> (Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
 
 #: apps/base/templates/donate.scm:195
-msgid "<1>redhill</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi Pte Ltd)</3.1.1> (hardware)</3.1><3.2>Andreas Enge (hosting)</3.2></3>"
-msgstr "<1>redhill</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi Pte Ltd)</3.1.1> (Hardware)</3.1><3.2>Andreas Enge (Hosting)</3.2></3>"
+msgid ""
+"<1>redhill</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi Pte "
+"Ltd)</3.1.1> (hardware)</3.1><3.2>Andreas Enge (hosting)</3.2></3>"
+msgstr ""
+"<1>redhill</1><2>armhf-linux</2><3><3.1><3.1.1>Kosagi (Sutajio Ko-Usagi Pte "
+"Ltd)</3.1.1> (Hardware)</3.1><3.2>Andreas Enge (Hosting)</3.2></3>"
 
 #: apps/base/templates/donate.scm:209
 msgid ""
 "Other organizations and individuals helped Guix with hardware and\n"
-"hosting in the past and we thank them: <1>Free Software Foundation</1>, <2>GNU España</2>, <3>FSF France</3>, <4>Free Secure Network Systems Group</4> at the <5>Technische Universität München</5>."
-msgstr "Andere Organisationen und Individuen haben Guix in der Vergangenheit mit Hardware und dem Hosting von Maschinen ausgeholfen und wir sind ihnen dankbar: <1>Free Software Foundation</1>, <2>GNU España</2>, <3>FSF France</3>, <4>Free Secure Network Systems Group</4> an der <5>Technischen Universität München</5>."
+"hosting in the past and we thank them: <1>Free Software Foundation</1>, "
+"<2>GNU España</2>, <3>FSF France</3>, <4>Free Secure Network Systems "
+"Group</4> at the <5>Technische Universität München</5>."
+msgstr ""
+"Andere Organisationen und Individuen haben Guix in der Vergangenheit mit "
+"Hardware und dem Hosting von Maschinen ausgeholfen und wir sind ihnen "
+"dankbar: <1>Free Software Foundation</1>, <2>GNU España</2>, <3>FSF "
+"France</3>, <4>Free Secure Network Systems Group</4> an der <5>Technischen "
+"Universität München</5>."
 
 #: apps/base/templates/graphics.scm:16
 msgctxt "webpage title"
@@ -1024,12 +1401,18 @@ msgstr "Grafiken"
 msgid ""
 "Information about images used for the graphical identity\n"
 "   of GNU Guix and Guix System (formerly “GuixSD”)."
-msgstr "Informationen über benutzte Bilder und die grafische Identität von GNU Guix und Guix System (ehemals “GuixSD”)."
+msgstr ""
+"Informationen über benutzte Bilder und die grafische Identität von GNU Guix "
+"und Guix System (ehemals “GuixSD”)."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/graphics.scm:22
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Donations|Branding|Logo"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Spenden|Gestaltung|Logo"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Donations|Branding|Logo"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Spenden|Gestaltung|Logo"
 
 #: apps/base/templates/graphics.scm:32
 msgid "Graphics"
@@ -1039,7 +1422,9 @@ msgstr "Grafiken"
 msgid ""
 "For questions regarding the graphics listed in this page,\n"
 "          please contact <1>help-guix@HIDDEN</1>."
-msgstr "Bei Fragen zu den auf dieser Seite aufgeführten Grafiken kontaktieren Sie bitte <1>help-guix@HIDDEN</1>."
+msgstr ""
+"Bei Fragen zu den auf dieser Seite aufgeführten Grafiken kontaktieren Sie "
+"bitte <1>help-guix@HIDDEN</1>."
 
 #: apps/base/templates/graphics.scm:44
 msgid "GNU Guix logotype"
@@ -1050,7 +1435,10 @@ msgid ""
 "The standalone Guix, formerly known as the “Guix System\n"
 "          Distribution” or GuixSD, had its own logo, which is now\n"
 "          deprecated."
-msgstr "Eine eigenständige Guix-Installation, ehemals bekannt als die „Guix-System-Distribution“ oder GuixSD, hatte ihr eigenes Logo, das nicht länger gültig ist."
+msgstr ""
+"Eine eigenständige Guix-Installation, ehemals bekannt als die „Guix-System-"
+"Distribution“ oder GuixSD, hatte ihr eigenes Logo, das nicht länger gültig "
+"ist."
 
 #: apps/base/templates/graphics.scm:51
 msgid ""
@@ -1058,15 +1446,26 @@ msgid ""
 "          logotypes were designed by Luis Felipe López Acevedo\n"
 "          (a.k.a. sirgazil).  They are available under the following\n"
 "          terms:"
-msgstr "Die Logotypen von GNU Guix und GuixSD wurden von Luis Felipe López Acevedo gestaltet (auch bekannt als sirgazil). Sie sind unter den folgenden Bedingungen verfügbar:"
+msgstr ""
+"Die Logotypen von GNU Guix und GuixSD wurden von Luis Felipe López Acevedo "
+"gestaltet (auch bekannt als sirgazil). Sie sind unter den folgenden "
+"Bedingungen verfügbar:"
 
 #: apps/base/templates/graphics.scm:65
 msgid ""
 "The source files (SVG) for these logotypes, their variants, and\n"
 "          other artwork used in the different components of the GNU Guix\n"
-"          project are available in the <1>guix-artwork</1> repository, including the previous GNU Guix logotype designed\n"
-"          by Nikita Karetnikov in 2013 and <2>superseded</2> by the golden GNU in 2016."
-msgstr "Die Quelldateien (SVG) für diese Logotypen, ihre Varianten und andere Grafiken und Mediendateien, die in den verschiedenen Komponenten des GNU-Guix-Projekts benutzt werden, sind im <1>guix-artwork</1>-Repository verfügbar, einschließlich der vorherigen Logotype von GNU Guix, die von Nikita Karetnikov 2013 gestaltet wurde und 2016 durch das goldene GNU <2>ersetzt wurde</2>."
+"          project are available in the <1>guix-artwork</1> repository, "
+"including the previous GNU Guix logotype designed\n"
+"          by Nikita Karetnikov in 2013 and <2>superseded</2> by the golden "
+"GNU in 2016."
+msgstr ""
+"Die Quelldateien (SVG) für diese Logotypen, ihre Varianten und andere "
+"Grafiken und Mediendateien, die in den verschiedenen Komponenten des GNU-"
+"Guix-Projekts benutzt werden, sind im <1>guix-artwork</1>-Repository "
+"verfügbar, einschließlich der vorherigen Logotype von GNU Guix, die von "
+"Nikita Karetnikov 2013 gestaltet wurde und 2016 durch das goldene GNU "
+"<2>ersetzt wurde</2>."
 
 #: apps/base/templates/irc.scm:17 apps/base/templates/irc.scm:30
 msgctxt "webpage title"
@@ -1079,8 +1478,12 @@ msgstr "Internet Relay Chat."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/irc.scm:23
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|IRC|chat"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|IRC|Chat"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|IRC|chat"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|IRC|Chat"
 
 #: apps/base/templates/irc.scm:35
 msgid "IRC"
@@ -1088,11 +1491,18 @@ msgstr "IRC"
 
 #: apps/base/templates/irc.scm:37
 msgid ""
-"Join the <1/> channel on the <2>Freenode IRC network</2> to chat with the GNU Guix community or to get help\n"
+"Join the <1/> channel on the <2>Freenode IRC network</2> to chat with the "
+"GNU Guix community or to get help\n"
 "          in real-time. You can use the chat widget below, or just use\n"
-"          the <3>IRC client</3> of your preference. Note that the conversations that happen\n"
+"          the <3>IRC client</3> of your preference. Note that the "
+"conversations that happen\n"
 "          on the <4/> channel are logged (<5>browse the log</5>)."
-msgstr "Kommen Sie auf den <1/>-Kanal auf dem <2>Freenode-IRC-Netzwerk</2>, um mit der GNU-Guix-Gemeinde live zu chatten. Sie können das Chatfeld unten benutzen oder einfach Ihren bevorzugten <3>IRC-Client</3> dorthin verbinden. Beachten Sie, dass Kommunikation auf dem <4/>-Kanal protokolliert wird (<5>lesen Sie das Protokoll</5>)."
+msgstr ""
+"Kommen Sie auf den <1/>-Kanal auf dem <2>Freenode-IRC-Netzwerk</2>, um mit "
+"der GNU-Guix-Gemeinde live zu chatten. Sie können das Chatfeld unten "
+"benutzen oder einfach Ihren bevorzugten <3>IRC-Client</3> dorthin verbinden. "
+"Beachten Sie, dass Kommunikation auf dem <4/>-Kanal protokolliert wird "
+"(<5>lesen Sie das Protokoll</5>)."
 
 #: apps/base/templates/menu.scm:16
 msgctxt "webpage title"
@@ -1118,12 +1528,19 @@ msgid ""
 "Important information about getting security updates\n"
 "   for your GNU Guix installation, and instructions on how\n"
 "   to report security issues."
-msgstr "Wichtige Informationen, wie Sie Sicherheitsaktualisierungen für Ihre Installation von GNU Guix bekommen, und eine Anleitung, wie Sie Sicherheitslücken melden."
+msgstr ""
+"Wichtige Informationen, wie Sie Sicherheitsaktualisierungen für Ihre "
+"Installation von GNU Guix bekommen, und eine Anleitung, wie Sie "
+"Sicherheitslücken melden."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/base/templates/security.scm:26
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Security updates"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Sicherheitsaktualisierungen"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Security updates"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Sicherheitsaktualisierungen"
 
 #: apps/base/templates/security.scm:36
 msgid "Security"
@@ -1136,36 +1553,72 @@ msgstr "Wie Sie Sicherheitsprobleme melden"
 #: apps/base/templates/security.scm:39
 msgid ""
 "To report sensitive security issues in Guix itself or the\n"
-"           packages it provides, you can write to the private mailing list <1/>.  This list is monitored by a\n"
+"           packages it provides, you can write to the private mailing list "
+"<1/>.  This list is monitored by a\n"
 "           small team of Guix developers."
-msgstr "Um sensible Sicherheitslücken in Guix selbst oder den bereitgestellten Paketen zu melden, können Sie eine Nachricht an die private Mailing-Liste <1/> schicken. Diese Liste wird von einer kleinen Gruppe von Guix-Entwicklern beobachtet."
+msgstr ""
+"Um sensible Sicherheitslücken in Guix selbst oder den bereitgestellten "
+"Paketen zu melden, können Sie eine Nachricht an die private Mailing-Liste <1/"
+"> schicken. Diese Liste wird von einer kleinen Gruppe von Guix-Entwicklern "
+"beobachtet."
 
 #: apps/base/templates/security.scm:46
 msgid ""
 "If you prefer to send your report using OpenPGP encrypted email,\n"
-"           please send it to one of the following Guix developers using their\n"
+"           please send it to one of the following Guix developers using "
+"their\n"
 "           respective OpenPGP key:"
-msgstr "Wenn Sie es bevorzugen, Ihre Meldung in einer mit OpenPGP verschlüsselten E-Mail zu übermitteln, senden Sie diese bitte einem der folgenden Guix-Entwickler unter Nutzung des entsprechenden OpenPGP-Schlüssels:"
+msgstr ""
+"Wenn Sie es bevorzugen, Ihre Meldung in einer mit OpenPGP verschlüsselten E-"
+"Mail zu übermitteln, senden Sie diese bitte einem der folgenden Guix-"
+"Entwickler unter Nutzung des entsprechenden OpenPGP-Schlüssels:"
 
 #: apps/base/templates/security.scm:65
 msgid "Release signatures"
 msgstr "Signaturen der Veröffentlichungen"
 
 #: apps/base/templates/security.scm:66
-msgid "Releases of Guix are signed using the OpenPGP key with the fingerprint <1/>.  Users should <2>verify<2.1>en</2.1><2.2>Binary-Installation.html</2.2></2> their downloads before extracting or running them."
-msgstr "Veröffentlichungen von Guix werden mit dem OpenPGP-Schlüssel mit dem Fingerabdruck <1/> signiert. Benutzer sollten heruntergeladene Dateien <2>verifizieren<2.1>de</2.1><2.2>Aus-Binardatei-installieren.html</2.2></2>, bevor sie diese entpacken oder ausführen."
+msgid ""
+"Releases of Guix are signed using the OpenPGP key with the fingerprint <1/"
+">.  Users should <2>verify<2.1>en</2.1><2.2>Binary-Installation."
+"html</2.2></2> their downloads before extracting or running them."
+msgstr ""
+"Veröffentlichungen von Guix werden mit dem OpenPGP-Schlüssel mit dem "
+"Fingerabdruck <1/> signiert. Benutzer sollten heruntergeladene Dateien "
+"<2>verifizieren<2.1>de</2.1><2.2>Aus-Binardatei-installieren.html</2.2></2>, "
+"bevor sie diese entpacken oder ausführen."
 
 #: apps/base/templates/security.scm:78
 msgid "Security updates"
 msgstr "Sicherheitsaktualisierungen"
 
 #: apps/base/templates/security.scm:79
-msgid "When security vulnerabilities are found in Guix or the packages provided by Guix, we will provide <1>security updates<1.1>en</1.1><1.2>Security-Updates.html</1.2></1> quickly and with minimal disruption for users.  When appropriate, a security advisory is published on the blog with the <2>Security Advisory tag</2> and on the <3><3.1>info-guix</3.1> mailing list</3>; <4/> may also display the advisory."
-msgstr "Wenn Sicherheitslücken in Guix oder den von Guix bereitgestellten Paketen gefunden werden, werden wir schnell <1>Sicherheitsaktualisierungen<1.1>de</1.1><1.2>Sicherheitsaktualisierungen.html</1.2></1> ausliefern, mit minimaler Beeinträchtigung für die Nutzer. Wenn es angemessen ist, wird ein Sicherheitshinweis auf dem Blog veröffentlicht, der <2>als Sicherheitshinweis eingeordnet</2> ist, sowie eine Nachricht an die <3>Mailing-Liste <3.1>info-guix</3.1></3> versendet. Der Hinweis kann auch mit <4/> angezeigt werden."
+msgid ""
+"When security vulnerabilities are found in Guix or the packages provided by "
+"Guix, we will provide <1>security updates<1.1>en</1.1><1.2>Security-Updates."
+"html</1.2></1> quickly and with minimal disruption for users.  When "
+"appropriate, a security advisory is published on the blog with the "
+"<2>Security Advisory tag</2> and on the <3><3.1>info-guix</3.1> mailing "
+"list</3>; <4/> may also display the advisory."
+msgstr ""
+"Wenn Sicherheitslücken in Guix oder den von Guix bereitgestellten Paketen "
+"gefunden werden, werden wir schnell "
+"<1>Sicherheitsaktualisierungen<1.1>de</1.1><1.2>Sicherheitsaktualisierungen."
+"html</1.2></1> ausliefern, mit minimaler Beeinträchtigung für die Nutzer. "
+"Wenn es angemessen ist, wird ein Sicherheitshinweis auf dem Blog "
+"veröffentlicht, der <2>als Sicherheitshinweis eingeordnet</2> ist, sowie "
+"eine Nachricht an die <3>Mailing-Liste <3.1>info-guix</3.1></3> versendet. "
+"Der Hinweis kann auch mit <4/> angezeigt werden."
 
 #: apps/base/templates/security.scm:94
-msgid "Guix uses a “rolling release” model.  All security bug-fixes are pushed directly to the master branch.  There is no “stable” branch that only receives security fixes."
-msgstr "Guix verfolgt ein Rolling-Release-Modell. Jeder Patch, der eine Sicherheitslücke beseitigt, wird direkt auf den „master“-Branch gepusht. Es gibt keinen „stable“-Branch, der nur Sicherheitsaktualisierungen erhält."
+msgid ""
+"Guix uses a “rolling release” model.  All security bug-fixes are pushed "
+"directly to the master branch.  There is no “stable” branch that only "
+"receives security fixes."
+msgstr ""
+"Guix verfolgt ein Rolling-Release-Modell. Jeder Patch, der eine "
+"Sicherheitslücke beseitigt, wird direkt auf den „master“-Branch gepusht. Es "
+"gibt keinen „stable“-Branch, der nur Sicherheitsaktualisierungen erhält."
 
 #: apps/blog/templates/components.scm:33 apps/blog/templates/post.scm:46
 msgctxt "SRFI-19 date->string format"
@@ -1273,7 +1726,9 @@ msgstr "GNU Guix <1/> als Binärdatei"
 msgid ""
 "Self-contained tarball providing binaries for Guix and its\n"
 "       dependencies, to be installed on top of your Linux-based system."
-msgstr "Tarball mit Binärdateien für Guix und dessen Abhängigkeiten, die Ihr bestehendes Linux-basiertes System ergänzen können."
+msgstr ""
+"Tarball mit Binärdateien für Guix und dessen Abhängigkeiten, die Ihr "
+"bestehendes Linux-basiertes System ergänzen können."
 
 #. TRANSLATORS: Binary Installation is a section name in the
 #. English (en) manual.
@@ -1318,14 +1773,21 @@ msgstr "Herunterladen"
 msgid ""
 "Installers and source files for GNU Guix.  GNU Guix can be\n"
 "   installed on different GNU/Linux distributions."
-msgstr "Installationsprogramme und Quelldateien für GNU Guix. GNU Guix kann auf verschiedenen GNU/Linux-Distributionen installiert werden."
+msgstr ""
+"Installationsprogramme und Quelldateien für GNU Guix. GNU Guix kann auf "
+"verschiedenen GNU/Linux-Distributionen installiert werden."
 
 #. TRANSLATORS: |-separated list of webpage keywords
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/download/templates/download.scm:40
 #: apps/download/templates/download-latest.scm:122
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Installer|Source code|Package manager"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Installationsprogramm|Installationsabbild|Installation|Quellcode|Paketverwaltung"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Installer|Source code|Package manager"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Installationsprogramm|Installationsabbild|Installation|"
+"Quellcode|Paketverwaltung"
 
 #: apps/download/templates/download.scm:52
 msgid "Download"
@@ -1335,16 +1797,29 @@ msgstr "Herunterladen"
 #. in the English (en) manual.
 #: apps/download/templates/download.scm:56
 msgid ""
-"As of version <1/>, the standalone Guix System <2>can be installed<2.1>en</2.1><2.2>System-Installation.html</2.2></2> on an i686, x86_64, ARMv7, or AArch64 machine.  It uses the <3>Linux-Libre</3> kernel and the <4>GNU Shepherd</4> init system. Alternately, GNU Guix\n"
+"As of version <1/>, the standalone Guix System <2>can be "
+"installed<2.1>en</2.1><2.2>System-Installation.html</2.2></2> on an i686, "
+"x86_64, ARMv7, or AArch64 machine.  It uses the <3>Linux-Libre</3> kernel "
+"and the <4>GNU Shepherd</4> init system. Alternately, GNU Guix\n"
 "          can be installed as an additional package manager on top of an\n"
 "          installed Linux-based system."
-msgstr "Stand Version <1/> kann das eigenständige Guix System auf einer Maschine mit i686-, x86_64-, ARMv7- oder AArch64-Architektur <2>installiert werden<2.1>de</2.1><2.2>Systeminstallation.html</2.2></2>. Als Kernel wird <3>Linux-Libre</3> benutzt und <4>GNU Shepherd</4> als Init-System. Alternativ kann GNU Guix als zusätzliches Paketverwaltungsprogramm auf einem bereits installierten Linux-basierten System installiert werden."
+msgstr ""
+"Stand Version <1/> kann das eigenständige Guix System auf einer Maschine mit "
+"i686-, x86_64-, ARMv7- oder AArch64-Architektur <2>installiert "
+"werden<2.1>de</2.1><2.2>Systeminstallation.html</2.2></2>. Als Kernel wird "
+"<3>Linux-Libre</3> benutzt und <4>GNU Shepherd</4> als Init-System. "
+"Alternativ kann GNU Guix als zusätzliches Paketverwaltungsprogramm auf einem "
+"bereits installierten Linux-basierten System installiert werden."
 
 #: apps/download/templates/download.scm:74
 msgid ""
 "Source code and binaries for the Guix System distribution ISO\n"
-"          image as well as GNU Guix can be found on the GNU servers at <1/>.  Older releases can still be found on <2/>."
-msgstr "Den Quellcode und Binärdateien für die „Guix System“-Distribution als ISO-Abbild sowie für GNU Guix finden Sie auf den GNU-Servern unter <1/>. Ältere Veröffentlichungen können weiterhin auf <2/> gefunden werden."
+"          image as well as GNU Guix can be found on the GNU servers at <1/"
+">.  Older releases can still be found on <2/>."
+msgstr ""
+"Den Quellcode und Binärdateien für die „Guix System“-Distribution als ISO-"
+"Abbild sowie für GNU Guix finden Sie auf den GNU-Servern unter <1/>. Ältere "
+"Veröffentlichungen können weiterhin auf <2/> gefunden werden."
 
 #: apps/download/templates/download-latest.scm:50
 msgctxt "download page title"
@@ -1353,7 +1828,8 @@ msgstr "GNU Guix System mit Linux"
 
 #: apps/download/templates/download-latest.scm:51
 msgid "USB/DVD ISO installer of the standalone Guix System on Linux."
-msgstr "USB/DVD-ISO-Installationsabbild des eigenständigen „Guix System“ mit Linux."
+msgstr ""
+"USB/DVD-ISO-Installationsabbild des eigenständigen „Guix System“ mit Linux."
 
 #: apps/download/templates/download-latest.scm:58
 msgctxt "download page title"
@@ -1362,7 +1838,8 @@ msgstr "GNU Guix System mit GNU Hurd"
 
 #: apps/download/templates/download-latest.scm:59
 msgid "Virtual machine image of the standalone Guix System on GNU Hurd."
-msgstr "Abbild für virtuelle Maschinen vom eigenständigen „Guix System“ mit GNU Hurd."
+msgstr ""
+"Abbild für virtuelle Maschinen vom eigenständigen „Guix System“ mit GNU Hurd."
 
 #: apps/download/templates/download-latest.scm:102
 msgid "Build details: "
@@ -1377,7 +1854,10 @@ msgstr "Neueste Version herunterladen"
 msgid ""
 "Download latest GNU Guix System images built by the Cuirass continuous\n"
 "integration system."
-msgstr "Hier können Sie ein Abbild der neuesten Version von GNU Guix System herunterladen, wie es vom Cuirass-System zur kontinuierlichen Integration erstellt wurde."
+msgstr ""
+"Hier können Sie ein Abbild der neuesten Version von GNU Guix System "
+"herunterladen, wie es vom Cuirass-System zur kontinuierlichen Integration "
+"erstellt wurde."
 
 #: apps/download/templates/download-latest.scm:135
 msgid "Download latest images"
@@ -1386,129 +1866,146 @@ msgstr "Neueste Images herunterladen"
 #. TRANSLATORS: Continuous Integration is a section name
 #. in the English (en) manual.
 #: apps/download/templates/download-latest.scm:138
-msgid "Download latest GNU Guix System images built by the <1>Cuirass<1.1>en</1.1><1.2>Continuous-Integration.html</1.2></1> continuous integration system at <2/>. These images are <3>development snapshots</3>, you might prefer to use stable images that can be found <4>here.</4>"
-msgstr "Hier können Sie ein Abbild der neuesten Version von GNU Guix System herunterladen, wie es vom <1>Cuirass-System<1.1>de</1.1><1.2>Kontinuierliche-Integration.html</1.2></1> zur kontinuierlichen Integration auf <2/> erstellt wurde. Die Images sind <3>Momentaufnahmen der aktuellen Entwicklungsversion</3>. Vielleicht würden Sie lieber stabile Images von <4>hier</4> benutzen."
+msgid ""
+"Download latest GNU Guix System images built by the "
+"<1>Cuirass<1.1>en</1.1><1.2>Continuous-Integration.html</1.2></1> continuous "
+"integration system at <2/>. These images are <3>development snapshots</3>, "
+"you might prefer to use stable images that can be found <4>here.</4>"
+msgstr ""
+"Hier können Sie ein Abbild der neuesten Version von GNU Guix System "
+"herunterladen, wie es vom <1>Cuirass-System<1.1>de</1.1><1.2>Kontinuierliche-"
+"Integration.html</1.2></1> zur kontinuierlichen Integration auf <2/> "
+"erstellt wurde. Die Images sind <3>Momentaufnahmen der aktuellen "
+"Entwicklungsversion</3>. Vielleicht würden Sie lieber stabile Images von "
+"<4>hier</4> benutzen."
 
 #: apps/media/data.scm:25
 msgctxt "video title"
 msgid "Installation from Script"
 msgstr "Installation per Skript"
 
-#: apps/media/data.scm:27
+#: apps/media/data.scm:28
 msgid ""
 "Explains how to install Guix on distributions not running\n"
 "GNU Guix."
-msgstr "Erklärt, wie man Guix auf Distributionen installiert, auf denen noch kein GNU Guix läuft."
+msgstr ""
+"Erklärt, wie man Guix auf Distributionen installiert, auf denen noch kein "
+"GNU Guix läuft."
 
-#: apps/media/data.scm:34
+#: apps/media/data.scm:35
 msgctxt "video title"
 msgid "Everyday use of GNU Guix, Part One"
 msgstr "Alltägliche Nutzung von GNU Guix, Teil eins"
 
-#: apps/media/data.scm:36
+#: apps/media/data.scm:38
 msgid ""
 "How to install packages and how to manage software package\n"
 "generations."
-msgstr "Wie man Pakete installiert und Generationen von Softwarepaketen verwaltet."
+msgstr ""
+"Wie man Pakete installiert und Generationen von Softwarepaketen verwaltet."
 
-#: apps/media/data.scm:42
+#: apps/media/data.scm:44
 msgctxt "video title"
 msgid "Everyday use of GNU Guix, Part Two"
 msgstr "Alltägliche Nutzung von GNU Guix, Teil zwei"
 
-#: apps/media/data.scm:44
+#: apps/media/data.scm:47
 msgid "How to upgrade software and how to reclaim storage space."
 msgstr "Wie man Software aktualisiert und Speicherplatz zurückgewinnt."
 
-#: apps/media/data.scm:50
+#: apps/media/data.scm:53
 msgctxt "video title"
 msgid "Asking for help"
 msgstr "Um Hilfe bitten"
 
-#: apps/media/data.scm:52
+#: apps/media/data.scm:56
 msgid "How to get help from the Guix community."
 msgstr "Wie man Hilfe von der Guix-Gemeinde bekommt."
 
-#: apps/media/data.scm:58
+#: apps/media/data.scm:62
 msgctxt "video title"
 msgid "Packaging, Part One"
 msgstr "Pakete schreiben, Teil eins"
 
-#: apps/media/data.scm:60
+#: apps/media/data.scm:65
 msgid "How to set up a development environment for GNU Guix."
 msgstr "Wie man eine Entwicklungsumgebung für GNU Guix einrichtet."
 
-#: apps/media/data.scm:65
+#: apps/media/data.scm:70
 msgctxt "video title"
 msgid "Packaging, Part Two"
 msgstr "Pakete schreiben, Teil zwei"
 
-#: apps/media/data.scm:67
+#: apps/media/data.scm:73
 msgid "How to create a package recipe for not yet packaged software."
-msgstr "Wie man ein Paketrezept für Software schreibt, für die es noch kein Paket gibt."
+msgstr ""
+"Wie man ein Paketrezept für Software schreibt, für die es noch kein Paket "
+"gibt."
 
-#: apps/media/data.scm:72
+#: apps/media/data.scm:78
 msgctxt "video title"
 msgid "Packaging, Part Three"
 msgstr "Pakete schreiben, Teil drei"
 
-#: apps/media/data.scm:74
+#: apps/media/data.scm:81
 msgid ""
 "How to submit a package for inclusion in the GNU Guix\n"
 "distribution."
-msgstr "Wie man ein Paket einreicht, damit es in der GNU-Guix-Distribution aufgenommen wird."
+msgstr ""
+"Wie man ein Paket einreicht, damit es in der GNU-Guix-Distribution "
+"aufgenommen wird."
 
-#: apps/media/data.scm:84
+#: apps/media/data.scm:91
 msgctxt "screenshot title"
 msgid "Graphical log-in"
 msgstr "Grafische Anmeldung"
 
-#: apps/media/data.scm:88
+#: apps/media/data.scm:95
 msgid "Graphical log-in screen"
 msgstr "Grafischer Anmeldebildschirm"
 
-#: apps/media/data.scm:91
+#: apps/media/data.scm:98
 msgctxt "screenshot title"
 msgid "GNOME"
 msgstr "GNOME"
 
-#: apps/media/data.scm:95
+#: apps/media/data.scm:102
 msgid "GNOME desktop environment"
 msgstr "GNOME-Arbeitsumgebung"
 
-#: apps/media/data.scm:98
+#: apps/media/data.scm:105
 msgctxt "screenshot title"
 msgid "Xfce"
 msgstr "Xfce"
 
-#: apps/media/data.scm:102
+#: apps/media/data.scm:109
 msgid "Xfce desktop environment"
 msgstr "Xfce-Arbeitsumgebung"
 
-#: apps/media/data.scm:105
+#: apps/media/data.scm:112
 msgctxt "screenshot title"
 msgid "Virtual machine"
 msgstr "Virtuelle Maschine"
 
-#: apps/media/data.scm:109
+#: apps/media/data.scm:116
 msgid "Virtual machine started with 'guix system vm'"
 msgstr "Über ‚guix system vm‘ gestartete Virtuelle Maschine"
 
-#: apps/media/data.scm:112
+#: apps/media/data.scm:119
 msgctxt "screenshot title"
 msgid "Sway"
 msgstr "Sway"
 
-#: apps/media/data.scm:116
+#: apps/media/data.scm:123
 msgid "Sway window manager running wayland"
 msgstr "Sway-Fensterverwalter mit Wayland"
 
-#: apps/media/data.scm:119
+#: apps/media/data.scm:126
 msgctxt "screenshot title"
 msgid "Enlightenment"
 msgstr "Enlightenment"
 
-#: apps/media/data.scm:123
+#: apps/media/data.scm:130
 msgid "Enlightenment, Inkscape, and Serbian text"
 msgstr "Enlightenment, Inkscape und serbische Schrift"
 
@@ -1542,8 +2039,12 @@ msgstr "Video über GNU Guix."
 #. TRANSLATORS: |-separated list of webpage keywords
 #. TRANSLATORS: |-separated list of webpage keywords
 #: apps/media/templates/video.scm:27 apps/media/templates/video-list.scm:27
-msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|Help resources|Videos"
-msgstr "GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-Guix-Paketverwaltung|Hilfe-Ressourcen|Videos"
+msgid ""
+"GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU "
+"Guix package manager|Help resources|Videos"
+msgstr ""
+"GNU|Linux|Unix|Freie Software|Libre-Software|Betriebssystem|GNU Hurd|GNU-"
+"Guix-Paketverwaltung|Hilfe-Ressourcen|Videos"
 
 #: apps/media/templates/video.scm:45
 msgctxt "button"
@@ -1627,8 +2128,16 @@ msgstr "Liste der mit GNU Guix verfügbaren Pakete."
 
 #: apps/packages/templates/detailed-index.scm:45
 #: apps/packages/templates/index.scm:44
-msgid "GNU Guix provides <1/> packages transparently <2>available as pre-built binaries</2>. These pages provide a complete list of the packages.  Our <3>continuous integration system</3> shows their current build status (updated <4/>)."
-msgstr "Mit GNU Guix sind <1/> Pakete <2>als vorerstellte Binärdateien</2> transparent verfügbar. Auf diesen Seiten finden Sie eine vollständige Liste aller Pakete. Unser <3>System zur kontinuierlichen Integration</3> zeigt Ihnen deren aktuellen Status (Stand <4/>)."
+msgid ""
+"GNU Guix provides <1/> packages transparently <2>available as pre-built "
+"binaries</2>. These pages provide a complete list of the packages.  Our "
+"<3>continuous integration system</3> shows their current build status "
+"(updated <4/>)."
+msgstr ""
+"Mit GNU Guix sind <1/> Pakete <2>als vorerstellte Binärdateien</2> "
+"transparent verfügbar. Auf diesen Seiten finden Sie eine vollständige Liste "
+"aller Pakete. Unser <3>System zur kontinuierlichen Integration</3> zeigt "
+"Ihnen deren aktuellen Status (Stand <4/>)."
 
 #: apps/packages/templates/detailed-package-list.scm:56
 #: apps/packages/templates/package-list.scm:53
@@ -1656,14 +2165,32 @@ msgid "<1>Builds: </1>"
 msgstr "<1>Erstellungen: </1>"
 
 #: apps/packages/templates/package.scm:77
-msgid "<1>Lint issues</1><2><2.1/>. See <2.2>package definition</2.2> in Guix source code.</2>"
-msgstr "<1>Automatisch erkannte Paketfehler</1><2><2.1/>. Siehe die <2.2>Paketdefinition</2.2> im Quellcode von Guix.</2>"
-
-#~ msgid "<1>hydra.gnu.org</1><2>build farm front-end</2><3>Free Software Foundation</3>"
-#~ msgstr "<1>hydra.gnu.org</1><2>Vordergrundsystem („Front-end“) für die Erstellungsfarm</2><3>Free Software Foundation</3>"
-
-#~ msgid "<1>chapters.gnu.org</1><2>x86_64-linux, i686-linux</2><3><3.1><3.1.1>GNU España</3.1.1> (hardware)</3.1><3.2><3.2.1>FSF France</3.2.1> (hosting)</3.2></3>"
-#~ msgstr "<1>chapters.gnu.org</1><2>x86_64-linux, i686-linux</2><3><3.1><3.1.1>GNU España</3.1.1> (Hardware)</3.1><3.2><3.2.1>FSF France</3.2.1> (Hosting)</3.2></3>"
-
-#~ msgid "<1>librenote</1><2>mips64el-linux</2><3><3.1>Daniel Clark (hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
-#~ msgstr "<1>librenote</1><2>mips64el-linux</2><3><3.1>Daniel Clark (Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
+msgid ""
+"<1>Lint issues</1><2><2.1/>. See <2.2>package definition</2.2> in Guix "
+"source code.</2>"
+msgstr ""
+"<1>Automatisch erkannte Paketfehler</1><2><2.1/>. Siehe die "
+"<2.2>Paketdefinition</2.2> im Quellcode von Guix.</2>"
+
+#~ msgid ""
+#~ "<1>hydra.gnu.org</1><2>build farm front-end</2><3>Free Software "
+#~ "Foundation</3>"
+#~ msgstr ""
+#~ "<1>hydra.gnu.org</1><2>Vordergrundsystem („Front-end“) für die "
+#~ "Erstellungsfarm</2><3>Free Software Foundation</3>"
+
+#~ msgid ""
+#~ "<1>chapters.gnu.org</1><2>x86_64-linux, i686-"
+#~ "linux</2><3><3.1><3.1.1>GNU España</3.1.1> "
+#~ "(hardware)</3.1><3.2><3.2.1>FSF France</3.2.1> (hosting)</3.2></3>"
+#~ msgstr ""
+#~ "<1>chapters.gnu.org</1><2>x86_64-linux, i686-"
+#~ "linux</2><3><3.1><3.1.1>GNU España</3.1.1> "
+#~ "(Hardware)</3.1><3.2><3.2.1>FSF France</3.2.1> (Hosting)</3.2></3>"
+
+#~ msgid ""
+#~ "<1>librenote</1><2>mips64el-linux</2><3><3.1>Daniel Clark "
+#~ "(hardware)</3.1><3.2>Mark H Weaver (hosting)</3.2></3>"
+#~ msgstr ""
+#~ "<1>librenote</1><2>mips64el-linux</2><3><3.1>Daniel Clark "
+#~ "(Hardware)</3.1><3.2>Mark H Weaver (Hosting)</3.2></3>"
diff --git a/website/po/guix-website.pot b/website/po/guix-website.pot
index 402091d..f200bcd 100644
--- a/website/po/guix-website.pot
+++ b/website/po/guix-website.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: guix-website\n"
 "Report-Msgid-Bugs-To: ludo@HIDDEN\n"
-"POT-Creation-Date: 2020-07-15 08:13+0200\n"
+"POT-Creation-Date: 2020-07-28 10:47+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@HIDDEN>\n"
@@ -19,9 +19,9 @@ msgstr ""
 
 #. TRANSLATORS: The locale’s display name; please include a country
 #. code like in English (US) *only* if there are multiple
-#. Translation Project teams for the same language.
+#. translations for the same language.
 #: apps/base/utils.scm:74
-msgid "English (US)"
+msgid "English"
 msgstr ""
 
 #: apps/base/templates/home.scm:19
@@ -48,7 +48,7 @@ msgstr ""
 msgid "GNU|Linux|Unix|Free software|Libre software|Operating system|GNU Hurd|GNU Guix package manager|GNU Guile|Guile Scheme|Transactional upgrades|Functional package management|Reproducibility"
 msgstr ""
 
-#: apps/base/templates/home.scm:31 apps/base/templates/components.scm:343
+#: apps/base/templates/home.scm:31 apps/base/templates/components.scm:394
 msgctxt "website menu"
 msgid "Overview"
 msgstr ""
@@ -173,7 +173,7 @@ msgctxt "button"
 msgid "ALL CONTACT MEDIA"
 msgstr ""
 
-#: apps/base/templates/theme.scm:17 apps/base/templates/components.scm:367 apps/base/templates/about.scm:27 apps/base/templates/about.scm:30 apps/base/templates/contact.scm:26 apps/base/templates/contribute.scm:26 apps/base/templates/graphics.scm:24 apps/base/templates/security.scm:28
+#: apps/base/templates/theme.scm:17 apps/base/templates/components.scm:418 apps/base/templates/components.scm:421 apps/base/templates/about.scm:27 apps/base/templates/about.scm:30 apps/base/templates/contact.scm:26 apps/base/templates/contribute.scm:26 apps/base/templates/graphics.scm:24 apps/base/templates/security.scm:28
 msgctxt "website menu"
 msgid "About"
 msgstr ""
@@ -192,102 +192,102 @@ msgstr ""
 msgid "Made with <1>♥</1> by humans and powered by <2>GNU Guile</2>.  <3>Source code</3> under the <4>GNU AGPL</4>."
 msgstr ""
 
-#: apps/base/templates/components.scm:47
+#: apps/base/templates/components.scm:49
 msgid "Your location:"
 msgstr ""
 
-#: apps/base/templates/components.scm:49
+#: apps/base/templates/components.scm:51
 msgid "Home"
 msgstr ""
 
-#: apps/base/templates/components.scm:153
+#: apps/base/templates/components.scm:155
 msgid "archive"
 msgstr ""
 
-#: apps/base/templates/components.scm:337
+#: apps/base/templates/components.scm:384
 msgctxt "website menu"
 msgid "Guix"
 msgstr ""
 
-#: apps/base/templates/components.scm:341
+#: apps/base/templates/components.scm:388
 msgid "website menu:"
 msgstr ""
 
-#: apps/base/templates/components.scm:345 apps/download/templates/download.scm:43 apps/download/templates/download.scm:47 apps/download/templates/download-latest.scm:125 apps/download/templates/download-latest.scm:129
+#: apps/base/templates/components.scm:396 apps/download/templates/download.scm:43 apps/download/templates/download.scm:47 apps/download/templates/download-latest.scm:125 apps/download/templates/download-latest.scm:129
 msgctxt "website menu"
 msgid "Download"
 msgstr ""
 
-#: apps/base/templates/components.scm:351
+#: apps/base/templates/components.scm:402
 msgctxt "website menu"
 msgid "Stable"
 msgstr ""
 
-#: apps/base/templates/components.scm:354 apps/download/templates/download-latest.scm:130
+#: apps/base/templates/components.scm:405 apps/download/templates/download-latest.scm:130
 msgctxt "website menu"
 msgid "Latest"
 msgstr ""
 
-#: apps/base/templates/components.scm:355 apps/packages/templates/detailed-index.scm:31 apps/packages/templates/detailed-index.scm:38 apps/packages/templates/detailed-package-list.scm:34 apps/packages/templates/detailed-package-list.scm:43 apps/packages/templates/index.scm:31 apps/packages/templates/index.scm:37 apps/packages/templates/package-list.scm:34 apps/packages/templates/package-list.scm:40 apps/packages/templates/package.scm:36 apps/packages/templates/package.scm:41
+#: apps/base/templates/components.scm:406 apps/packages/templates/detailed-index.scm:31 apps/packages/templates/detailed-index.scm:38 apps/packages/templates/detailed-package-list.scm:34 apps/packages/templates/detailed-package-list.scm:43 apps/packages/templates/index.scm:31 apps/packages/templates/index.scm:37 apps/packages/templates/package-list.scm:34 apps/packages/templates/package-list.scm:40 apps/packages/templates/package.scm:36 apps/packages/templates/package.scm:41
 msgctxt "website menu"
 msgid "Packages"
 msgstr ""
 
-#: apps/base/templates/components.scm:356 apps/blog/templates/post-list.scm:33 apps/blog/templates/post-list.scm:39 apps/blog/templates/post.scm:29 apps/blog/templates/post.scm:35 apps/blog/templates/tag.scm:37 apps/blog/templates/tag.scm:43
+#: apps/base/templates/components.scm:407 apps/blog/templates/post-list.scm:33 apps/blog/templates/post-list.scm:39 apps/blog/templates/post.scm:29 apps/blog/templates/post.scm:35 apps/blog/templates/tag.scm:37 apps/blog/templates/tag.scm:43
 msgctxt "website menu"
 msgid "Blog"
 msgstr ""
 
-#: apps/base/templates/components.scm:358 apps/media/templates/screenshot.scm:28 apps/media/templates/screenshots-overview.scm:25 apps/media/templates/video.scm:29 apps/media/templates/video-list.scm:29
+#: apps/base/templates/components.scm:409 apps/media/templates/screenshot.scm:28 apps/media/templates/screenshots-overview.scm:25 apps/media/templates/video.scm:29 apps/media/templates/video-list.scm:29
 msgctxt "website menu"
 msgid "Media"
 msgstr ""
 
-#: apps/base/templates/components.scm:361 apps/media/templates/video.scm:33 apps/media/templates/video-list.scm:33
+#: apps/base/templates/components.scm:412 apps/media/templates/video.scm:33 apps/media/templates/video-list.scm:33
 msgctxt "website menu"
 msgid "Videos"
 msgstr ""
 
-#: apps/base/templates/components.scm:362
+#: apps/base/templates/components.scm:413
 msgctxt "website menu"
 msgid "Screenshots"
 msgstr ""
 
-#: apps/base/templates/components.scm:364 apps/base/templates/help.scm:26 apps/base/templates/help.scm:30
+#: apps/base/templates/components.scm:415 apps/base/templates/help.scm:26 apps/base/templates/help.scm:30
 msgctxt "website menu"
 msgid "Help"
 msgstr ""
 
-#: apps/base/templates/components.scm:365 apps/base/templates/donate.scm:26 apps/base/templates/donate.scm:29
+#: apps/base/templates/components.scm:416 apps/base/templates/donate.scm:26 apps/base/templates/donate.scm:29
 msgctxt "website menu"
 msgid "Donate"
 msgstr ""
 
-#: apps/base/templates/components.scm:370 apps/base/templates/contact.scm:31
+#: apps/base/templates/components.scm:423 apps/base/templates/contact.scm:31
 msgctxt "website menu"
 msgid "Contact"
 msgstr ""
 
-#: apps/base/templates/components.scm:371 apps/base/templates/contribute.scm:30
+#: apps/base/templates/components.scm:424 apps/base/templates/contribute.scm:30
 msgctxt "website menu"
 msgid "Contribute"
 msgstr ""
 
-#: apps/base/templates/components.scm:372 apps/base/templates/security.scm:31
+#: apps/base/templates/components.scm:425 apps/base/templates/security.scm:31
 msgctxt "website menu"
 msgid "Security"
 msgstr ""
 
-#: apps/base/templates/components.scm:373 apps/base/templates/graphics.scm:27
+#: apps/base/templates/components.scm:426 apps/base/templates/graphics.scm:27
 msgctxt "website menu"
 msgid "Graphics"
 msgstr ""
 
-#: apps/base/templates/components.scm:391
+#: apps/base/templates/components.scm:463
 msgid " (Page <1/> of <2/>)"
 msgstr ""
 
-#: apps/base/templates/components.scm:415
+#: apps/base/templates/components.scm:487
 msgid "Page <1/> of <2/>. Go to another page: "
 msgstr ""
 
@@ -375,83 +375,83 @@ msgctxt "unique lingua code like en or zh-cn"
 msgid "en"
 msgstr ""
 
-#: apps/base/data.scm:126
+#: apps/base/data.scm:122
 msgid "Bug Reporting"
 msgstr ""
 
-#: apps/base/data.scm:128
+#: apps/base/data.scm:124
 msgid "If you found a bug in Guix, check whether the bug is\n       already in the <1>bug database</1>. If it is not, please <2>report it.</2>"
 msgstr ""
 
-#: apps/base/data.scm:140
+#: apps/base/data.scm:136
 msgid "Development Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:142
+#: apps/base/data.scm:138
 msgid "Discussion about the development of GNU Guix. <1> Until July 2013</1>, the bug-Guix mailing list filled that role. "
 msgstr ""
 
-#: apps/base/data.scm:152
+#: apps/base/data.scm:148
 msgid "Patches Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:154
+#: apps/base/data.scm:150
 msgid "Submission of patches.  Every message sent to this mailing list\n       leads to a new entry in our <1>patch tracking tool</1>.  See <2>this page</2> for more information on how to use it; see <3>the manual<3.1>en</3.1><3.2>Submitting-Patches.html</3.2></3> for more information on how to submit a patch.  <4>Until February 2017</4>, the guix-devel mailing list filled that role."
 msgstr ""
 
-#: apps/base/data.scm:173
+#: apps/base/data.scm:169
 msgid "Science Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:175
+#: apps/base/data.scm:171
 msgid "Discussions about using GNU Guix for scientific purposes: reproducible research, high-performance computing (HPC), and more."
 msgstr ""
 
-#: apps/base/data.scm:183
+#: apps/base/data.scm:179
 msgid "Commits Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:185
+#: apps/base/data.scm:181
 msgid "Notifications of commits made to the <1>Git repositories</1>."
 msgstr ""
 
-#: apps/base/data.scm:194
+#: apps/base/data.scm:190
 msgid "Security Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:196
+#: apps/base/data.scm:192
 msgid "This is a private mailing list that anyone can post to to <1>report security issues</1> in Guix itself or in the <2>packages</2> it provides.  Posting here allows Guix developers to address\n       the problem before it is widely publicized."
 msgstr ""
 
-#: apps/base/data.scm:208
+#: apps/base/data.scm:204
 msgid "Sysadmin Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:210
+#: apps/base/data.scm:206
 msgid "Private mailing list for the <1>build farm</1> system administration."
 msgstr ""
 
-#: apps/base/data.scm:222
+#: apps/base/data.scm:218
 msgid "GNU System Discuss Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:224
+#: apps/base/data.scm:220
 msgid "Discussion about the development of the broader GNU system."
 msgstr ""
 
-#: apps/base/data.scm:229
+#: apps/base/data.scm:225
 msgid "GNU/Linux-libre Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:231
+#: apps/base/data.scm:227
 msgid "Workgroup for fully free GNU/Linux distributions."
 msgstr ""
 
-#: apps/base/data.scm:236
+#: apps/base/data.scm:232
 msgid "GNU Info Mailing List"
 msgstr ""
 
-#: apps/base/data.scm:238
+#: apps/base/data.scm:234
 msgid "GNU software announcements."
 msgstr ""
 
@@ -1164,115 +1164,115 @@ msgctxt "video title"
 msgid "Installation from Script"
 msgstr ""
 
-#: apps/media/data.scm:27
+#: apps/media/data.scm:28
 msgid "Explains how to install Guix on distributions not running\nGNU Guix."
 msgstr ""
 
-#: apps/media/data.scm:34
+#: apps/media/data.scm:35
 msgctxt "video title"
 msgid "Everyday use of GNU Guix, Part One"
 msgstr ""
 
-#: apps/media/data.scm:36
+#: apps/media/data.scm:38
 msgid "How to install packages and how to manage software package\ngenerations."
 msgstr ""
 
-#: apps/media/data.scm:42
+#: apps/media/data.scm:44
 msgctxt "video title"
 msgid "Everyday use of GNU Guix, Part Two"
 msgstr ""
 
-#: apps/media/data.scm:44
+#: apps/media/data.scm:47
 msgid "How to upgrade software and how to reclaim storage space."
 msgstr ""
 
-#: apps/media/data.scm:50
+#: apps/media/data.scm:53
 msgctxt "video title"
 msgid "Asking for help"
 msgstr ""
 
-#: apps/media/data.scm:52
+#: apps/media/data.scm:56
 msgid "How to get help from the Guix community."
 msgstr ""
 
-#: apps/media/data.scm:58
+#: apps/media/data.scm:62
 msgctxt "video title"
 msgid "Packaging, Part One"
 msgstr ""
 
-#: apps/media/data.scm:60
+#: apps/media/data.scm:65
 msgid "How to set up a development environment for GNU Guix."
 msgstr ""
 
-#: apps/media/data.scm:65
+#: apps/media/data.scm:70
 msgctxt "video title"
 msgid "Packaging, Part Two"
 msgstr ""
 
-#: apps/media/data.scm:67
+#: apps/media/data.scm:73
 msgid "How to create a package recipe for not yet packaged software."
 msgstr ""
 
-#: apps/media/data.scm:72
+#: apps/media/data.scm:78
 msgctxt "video title"
 msgid "Packaging, Part Three"
 msgstr ""
 
-#: apps/media/data.scm:74
+#: apps/media/data.scm:81
 msgid "How to submit a package for inclusion in the GNU Guix\ndistribution."
 msgstr ""
 
-#: apps/media/data.scm:84
+#: apps/media/data.scm:91
 msgctxt "screenshot title"
 msgid "Graphical log-in"
 msgstr ""
 
-#: apps/media/data.scm:88
+#: apps/media/data.scm:95
 msgid "Graphical log-in screen"
 msgstr ""
 
-#: apps/media/data.scm:91
+#: apps/media/data.scm:98
 msgctxt "screenshot title"
 msgid "GNOME"
 msgstr ""
 
-#: apps/media/data.scm:95
+#: apps/media/data.scm:102
 msgid "GNOME desktop environment"
 msgstr ""
 
-#: apps/media/data.scm:98
+#: apps/media/data.scm:105
 msgctxt "screenshot title"
 msgid "Xfce"
 msgstr ""
 
-#: apps/media/data.scm:102
+#: apps/media/data.scm:109
 msgid "Xfce desktop environment"
 msgstr ""
 
-#: apps/media/data.scm:105
+#: apps/media/data.scm:112
 msgctxt "screenshot title"
 msgid "Virtual machine"
 msgstr ""
 
-#: apps/media/data.scm:109
+#: apps/media/data.scm:116
 msgid "Virtual machine started with 'guix system vm'"
 msgstr ""
 
-#: apps/media/data.scm:112
+#: apps/media/data.scm:119
 msgctxt "screenshot title"
 msgid "Sway"
 msgstr ""
 
-#: apps/media/data.scm:116
+#: apps/media/data.scm:123
 msgid "Sway window manager running wayland"
 msgstr ""
 
-#: apps/media/data.scm:119
+#: apps/media/data.scm:126
 msgctxt "screenshot title"
 msgid "Enlightenment"
 msgstr ""
 
-#: apps/media/data.scm:123
+#: apps/media/data.scm:130
 msgid "Enlightenment, Inkscape, and Serbian text"
 msgstr ""
 
-- 
2.27.0


--gcpxdtdsnvmvvuwa--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 27 Jul 2020 20:20:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 27 16:20:32 2020
Received: from localhost ([127.0.0.1]:55808 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k09bs-0003rw-5b
	for submit <at> debbugs.gnu.org; Mon, 27 Jul 2020 16:20:32 -0400
Received: from pelzflorian.de ([5.45.111.108]:60740 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k09bq-0003rg-Kp
 for 26302 <at> debbugs.gnu.org; Mon, 27 Jul 2020 16:20:31 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 043FB3602A4;
 Mon, 27 Jul 2020 22:20:28 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595881229;
 bh=qG937yT9ykW0kgN0KIb0BZIX0OZqbcNUgpJnTDlFeFI=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=sgsmzxJFMfimlr13iUGJ8WjPTSdMSZwdgaHZwXwRPQ+1K4nIqF1onsQEZHoRrcFSh
 Tro2k9INqntkKKhW/XeXEC8uDPYuykKs9hADjXx+AGEz7kQzMJc3VOMH06QxwaPl8u
 O+jr2uf22mDGhtl9Tv9L3lI9H9mhV3xDjkOhZMQc=
Date: Mon, 27 Jul 2020 22:20:18 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Dmitry Alexandrov <dag@HIDDEN>
Subject: Re: bug#26302: Multilingual web site is on-line!
Message-ID: <20200727202018.lwmerdmsa4ohajwp@HIDDEN>
References: <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN> <1rkxpvrk.dag@HIDDEN>
 <20200727112833.5usk6c7l2adfwf6x@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20200727112833.5usk6c7l2adfwf6x@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Mon, Jul 27, 2020 at 01:28:48PM +0200, pelzflorian (Florian Pelz) wrote:
> Subject: [PATCH] Fix value of html lang attribute.
> 
> Reported by Dmitry Alexandrov <dag@HIDDEN>.
> 
> * website/apps/base/templates/theme.scm (theme): Add missing unquote.
> ---

Pushed as 4ab8ab5c2f04dbb584a76d842a7864454013bba1.  Good catch.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 27 Jul 2020 16:01:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 27 12:01:23 2020
Received: from localhost ([127.0.0.1]:55539 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k05Yy-0005uI-KW
	for submit <at> debbugs.gnu.org; Mon, 27 Jul 2020 12:01:23 -0400
Received: from pelzflorian.de ([5.45.111.108]:60472 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k05Yu-0005u4-Na
 for 26302 <at> debbugs.gnu.org; Mon, 27 Jul 2020 12:01:15 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 912A03602A4;
 Mon, 27 Jul 2020 18:01:10 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595865670;
 bh=umINjvEH5FXtQlkdNGs3SmAIvYMdwbcKkZANiJlOq+Q=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=t0kJSBG1upKfR0vtVNSMqoaM99VJ9QiHgcPd62TPlZ1vjt108N7+bAWfqHK5cmCpP
 qytgIElxsfQTkzDBu41Z2C+/CBK6e0bWDCW7Bft0cWUC6EskqGM2sFEfhv39l/UfMv
 3q3vA3tZKwSU6VwxOdF+47ytrlwhtSRxOsrRCbCI=
Date: Mon, 27 Jul 2020 18:01:01 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200727160101.nsznenkv75wcsuoe@HIDDEN>
References: <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
 <20200726185740.p2cobbqpyevywpkl@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="ef7tz56xdbuqpfnq"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200726185740.p2cobbqpyevywpkl@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--ef7tz56xdbuqpfnq
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Sun, Jul 26, 2020 at 08:58:11PM +0200, pelzflorian (Florian Pelz) wrote:
> Ohh sorry, the manual disappeared.  I suppose it is built in /srv/…/manual/?

Thank you Ludo for fixing this!

> > Should we publicize a process to contribute translations?  It could be a
> > page on the web site linked from the bottom of each page or something.
> > Thoughts?
> 
> One way would be to tar up the website and send it to the Translation
> Project.  I don’t know about the status of the Weblate plans.

I would suggest sending a tar archive with the website directory of
guix-artwork to the TP once more (ideally along with a current tarball
of Guix proper).  Also I think even if once we use different
technology like Weblate instead of the TP, the TP should remain the
go-to place for our translators, because it is where many other
projects’ translators gather.


> > It would also be nice to have a blog post mentioning this, perhaps
> > explaining the tools behind it, and why we think it matters.  I could
> > contribute a paragraph on linguistic diversity.  :-)
> > 
> > Thanks!
> > 
> > Ludo’.
> 
> So far I think Guix always needs more users and translations help.
> Also Scheme’s homoiconicity makes it easy to write translation macros.
> I will think some more what I could say about this tomorrow.

Please find attached a first draft blog post.

Regards,
Florian

--ef7tz56xdbuqpfnq
Content-Type: text/markdown; charset=utf-8
Content-Disposition: attachment;
	filename="1st-draft-blog-post-translatable-website.md"
Content-Transfer-Encoding: 8bit

title: Adding translations to Guix’ website
date: 2020-07-28 15:00
author: Florian Pelz
tags: Community
---
As part of [GNU](https://www.gnu.org/), Guix aims to bring freedom to
computer users all over the world, no matter the languages they
(prefer to) speak.  For example, Guix users asking for [help](/help)
can expect an answer even if they do so in languages other than
English.

We also offer software translations for people more comfortable with a
language other than English.  Thanks to many people who contribute
translations, GNU Guix and the packages it distributes can be used in
various languages.  Guix uses GNU Gettext for its translations, with
which translatable strings are extracted from the source code to
so-called PO files.  Translators can use any of various free-software
tools, such as [GNU Emacs](https://www.gnu.org/software/emacs/) or
[Poedit](https://poedit.net/), for filling in translations.  With
[Po4a](https://po4a.org/), we can also use Gettext’s tooling to
translate Guix’ [manual](/manual) and [cookbook](/cookbook).

But this was not true of its web presence.  That’s why after a
[lengthy process,](https://issues.guix.info/issue/26302) the website
of GNU Guix has undergone an update.  It now supports translation into
other languages.  Such support is known as internationalization
(“i18n”).

Guix’ website is written in
[SHTML](https://www.nongnu.org/guile-lib/doc/ref/htmlprag/), which is
a variant of HTML (in which web pages are usually written) that
integrates well with the [Scheme programming
language](https://schemers.org/).  This allows web authors to mix code
and text.  It looks like this:

```scheme
`(section
  (h2 "On packaging")
  (p
   "Packages are "
   (a (@ (href ,(manual-url "Defining-Packages.html"))) "defined")
   " as native "
   (a (@ (href ,(gnu-url "software/guile"))) "Guile")
   " modules."))
```

However, this mixing makes it more difficult to extract the strings to
be translated.  We therefore cannot take the same approach as
[gnu.org](https://www.gnu.org/), which uses a software called
[GNUnited Nations](https://www.gnu.org/software/gnun/) to extract from
pure HTML mark-up.  Translators are not always coders and we would
prefer to show them only the textual part, like this:

```
msgid "Packages are <1>defined</1> as native <2>Guile</2> modules."
```

Our new, custom i18n system does this.  The website authors need to
mark translatable strings [the way it is usually done in Guile Scheme
programs:](https://www.gnu.org/software/guile/manual/html_node/Gettext-Support.html#Gettext-Support)

```scheme
`(section
  ,(G_ `(h2 "On packaging"))
  ;; TRANSLATORS: Defining Packages is a section name
  ;; in the English (en) manual.
  ,(G_ `(p
         "Packages are "
         ,(G_ (manual-href "defined" (G_ "en") (G_ "Defining-Packages.html")))
         " as native "
         ,(G_ `(a (@ (href ,(gnu-url "software/guile"))) "Guile"))
         " modules.")))
```

Translators can arbitrarily change the ordering:

```
#. TRANSLATORS: Defining Packages is a section name
#. in the English (en) manual.
#: apps/base/templates/about.scm:64
msgid "Packages are <1>defineddefined<1.1>en</1.1><1.2>Defining-Packages.html</1.2></1> as native <2>Guile</2> modules."
msgstr "Pakete werden als reine <2>Guile</2>-Module <1>definiert<1.1>de</1.1><1.2>Pakete-definieren.html</1.2></1>."
```

Details are [documented
here](https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/tree/website/i18n-howto.txt).
We hope it strikes the right balance between simplicity for the
website’s developers and translator comfort.  Still missing is a way
to translate blog posts like the one you are reading here.

With ideas for and by a more diverse community, we can look forward to
a bright multi-lingual future.  Please get in touch with [the
Translation Project](https://translationproject.org/team/) or [us Guix
developers](/contact) if you want to help make Guix’ website available
in your language as well!

--ef7tz56xdbuqpfnq--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 27 Jul 2020 11:29:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 27 07:29:06 2020
Received: from localhost ([127.0.0.1]:54232 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k01Ja-0005FJ-6J
	for submit <at> debbugs.gnu.org; Mon, 27 Jul 2020 07:29:06 -0400
Received: from pelzflorian.de ([5.45.111.108]:60220 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k01JU-0005Ep-Vf
 for 26302 <at> debbugs.gnu.org; Mon, 27 Jul 2020 07:29:05 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id B06A03605E1;
 Mon, 27 Jul 2020 13:28:59 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595849339;
 bh=Uu1NLbrlt8uKGR8MWwbikR3zD8AG8LXTnQmfwCoLUuM=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=GhhLPQTccV5m1prZnhzpxBRHadbGgUgBTo9EuessMteDaKTNeHetG2ZBu5R0RazG3
 IKzowRXfsrTHuOzVXTCuUGBlw89xJB6Q7zLG9iKPhbgnESGmUu1yZZIOxAHj3pwhFh
 PdwWBOgzz/rkVyvkLTecCb0GK4dzuWewjVhh9b1g=
Date: Mon, 27 Jul 2020 13:28:48 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Dmitry Alexandrov <dag@HIDDEN>
Subject: Re: bug#26302: Multilingual web site is on-line!
Message-ID: <20200727112833.5usk6c7l2adfwf6x@HIDDEN>
References: <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN> <1rkxpvrk.dag@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="s2musuk4ujnv5xak"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <1rkxpvrk.dag@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--s2musuk4ujnv5xak
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Mon, Jul 27, 2020 at 04:54:55AM +0300, Dmitry Alexandrov wrote:
> Ludovic Courts <ludo@HIDDEN> wrote:
> > https://guix.gnu.org/
> >
> > report any issues!
> 
> The obvious:
> 
> | <!DOCTYPE html><html lang="lang-tag">
>                              ^~~~~~~~
> 
> ;-)

Thank you!  Clearly testing is necessary.

I will push the attached patch this evening.

Regards,
Florian

--s2musuk4ujnv5xak
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
	filename="0001-Fix-value-of-html-lang-attribute.patch"

From 2e5c8ad4fda96f1eec635fb3e21a9ef3dc1951e7 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Mon, 27 Jul 2020 12:36:39 +0200
Subject: [PATCH] Fix value of html lang attribute.

Reported by Dmitry Alexandrov <dag@HIDDEN>.

* website/apps/base/templates/theme.scm (theme): Add missing unquote.
---
 website/apps/base/templates/theme.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/website/apps/base/templates/theme.scm b/website/apps/base/templates/theme.scm
index f77d341..4734ee5 100644
--- a/website/apps/base/templates/theme.scm
+++ b/website/apps/base/templates/theme.scm
@@ -67,7 +67,7 @@
   `((doctype "html")
 
     (html
-     (@ (lang lang-tag))
+     (@ (lang ,lang-tag))
 
      (head
       ,(if (null? title)
-- 
2.27.0


--s2musuk4ujnv5xak--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 27 Jul 2020 11:21:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 27 07:21:06 2020
Received: from localhost ([127.0.0.1]:54215 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1k01Bp-00052l-Ox
	for submit <at> debbugs.gnu.org; Mon, 27 Jul 2020 07:21:05 -0400
Received: from pelzflorian.de ([5.45.111.108]:60196 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1k01Bo-00052d-Cc
 for 26302 <at> debbugs.gnu.org; Mon, 27 Jul 2020 07:21:05 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id A226E3602A4;
 Mon, 27 Jul 2020 13:21:03 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595848863;
 bh=qFe84OcysNr/lGD4/xjqaFQwdlILAeEBfy5r5+3owvs=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=2pWR60A/UYn/gQVyH2Rn4MrQhEftVHrM5DdJ4mGKn7u72Hm4DUIObbFJlpC0W96xe
 J8V9sfXQglmhvhouz4uZC4mgyOBynJksHooKKCin+1VJTxSSRfUjAtk7yKTkMGvXZk
 /+TXO9eZYWaIRKy4KLXB4EMgDh9Xl6iM+0mwY21o=
Date: Mon, 27 Jul 2020 13:20:56 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Vagrant Cascadian <vagrant@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20200727112056.k7apinkxwbdjyxqy@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <875zaa6u5x.fsf@ponder>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <875zaa6u5x.fsf@ponder>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sun, Jul 26, 2020 at 10:52:10AM -0700, Vagrant Cascadian wrote:
> Congrats on the translated website!

:)


> I noticed one minor issue, and that is it displays the
> language-selection drop-down with the current language's name for
> itself.
> 
> But if someone can't read the currently selected language, it's not
> obvious what they would click on to find a language they might
> understand. in other words:
> 
> 10:43 < vagrantc> civodul: the language-switching drop-down assumes you know what the current language describes itself ...
> 10:43 < vagrantc> e.g. not immediately obvious to someone who doesn't
> know german to click on "deutsch" to switch language
> 
> 
> This is a difficult user-interface challenge to solve well, not sure
> what to do better... the flag method is commonly used, but has many
> tricky political problems, though it can convey a dense amount of
> information in a small space.
> 
> 
> live well,
>   vagrant

Perhaps there should be a stylized image of characters from various
languages.  I cannot draw well though.  sirgazil, WDYT?

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 27 Jul 2020 01:55:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 26 21:55:08 2020
Received: from localhost ([127.0.0.1]:53652 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jzsM8-0007nw-7u
	for submit <at> debbugs.gnu.org; Sun, 26 Jul 2020 21:55:08 -0400
Received: from relay-1.mailobj.net ([213.182.54.6]:37463)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <dag@HIDDEN>) id 1jzsM4-0007nG-TX
 for 26302 <at> debbugs.gnu.org; Sun, 26 Jul 2020 21:55:06 -0400
Received: from v-1c.localdomain (unknown [192.168.90.161])
 by relay-1.mailobj.net (Postfix) with SMTP id 84ADB11EE;
 Mon, 27 Jul 2020 03:54:58 +0200 (CEST)
Received: by mail-1.net-c.com [213.182.54.15] with ESMTP
 Mon, 27 Jul 2020 03:54:58 +0200 (CEST)
X-EA-Auth: 3moFjp1gSqmmyT72bh8Ii+LpABlfBWKO5Oj0L+a7AbKYm8zeSLivbgrkhSh7ZXxxjFkuH0N9sqANjCA09ysdAwAuuZgLY62G
From: Dmitry Alexandrov <dag@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Multilingual web site is on-line!
In-Reply-To: <87d04i2mpc.fsf_-_@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s?=
 =?utf-8?Q?=22's?= message of "Sun, 26 Jul 2020 19:46:55 +0200")
References: <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)
Date: Mon, 27 Jul 2020 04:54:55 +0300
Message-ID: <1rkxpvrk.dag@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
 micalg=pgp-sha256; protocol="application/pgp-signature"
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Ludovic Court=C3=A8s <ludo@HIDDEN> wrote:
> https://guix.gnu.org/
>
> report any issues!

The obvious:

| <!DOCTYPE html><html lang=3D"lang-tag">
                             ^~~~~~~~

;-)

--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iIMEARYIACsWIQRSX35grYEsI2F1K7TIsPhUjufz5wUCXx4z7w0cZGFnQGdudWku
b3JnAAoJEMiw+FSO5/PnoG4BALCq+cztiPqoOjaOerM44fq0GAl0+pBBCArRqlSk
ZsXoAP0a3W6lR8zqNnA9wR0TR+X+jjL1atcgwnq0ewRCWvDKAw==
=fDlL
-----END PGP SIGNATURE-----
--=-=-=--





Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 26 Jul 2020 18:58:16 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 26 14:58:16 2020
Received: from localhost ([127.0.0.1]:53508 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jzlqh-0006It-Pf
	for submit <at> debbugs.gnu.org; Sun, 26 Jul 2020 14:58:15 -0400
Received: from pelzflorian.de ([5.45.111.108]:59318 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jzlqf-0006Ij-8B
 for 26302 <at> debbugs.gnu.org; Sun, 26 Jul 2020 14:58:13 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id A5FF93602A4;
 Sun, 26 Jul 2020 20:58:11 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1595789891;
 bh=CxSBXlR0IXf3qL9tGcOo+8iDY3bphCmpj4dQEnrQYUQ=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=3EQ2j6TdY81oXZwBrRN/Z1Tzf+ozoLv7f+vJAlM1DBMu6ac4cbAmv/uef8W7SMnBW
 1s27jwhmyQfEaGHPg5ZOYqBsohIEpKU3MBMBI5c8Ylq4qDAsHESd4JosWgxK+x0S4O
 z/umKYqlAxxhjxugGd54oEFW+Bkn6BcipZdJZQG0=
Date: Sun, 26 Jul 2020 20:57:58 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: Multilingual web site is on-line!
Message-ID: <20200726185740.p2cobbqpyevywpkl@HIDDEN>
References: <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
 <87d04i2mpc.fsf_-_@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87d04i2mpc.fsf_-_@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sun, Jul 26, 2020 at 07:46:55PM +0200, Ludovic Courtès wrote:
> Hi Florian & all!
> 
> I’m happy to say that I’ve finally taken the time to apply your
> maintenance.git patch, reconfigure berlin, merge your ‘wip-i18n’ branch
> in guix-artwork.git, and… tadaam!
> 
>   https://guix.gnu.org/

Thank you!  I am so happy.  Although …


> 
> At first sight, everything seems to be working fine, but please do take
> a look and report any issues!

Ohh sorry, the manual disappeared.  I suppose it is built in /srv/…/manual/?

:(


> Should we publicize a process to contribute translations?  It could be a
> page on the web site linked from the bottom of each page or something.
> Thoughts?

One way would be to tar up the website and send it to the Translation
Project.  I don’t know about the status of the Weblate plans.


> It would also be nice to have a blog post mentioning this, perhaps
> explaining the tools behind it, and why we think it matters.  I could
> contribute a paragraph on linguistic diversity.  :-)
> 
> Thanks!
> 
> Ludo’.

So far I think Guix always needs more users and translations help.
Also Scheme’s homoiconicity makes it easy to write translation macros.
I will think some more what I could say about this tomorrow.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 26 Jul 2020 17:52:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 26 13:52:23 2020
Received: from localhost ([127.0.0.1]:53419 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jzkox-0004hj-Eq
	for submit <at> debbugs.gnu.org; Sun, 26 Jul 2020 13:52:23 -0400
Received: from cascadia.aikidev.net ([173.255.214.101]:47988)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <vagrant@HIDDEN>) id 1jzkow-0004hV-4c
 for 26302 <at> debbugs.gnu.org; Sun, 26 Jul 2020 13:52:22 -0400
Received: from localhost (unknown [IPv6:2600:3c01:e000:21:21:21:0:100e])
 (Authenticated sender: vagrant@HIDDEN)
 by cascadia.aikidev.net (Postfix) with ESMTPSA id CEF261AA69
 for <26302 <at> debbugs.gnu.org>; Sun, 26 Jul 2020 10:52:15 -0700 (PDT)
From: Vagrant Cascadian <vagrant@HIDDEN>
To: 26302 <at> debbugs.gnu.org
Subject: [website] translations
Date: Sun, 26 Jul 2020 10:52:10 -0700
Message-ID: <875zaa6u5x.fsf@ponder>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
 micalg=pgp-sha512; protocol="application/pgp-signature"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain

Congrats on the translated website!

I noticed one minor issue, and that is it displays the
language-selection drop-down with the current language's name for
itself.

But if someone can't read the currently selected language, it's not
obvious what they would click on to find a language they might
understand. in other words:

10:43 < vagrantc> civodul: the language-switching drop-down assumes you know what the current language describes itself ...
10:43 < vagrantc> e.g. not immediately obvious to someone who doesn't
know german to click on "deutsch" to switch language


This is a difficult user-interface challenge to solve well, not sure
what to do better... the flag method is commonly used, but has many
tricky political problems, though it can convey a dense amount of
information in a small space.


live well,
  vagrant

--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCXx3CywAKCRDcUY/If5cW
qhf1AP9hqWtiHt1Wkz5u4HkA0TDxW4K892xXFVa0/W/eNxYdIgD+PY37FAcy4t1q
uYgxq6YAD9GecR/HR+gRPBGVgB3wZgM=
=qLgh
-----END PGP SIGNATURE-----
--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 26 Jul 2020 17:47:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 26 13:47:07 2020
Received: from localhost ([127.0.0.1]:53403 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jzkjr-0004aI-JV
	for submit <at> debbugs.gnu.org; Sun, 26 Jul 2020 13:47:07 -0400
Received: from eggs.gnu.org ([209.51.188.92]:45650)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1jzkjo-0004Zn-D5
 for 26302 <at> debbugs.gnu.org; Sun, 26 Jul 2020 13:47:06 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:38532)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1jzkji-000236-Br; Sun, 26 Jul 2020 13:46:58 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=36180 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1jzkjh-0006Vz-Tb; Sun, 26 Jul 2020 13:46:58 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Multilingual web site is on-line!
References: <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
 <20200712061927.uoubuabreji4dw54@HIDDEN>
Date: Sun, 26 Jul 2020 19:46:55 +0200
In-Reply-To: <20200712061927.uoubuabreji4dw54@HIDDEN>
 (pelzflorian@HIDDEN's message of "Sun, 12 Jul 2020 08:26:38
 +0200")
Message-ID: <87d04i2mpc.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi Florian & all!

I=E2=80=99m happy to say that I=E2=80=99ve finally taken the time to apply =
your
maintenance.git patch, reconfigure berlin, merge your =E2=80=98wip-i18n=E2=
=80=99 branch
in guix-artwork.git, and=E2=80=A6 tadaam!

  https://guix.gnu.org/

At first sight, everything seems to be working fine, but please do take
a look and report any issues!

Thank you for all the work, Florian, you rock! =E2=80=A6 and sorry it took =
so
long; I guess hitting the red button felt too frightening.  :-)

Should we publicize a process to contribute translations?  It could be a
page on the web site linked from the bottom of each page or something.
Thoughts?

It would also be nice to have a blog post mentioning this, perhaps
explaining the tools behind it, and why we think it matters.  I could
contribute a paragraph on linguistic diversity.  :-)

Thanks!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 13 Jul 2020 16:33:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 13 12:33:02 2020
Received: from localhost ([127.0.0.1]:49079 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jv1O2-0005uw-76
	for submit <at> debbugs.gnu.org; Mon, 13 Jul 2020 12:33:02 -0400
Received: from pelzflorian.de ([5.45.111.108]:42356 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jv1Nz-0005uU-3H
 for 26302 <at> debbugs.gnu.org; Mon, 13 Jul 2020 12:33:01 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 686A43602A4;
 Mon, 13 Jul 2020 18:32:57 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1594657977;
 bh=ZxoETzoQ+7Rll4KawLj/pOAn1ldb3BMk6dKBor5iXIY=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Ff96XYRMJ36HTRjA+sTidz1iKtUfjrwdWFsLiOzAZ8bDbFaA9h6O0pa2+bxL78dyC
 fvVdOownpdcBHOUOlxHsDM+dM4GYGYChDpTuzB2m8pYO9WpXp1npswaHbBxLMzh7Fx
 9Zr0SrknVf31vkpAD75P/OvxxJiNs3witIG9x+OA=
Date: Mon, 13 Jul 2020 18:32:48 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200713163248.hrwefxifq2s2fn65@HIDDEN>
References: <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87wo3ck4ok.fsf@HIDDEN>
 <20200710173131.qyko4wsvssipwuqc@HIDDEN>
 <87d04zsg6b.fsf@HIDDEN>
 <20200713144752.zlmn64pk6vjk5e2k@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200713144752.zlmn64pk6vjk5e2k@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Mon, Jul 13, 2020 at 04:48:00PM +0200, pelzflorian (Florian Pelz) wrote:
> On Mon, Jul 13, 2020 at 03:22:36PM +0200, Ludovic Courtès wrote:
> > I’m happy to press the red button on berlin when we feel ready.  Perhaps
> > we can synchronize on IRC in case things go wrong.
> > 
> > Thanks,
> > Ludo’.
> 
> I am currently at my grandma’s and unable to be on IRC most of the time.
> I will try to watch IRC now.
> I believe the berlin last patch works and suggest reverting otherwise.
> 
> Regards,
> Florian

No sorry, I would prefer not to do synchronous communication in the near future.

I am confident in my latest patch with explicit redirects though.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 13 Jul 2020 14:48:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 13 10:48:28 2020
Received: from localhost ([127.0.0.1]:49031 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1juzkq-0001Ib-CD
	for submit <at> debbugs.gnu.org; Mon, 13 Jul 2020 10:48:28 -0400
Received: from pelzflorian.de ([5.45.111.108]:42254 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1juzkZ-0001I8-7a
 for 26302 <at> debbugs.gnu.org; Mon, 13 Jul 2020 10:48:27 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 9A61B3602A4;
 Mon, 13 Jul 2020 16:48:08 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1594651688;
 bh=QYtGvUGodvhiAP/jeA9VHH+4vXOaM5PsuoBaijaGHUI=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=lWJfRdZI47/2pJsnetHpu+zq7M081FayLMgtWruALmOZWOs7HmDh1YhgAGKt7dD3/
 hS2DOr+F1klH9un6AuBKWj9JM66wRbM1KQnM1O6fI0nvBAIlhGqH5/1ZE1AfZVDhuB
 PYDZG9/X5wjaoALSDDKquwHJyTNKdsKVz0FYBN+k=
Date: Mon, 13 Jul 2020 16:48:00 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200713144752.zlmn64pk6vjk5e2k@HIDDEN>
References: <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87wo3ck4ok.fsf@HIDDEN>
 <20200710173131.qyko4wsvssipwuqc@HIDDEN>
 <87d04zsg6b.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87d04zsg6b.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Christopher Baines <mail@HIDDEN>, Bengt Richter <bokr@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>, sirgazil <sirgazil@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Mon, Jul 13, 2020 at 03:22:36PM +0200, Ludovic Courtès wrote:
> Looks like we’re pretty much ready, no?

I think we are.

> I’m happy to press the red button on berlin when we feel ready.  Perhaps
> we can synchronize on IRC in case things go wrong.
> 
> Thanks,
> Ludo’.

I am currently at my grandma’s and unable to be on IRC most of the time.
I will try to watch IRC now.
I believe the berlin last patch works and suggest reverting otherwise.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 13 Jul 2020 13:22:48 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jul 13 09:22:48 2020
Received: from localhost ([127.0.0.1]:47776 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1juyPw-0007M8-MY
	for submit <at> debbugs.gnu.org; Mon, 13 Jul 2020 09:22:48 -0400
Received: from eggs.gnu.org ([209.51.188.92]:35468)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1juyPu-0007Lw-9n
 for 26302 <at> debbugs.gnu.org; Mon, 13 Jul 2020 09:22:48 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:35738)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1juyPn-00089s-TV; Mon, 13 Jul 2020 09:22:39 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=34648 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1juyPn-0006OY-0C; Mon, 13 Jul 2020 09:22:39 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
References: <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87wo3ck4ok.fsf@HIDDEN>
 <20200710173131.qyko4wsvssipwuqc@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 26 Messidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Mon, 13 Jul 2020 15:22:36 +0200
In-Reply-To: <20200710173131.qyko4wsvssipwuqc@HIDDEN>
 (pelzflorian@HIDDEN's message of "Fri, 10 Jul 2020 19:31:31
 +0200")
Message-ID: <87d04zsg6b.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Christopher Baines <mail@HIDDEN>, Bengt Richter <bokr@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>, sirgazil <sirgazil@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hey!

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Thu, Jul 09, 2020 at 05:56:43PM +0100, Christopher Baines wrote:
>> Thanks for your continued time working on this Florian. I've made a
>> little bit of progress now, I've taken the wip-i18n branch, applied the
>> patch attached to this email and deployed that at [1].
>>=20
>> 1: http://guix-website-test.cbaines.net/
>>=20
>> This isn't a close test of the configuration for berlin, but might come
>> in useful when testing the NGinx configuration.
>>=20
>> Thanks,
>>=20
>> Chris
>
> This is a nice replica but with all the same issues.  Have you made
> improvements that should be added to my last patch for
> guix-maintenance before it is deployed?

Looks like we=E2=80=99re pretty much ready, no?

I=E2=80=99m happy to press the red button on berlin when we feel ready.  Pe=
rhaps
we can synchronize on IRC in case things go wrong.

Thanks,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 12 Jul 2020 06:26:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 12 02:26:50 2020
Received: from localhost ([127.0.0.1]:45327 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1juVRq-0001b7-KR
	for submit <at> debbugs.gnu.org; Sun, 12 Jul 2020 02:26:50 -0400
Received: from pelzflorian.de ([5.45.111.108]:40524 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1juVRn-0001aw-5L
 for 26302 <at> debbugs.gnu.org; Sun, 12 Jul 2020 02:26:48 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id E1EE13602A4;
 Sun, 12 Jul 2020 08:26:45 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1594535206;
 bh=gcXHn90Vt9qex5tI7/nrqRW5uH+LTaekDMsbqz2b6/s=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=jMnx6gDgAufN9aeTL7iKFsWaBKwtzoGF9nHIGKe8MTxerv97Re0KTpTGcDptpzydC
 +rYFxDonoSD6P6g4M/UFB3ZhP3gZunM2DoSoQscHaPuagl54itibP57tJEoW+jczlv
 cAm4QFnir+TjvshP4pufzmn19IQpIYHzZ4RaEItE=
Date: Sun, 12 Jul 2020 08:26:38 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200712061927.uoubuabreji4dw54@HIDDEN>
References: <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
 <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Jul 09, 2020 at 03:09:57PM +0200, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > Still failing:
> >
> > http://guix.gnu.org/graphics
> >
> > http://guix.gnu.org/blog/2013/back-from-the-european-lisp-symposium
> >
> > worked before wip-i18n but stopped working.  Hrm.
> 
> What does nginx’s error.log file say?

I forgot to try.  error.log contains a 404 message:

2020/07/12 08:09:14 [error] 321#0: *1 open() "/srv/guix.gnu.org/graphics" failed (2: No such file or directory), client: 172.28.112.1, server: guix.gnu.org, request: "GET /graphics HTTP/1.1", host: "guix.gnu.org"
2020/07/12 08:09:14 [error] 321#0: *1 open() "/srv/guix.gnu.org/favicon.ico" failed (2: No such file or directory), client: 172.28.112.1, server: guix.gnu.org, request: "GET /favicon.ico HTTP/1.1", host: "guix.gnu.org"

Note that only directories /srv/guix.gnu.org/de/graphics and
/srv/guix.gnu.org/en/graphics exist and no longer
/srv/guix.gnu.org/graphics.

I don’t have ideas for rewriting, because URLs like
<http://guix.gnu.org/index.html> should not become
<http://guix.gnu.org/index.html/>.  One could make /en/ go to the
/srv/guix.gnu.org directory, but then <http://guix.gnu.org/graphics>
would always be in English.  Or for old URLs use my last proposed patch:

On Fri, Jul 10, 2020 at 07:28:08PM +0200, pelzflorian (Florian Pelz) wrote:
> The patch introduces a long list of explicit redirects for all URLs
> not ending in a slash (except for <http://guix.gnu.org/packages/…>
> URLs, they are too many).

And for new URLs never use <http://guix.gnu.org/new> without a slash
at the end but only <http://guix.gnu.org/new/>.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 10 Jul 2020 17:31:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jul 10 13:31:44 2020
Received: from localhost ([127.0.0.1]:43353 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jtwsB-0000O0-VA
	for submit <at> debbugs.gnu.org; Fri, 10 Jul 2020 13:31:44 -0400
Received: from pelzflorian.de ([5.45.111.108]:33174 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jtws9-0000Nr-Lu
 for 26302 <at> debbugs.gnu.org; Fri, 10 Jul 2020 13:31:42 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 793B6360566;
 Fri, 10 Jul 2020 19:31:40 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1594402300;
 bh=yJtrESaUJWVuN2IqKqgxA6hJcvy6ejY1JddQ8zEQxKk=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=D2GQ/rkfSRTVv0eEGNP4xvDv8Xhisz8x9A1qD1/0Zi8imYgJyVWS5eko+lZqbaKce
 /Ai3tYpKt9NSsKGvu4fBau3dw7godGGjcJeIJlDimvaS9cPAO9ETom7PPOgDYa+vZ2
 LKh/4kqQgm4bUE8fN7tCXxwU8z3ES+2osGkVboFo=
Date: Fri, 10 Jul 2020 19:31:31 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Christopher Baines <mail@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200710173131.qyko4wsvssipwuqc@HIDDEN>
References: <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87wo3ck4ok.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <87wo3ck4ok.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 Bengt Richter <bokr@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Jul 09, 2020 at 05:56:43PM +0100, Christopher Baines wrote:
> Thanks for your continued time working on this Florian. I've made a
> little bit of progress now, I've taken the wip-i18n branch, applied the
> patch attached to this email and deployed that at [1].
> 
> 1: http://guix-website-test.cbaines.net/
> 
> This isn't a close test of the configuration for berlin, but might come
> in useful when testing the NGinx configuration.
> 
> Thanks,
> 
> Chris

This is a nice replica but with all the same issues.  Have you made
improvements that should be added to my last patch for
guix-maintenance before it is deployed?

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 10 Jul 2020 17:28:35 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Jul 10 13:28:35 2020
Received: from localhost ([127.0.0.1]:43348 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jtwp6-0000I6-ST
	for submit <at> debbugs.gnu.org; Fri, 10 Jul 2020 13:28:35 -0400
Received: from pelzflorian.de ([5.45.111.108]:33160 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jtwp2-0000Hv-28
 for 26302 <at> debbugs.gnu.org; Fri, 10 Jul 2020 13:28:31 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 63159360566;
 Fri, 10 Jul 2020 19:28:26 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1594402106;
 bh=lCl31XUEehR+MsvBpmVMsgxj9ucpqtUM0vgbLy6lQcI=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=1tqrIbEeyXX+y/snH2jk3Y83jiZpmBCCU1FdQU1lOL5G9d88OAFqntx1kdOZFYBOL
 UQYcp9hZpFSEUk2nVE4QP1DAYEuRz1O2ZltVw4MmZaurDCNJIsJz1mehjM7XeRK61s
 WwjdQz4dSCR9+ceDRnCUvLksKJHcjhDlzzGJpFes=
Date: Fri, 10 Jul 2020 19:28:08 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200710172732.7a2tm7hcqt4mmhlo@HIDDEN>
References: <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
 <20200709144524.fjri2znqer2dzn7a@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="jaxtpnqtvloxuavv"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200709144524.fjri2znqer2dzn7a@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--jaxtpnqtvloxuavv
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

Find attached a desperate patch for guix-maintenance that works around
all listed issues, perhaps not in a nice way.

On Thu, Jul 09, 2020 at 04:48:43PM +0200, pelzflorian (Florian Pelz) wrote:
> With what I currently have
> redirection explodes
> 
> http://guix.gnu.org/manual/html_node/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/html_node
> 
> !! I think this happened too back then.  I have not investigated this yet.
>

This is fixed by redirecting not to relative paths,

(redirect "/manual/html_node/Substitutes.html" "../en/html_node/Substitutes.html")

but to absolute paths

(redirect "/manual/html_node/Substitutes.html" "/manual/en/html_node/Substitutes.html")

I think this issue existed before any of my i18n changes.


> Previously when visiting
> 
> http://guix.gnu.org/graphics
> 
> then nginx too looked up the index file
> 
> http://guix.gnu.org/graphics/index.html
> 
> This broke.  “rewrite (.*)/$ $1/index.html;” had not fixed it.
> 
> !! I do not know what to do about it.


The patch introduces a long list of explicit redirects for all URLs
not ending in a slash (except for <http://guix.gnu.org/packages/…>
URLs, they are too many).  This is an unmaintainable solution if we
want to keep using URLs not ending in a slash.  If we don’t want that,
then if you agree all is ready, please deploy the i18n’d site by
applying this patch to guix-maintenance and shortly thereafter
merge/rebase the guix-artworks wip-i18n branch (shortly because
redirects won’t work in the meantime).

Regards,
Florian

--jaxtpnqtvloxuavv
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
	filename="0001-berlin-Redirect-to-localized-website-by-browser-lang.patch"

From 2506c25468b3e2bd07b3a4b6f0d8b21173ecd65e Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Fri, 10 Jul 2020 19:07:32 +0200
Subject: [PATCH 1/2] berlin: Redirect to localized website by browser language
 settings.

* hydra/nginx/berlin.scm (%nginx-configuration): Load required nginx
dynamic module.
(%extra-content): Set $lang variable with it.
(guix.gnu.org-locations): Redirect html URLs according to $lang.  Use
absolute target URLs.  Add redirects for URLs that do not end in a
slash.  Fix a redirect for the Power Management Services manual entry.
(%berlin-servers): Rewrite to index files.
(redirect): Give redirect locations highest priority.
---
 hydra/nginx/berlin.scm | 735 ++++++++++++++++++++++++++++-------------
 1 file changed, 510 insertions(+), 225 deletions(-)

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 8c90eb1..e461b5b 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -14,7 +14,7 @@
 
 (define (redirect old new)
   (nginx-location-configuration
-   (uri old)
+   (uri (string-append "= " old)) ;= means highest priority
    (body (list (string-append "return 301 " new ";\n")))))
 
 (define (publish-locations url)
@@ -196,235 +196,505 @@ PUBLISH-URL."
    ;; available at gnu.org/s/guix--e.g.,
    ;; <http://gnu.org/s/guix/news/porting-guix-and-guixsd.html>.
    (redirect "/news/feed.xml" "/feeds/blog.atom")
-   (redirect "/news/porting-guix-and-guixsd.html" "/blog/2015/porting-guix-and-guixsd")
-   (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/blog/2015/gnu-guix-welcomes-three-students-for-gsoc")
-   (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/blog/2015/gnu-guix-recruits-for-gsoc")
-   (redirect "/news/one-week-to-fosdem.html" "/blog/2014/one-week-to-fosdem")
-   (redirect "/news/gnu-dmd-02-released.html" "/blog/2014/gnu-dmd-02-released")
-   (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/blog/2014/emacs-as-a-general-purpose-package-manager")
-   (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/blog/2017/join-gnu-guix-for-gsoc-2017")
-   (redirect "/news/gnu-guix-05-released.html" "/blog/2013/gnu-guix-05-released")
-   (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/blog/2014/guix-at-the-2014-gnu-hackers-meeting")
-   (redirect "/news/state-of-aarch64-on-guix.html" "/blog/2017/state-of-aarch64-on-guix")
-   (redirect "/news/coming-events.html" "/blog/2017/coming-events")
-   (redirect "/news/gnu-dmd-01-released.html" "/blog/2013/gnu-dmd-01-released")
-   (redirect "/news/announcing-guix-hpc.html" "/blog/2017/announcing-guix-hpc")
-   (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/blog/2014/gnu-guix-looks-for-gsoc-students")
-   (redirect "/news/guix-at-the-european-lisp-symposium.html" "/blog/2013/guix-at-the-european-lisp-symposium")
-   (redirect "/news/gnu-guix-08-released.html" "/blog/2014/gnu-guix-08-released")
-   (redirect "/news/gnu-guix-090-released.html" "/blog/2015/gnu-guix-090-released")
-   (redirect "/news/index.html" "/blog/")
-   (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/blog/2016/gnu-guix-welcomes-four-students-for-gsoc")
-   (redirect "/news/gnu-guix-081-released.html" "/blog/2015/gnu-guix-081-released")
-   (redirect "/news/timely-delivery-of-security-updates.html" "/blog/2016/timely-delivery-of-security-updates")
-   (redirect "/news/guix-at-openbio-codefest-2014.html" "/blog/2014/guix-at-openbio-codefest-2014")
-   (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th")
-   (redirect "/news/gnu-guix-at-fosdem.html" "/blog/2015/gnu-guix-at-fosdem")
-   (redirect "/news/gnu-guix-082-released.html" "/blog/2015/gnu-guix-082-released")
-   (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th")
-   (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/blog/2013/back-from-the-gnu-hackers-meeting")
-   (redirect "/news/reproducible-build-summit-2nd-edition.html" "/blog/2016/reproducible-build-summit-2nd-edition")
-   (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/blog/2015/gnu-guix-talk-in-rennes-france-november-9th")
-   (redirect "/news/gnu-guix-01-released.html" "/blog/2013/gnu-guix-01-released")
-   (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/blog/2015/guix-tox-talk-at-pyconfr-october-17th")
-   (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/blog/2017/gnu-guix-and-guixsd-0.13.0-released")
-   (redirect "/news/guix-gets-cross-compilation-support.html" "/blog/2013/guix-gets-cross-compilation-support")
-   (redirect "/news/gnu-guix-06-released.html" "/blog/2014/gnu-guix-06-released")
-   (redirect "/news/meet-guix-at-fosdem.html" "/blog/2016/meet-guix-at-fosdem")
-   (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix")
-   (redirect "/news/container-provisioning-with-guix.html" "/blog/2015/container-provisioning-with-guix")
-   (redirect "/news/guixsd-system-tests.html" "/blog/2016/guixsd-system-tests")
-   (redirect "/news/gnu-guix--guixsd-0100-released.html" "/blog/2016/gnu-guix--guixsd-0100-released")
-   (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/blog/2016/gnu-guix-and-guixsd-0110-released")
-   (redirect "/news/boot-to-guile.html" "/blog/2013/boot-to-guile")
-   (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th")
-   (redirect "/news/running-system-services-in-containers.html" "/blog/2017/running-system-services-in-containers")
-   (redirect "/news/growing-our-build-farm.html" "/blog/2016/growing-our-build-farm")
-   (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips")
-   (redirect "/news/guix-at-libreplanet-2016.html" "/blog/2016/guix-at-libreplanet-2016")
-   (redirect "/news/guix--gsoc.html" "/blog/2013/guix--gsoc")
-   (redirect "/news/service-composition-in-guixsd.html" "/blog/2015/service-composition-in-guixsd")
-   (redirect "/news/creating-bundles-with-guix-pack.html" "/blog/2017/creating-bundles-with-guix-pack")
-   (redirect "/news/back-from-the-european-lisp-symposium.html" "/blog/2013/back-from-the-european-lisp-symposium")
-   (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/blog/2013/gnu-guix-04-released-happy-birthday-gnu")
-   (redirect "/news/reproducible-builds-a-status-update.html" "/blog/2017/reproducible-builds-a-status-update")
-   (redirect "/news/gnu-guix-083-released.html" "/blog/2015/gnu-guix-083-released")
-   (redirect "/news/join-gnu-guix-for-gsoc.html" "/blog/2016/join-gnu-guix-for-gsoc")
-   (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/blog/2016/gnu-guix-and-guixsd-0120-released")
-   (redirect "/news/meet-guix-at-fosdem-2017.html" "/blog/2017/meet-guix-at-fosdem-2017")
-   (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29")
-   (redirect "/news/gnome-in-guixsd.html" "/blog/2016/gnome-in-guixsd")
-   (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu")
-   (redirect "/news/gnu-guix-03-released.html" "/blog/2013/gnu-guix-03-released")
-   (redirect "/news/gnu-guix-07-released.html" "/blog/2014/gnu-guix-07-released")
-   (redirect "/news/gsoc-update.html" "/blog/2015/gsoc-update")
-   (redirect "/news/gnu-guix-02-released.html" "/blog/2013/gnu-guix-02-released")
-   (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf")
-   (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year")
-   (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/blog/2015/reproducible-builds-a-means-to-an-end")
-   (redirect "/manual/html_node/Substitutes.html" "../en/html_node/Substitutes.html")
-   (redirect "/manual/html_node/GNU-Free-Documentation-License.html" "../en/html_node/GNU-Free-Documentation-License.html")
-   (redirect "/manual/html_node/The-Store-Monad.html" "../en/html_node/The-Store-Monad.html")
-   (redirect "/manual/html_node/Running-Guix-Before-It-Is-Installed.html" "../en/html_node/Running-Guix-Before-It-Is-Installed.html")
-   (redirect "/manual/html_node/rngd_002dservice.html" "../en/html_node/rngd_002dservice.html")
-   (redirect "/manual/html_node/Data-Types-and-Pattern-Matching.html" "../en/html_node/Data-Types-and-Pattern-Matching.html")
-   (redirect "/manual/html_node/Version-Numbers.html" "../en/html_node/Version-Numbers.html")
-   (redirect "/manual/html_node/The-Perfect-Setup.html" "../en/html_node/The-Perfect-Setup.html")
-   (redirect "/manual/html_node/G_002dExpressions.html" "../en/html_node/G_002dExpressions.html")
-   (redirect "/manual/html_node/Programming-Paradigm.html" "../en/html_node/Programming-Paradigm.html")
-   (redirect "/manual/html_node/Installing-GuixSD-in-a-VM.html" "../en/html_node/Installing-GuixSD-in-a-VM.html")
-   (redirect "/manual/html_node/syslog_002dconfiguration_002dtype.html" "../en/html_node/syslog_002dconfiguration_002dtype.html")
-   (redirect "/manual/html_node/Running-the-Test-Suite.html" "../en/html_node/Running-the-Test-Suite.html")
-   (redirect "/manual/html_node/Coding-Style.html" "../en/html_node/Coding-Style.html")
-   (redirect "/manual/html_node/Version-Control-Services.html" "../en/html_node/Version-Control-Services.html")
-   (redirect "/manual/html_node/client_002dsubstitute_002durls.html" "../en/html_node/client_002dsubstitute_002durls.html")
-   (redirect "/manual/html_node/Database-Services.html" "../en/html_node/Database-Services.html")
-   (redirect "/manual/html_node/Invoking-guix-download.html" "../en/html_node/Invoking-guix-download.html")
-   (redirect "/manual/html_node/Documentation.html" "../en/html_node/Documentation.html")
-   (redirect "/manual/html_node/Package-Naming.html" "../en/html_node/Package-Naming.html")
-   (redirect "/manual/html_node/Invoking-guix-hash.html" "../en/html_node/Invoking-guix-hash.html")
-   (redirect "/manual/html_node/Audio-Services.html" "../en/html_node/Audio-Services.html")
-   (redirect "/manual/html_node/Mapped-Devices.html" "../en/html_node/Mapped-Devices.html")
-   (redirect "/manual/html_node/operating_002dsystem-Reference.html" "../en/html_node/operating_002dsystem-Reference.html")
-   (redirect "/manual/html_node/Security-Updates.html" "../en/html_node/Security-Updates.html")
-   (redirect "/manual/html_node/Java-Packages.html" "../en/html_node/Java-Packages.html")
-   (redirect "/manual/html_node/user_002daccount_002dpassword.html" "../en/html_node/user_002daccount_002dpassword.html")
-   (redirect "/manual/html_node/System-Installation.html" "../en/html_node/System-Installation.html")
-   (redirect "/manual/html_node/Installation.html" "../en/html_node/Installation.html")
-   (redirect "/manual/html_node/Modules.html" "../en/html_node/Modules.html")
-   (redirect "/manual/html_node/File-Systems.html" "../en/html_node/File-Systems.html")
-   (redirect "/manual/html_node/Invoking-guix-gc.html" "../en/html_node/Invoking-guix-gc.html")
-   (redirect "/manual/html_node/package_002dpropagated_002dinputs.html" "../en/html_node/package_002dpropagated_002dinputs.html")
-   (redirect "/manual/html_node/Invoking-guix-lint.html" "../en/html_node/Invoking-guix-lint.html")
-   (redirect "/manual/html_node/Invoking-guix-pull.html" "../en/html_node/Invoking-guix-pull.html")
-   (redirect "/manual/html_node/Invoking-guix_002ddaemon.html" "../en/html_node/Invoking-guix_002ddaemon.html")
-   (redirect "/manual/html_node/Locales.html" "../en/html_node/Locales.html")
-   (redirect "/manual/html_node/Using-the-Configuration-System.html" "../en/html_node/Using-the-Configuration-System.html")
-   (redirect "/manual/html_node/X_002e509-Certificates.html" "../en/html_node/X_002e509-Certificates.html")
-   (redirect "/manual/html_node/guix_002dconfiguration_002dtype.html" "../en/html_node/guix_002dconfiguration_002dtype.html")
-   (redirect "/manual/html_node/USB-Stick-and-DVD-Installation.html" "../en/html_node/USB-Stick-and-DVD-Installation.html")
-   (redirect "/manual/html_node/Software-Freedom.html" "../en/html_node/Software-Freedom.html")
-   (redirect "/manual/html_node/Building-the-Installation-Image.html" "../en/html_node/Building-the-Installation-Image.html")
-   (redirect "/manual/html_node/Running-GuixSD-in-a-VM.html" "../en/html_node/Running-GuixSD-in-a-VM.html")
-   (redirect "/manual/html_node/Debugging-Build-Failures.html" "../en/html_node/Debugging-Build-Failures.html")
-   (redirect "/manual/html_node/daemon_002dsubstitute_002durls.html" "../en/html_node/daemon_002dsubstitute_002durls.html")
-   (redirect "/manual/html_node/Virtualization-Services.html" "../en/html_node/Virtualization-Services.html")
-   (redirect "/manual/html_node/Fonts.html" "../en/html_node/Fonts.html")
-   (redirect "/manual/html_node/Monitoring-Services.html" "../en/html_node/Monitoring-Services.html")
-   (redirect "/manual/html_node/Binary-Installation.html" "../en/html_node/Binary-Installation.html")
-   (redirect "/manual/html_node/Messaging-Services.html" "../en/html_node/Messaging-Services.html")
-   (redirect "/manual/html_node/X-Window.html" "../en/html_node/X-Window.html")
-   (redirect "/manual/html_node/Service-Types-and-Services.html" "../en/html_node/Service-Types-and-Services.html")
-   (redirect "/manual/html_node/Introduction.html" "../en/html_node/Introduction.html")
-   (redirect "/manual/html_node/Hardware-Considerations.html" "../en/html_node/Hardware-Considerations.html")
-   (redirect "/manual/html_node/System-Configuration.html" "../en/html_node/System-Configuration.html")
-   (redirect "/manual/html_node/VPN-Services.html" "../en/html_node/VPN-Services.html")
-   (redirect "/manual/html_node/Invoking-guix-system.html" "../en/html_node/Invoking-guix-system.html")
-   (redirect "/manual/html_node/index.html" "../en/html_node/index.html")
-   (redirect "/manual/html_node/package-Reference.html" "../en/html_node/package-Reference.html")
-   (redirect "/manual/html_node/Sending-a-Patch-Series.html" "../en/html_node/Sending-a-Patch-Series.html")
-   (redirect "/manual/html_node/package_002dcmd_002dpropagated_002dinputs.html" "../en/html_node/package_002dcmd_002dpropagated_002dinputs.html")
-   (redirect "/manual/html_node/Invoking-guix-refresh.html" "../en/html_node/Invoking-guix-refresh.html")
-   (redirect "/manual/html_node/GNU-Distribution.html" "../en/html_node/GNU-Distribution.html")
-   (redirect "/manual/html_node/Name-Service-Switch.html" "../en/html_node/Name-Service-Switch.html")
-   (redirect "/manual/html_node/The-Store.html" "../en/html_node/The-Store.html")
-   (redirect "/manual/html_node/Common-Build-Options.html" "../en/html_node/Common-Build-Options.html")
-   (redirect "/manual/html_node/Invoking-guix-import.html" "../en/html_node/Invoking-guix-import.html")
-   (redirect "/manual/html_node/Invoking-guix-edit.html" "../en/html_node/Invoking-guix-edit.html")
-   (redirect "/manual/html_node/Network-File-System.html" "../en/html_node/Network-File-System.html")
-   (redirect "/manual/html_node/Miscellaneous-Services.html" "../en/html_node/Miscellaneous-Services.html")
-   (redirect "/manual/html_node/Daemon-Offload-Setup.html" "../en/html_node/Daemon-Offload-Setup.html")
-   (redirect "/manual/html_node/Features.html" "../en/html_node/Features.html")
-   (redirect "/manual/html_node/guix_002dpublish_002dservice_002dtype.html" "../en/html_node/guix_002dpublish_002dservice_002dtype.html")
-   (redirect "/manual/html_node/Invoking-guix-pack.html" "../en/html_node/Invoking-guix-pack.html")
-   (redirect "/manual/html_node/Contributing.html" "../en/html_node/Contributing.html")
-   (redirect "/manual/html_node/fallback_002doption.html" "../en/html_node/fallback_002doption.html")
-   (redirect "/manual/html_node/Power-management-Services.html" "../en/html_node/Power-management-Services.html")
-   (redirect "/manual/html_node/build_002dcheck.html" "../en/html_node/build_002dcheck.html")
-   (redirect "/manual/html_node/Invoking-guix-package.html" "../en/html_node/Invoking-guix-package.html")
-   (redirect "/manual/html_node/Mail-Services.html" "../en/html_node/Mail-Services.html")
-   (redirect "/manual/html_node/Concept-Index.html" "../en/html_node/Concept-Index.html")
-   (redirect "/manual/html_node/Build-Environment-Setup.html" "../en/html_node/Build-Environment-Setup.html")
-   (redirect "/manual/html_node/Printing-Services.html" "../en/html_node/Printing-Services.html")
-   (redirect "/manual/html_node/Invoking-guix-build.html" "../en/html_node/Invoking-guix-build.html")
-   (redirect "/manual/html_node/Programming-Interface.html" "../en/html_node/Programming-Interface.html")
-   (redirect "/manual/html_node/profile_002dmanifest.html" "../en/html_node/profile_002dmanifest.html")
-   (redirect "/manual/html_node/Packaging-Guidelines.html" "../en/html_node/Packaging-Guidelines.html")
-   (redirect "/manual/html_node/Kerberos-Services.html" "../en/html_node/Kerberos-Services.html")
-   (redirect "/manual/html_node/Invoking-guix-graph.html" "../en/html_node/Invoking-guix-graph.html")
-   (redirect "/manual/html_node/Invoking-guix-container.html" "../en/html_node/Invoking-guix-container.html")
-   (redirect "/manual/html_node/Derivations.html" "../en/html_node/Derivations.html")
-   (redirect "/manual/html_node/Programming-Index.html" "../en/html_node/Programming-Index.html")
-   (redirect "/manual/html_node/Setting-Up-the-Daemon.html" "../en/html_node/Setting-Up-the-Daemon.html")
-   (redirect "/manual/html_node/Continuous-Integration.html" "../en/html_node/Continuous-Integration.html")
-   (redirect "/manual/html_node/User-Accounts.html" "../en/html_node/User-Accounts.html")
-   (redirect "/manual/html_node/guix-system-vm.html" "../en/html_node/guix-system-vm.html")
-   (redirect "/manual/html_node/Invoking-guix-weather.html" "../en/html_node/Invoking-guix-weather.html")
-   (redirect "/manual/html_node/USB-Stick-Installation.html" "../en/html_node/USB-Stick-Installation.html")
-   (redirect "/manual/html_node/Telephony-Services.html" "../en/html_node/Telephony-Services.html")
-   (redirect "/manual/html_node/Additional-Build-Options.html" "../en/html_node/Additional-Build-Options.html")
-   (redirect "/manual/html_node/Requirements.html" "../en/html_node/Requirements.html")
-   (redirect "/manual/html_node/Acknowledgments.html" "../en/html_node/Acknowledgments.html")
-   (redirect "/manual/html_node/Formatting-Code.html" "../en/html_node/Formatting-Code.html")
-   (redirect "/manual/html_node/Certificate-Services.html" "../en/html_node/Certificate-Services.html")
-   (redirect "/manual/html_node/Invoking-guix-copy.html" "../en/html_node/Invoking-guix-copy.html")
-   (redirect "/manual/html_node/Package-Modules.html" "../en/html_node/Package-Modules.html")
-   (redirect "/manual/html_node/Proxy-Settings.html" "../en/html_node/Proxy-Settings.html")
-   (redirect "/manual/html_node/locales_002dand_002dlocpath.html" "../en/html_node/locales_002dand_002dlocpath.html")
-   (redirect "/manual/html_node/Substitute-Server-Authorization.html" "../en/html_node/Substitute-Server-Authorization.html")
-   (redirect "/manual/html_node/Setuid-Programs.html" "../en/html_node/Setuid-Programs.html")
-   (redirect "/manual/html_node/Bootstrapping.html" "../en/html_node/Bootstrapping.html")
-   (redirect "/manual/html_node/Defining-Services.html" "../en/html_node/Defining-Services.html")
-   (redirect "/manual/html_node/pam_002dlimits_002dservice.html" "../en/html_node/pam_002dlimits_002dservice.html")
-   (redirect "/manual/html_node/Desktop-Services.html" "../en/html_node/Desktop-Services.html")
-   (redirect "/manual/html_node/Utilities.html" "../en/html_node/Utilities.html")
-   (redirect "/manual/html_node/Services.html" "../en/html_node/Services.html")
-   (redirect "/manual/html_node/Limitations.html" "../en/html_node/Limitations.html")
-   (redirect "/manual/html_node/Invoking-guix-size.html" "../en/html_node/Invoking-guix-size.html")
-   (redirect "/manual/html_node/Shepherd-Services.html" "../en/html_node/Shepherd-Services.html")
-   (redirect "/manual/html_node/system_002dshepherd_002dgraph.html" "../en/html_node/system_002dshepherd_002dgraph.html")
-   (redirect "/manual/html_node/Invoking-guix-environment.html" "../en/html_node/Invoking-guix-environment.html")
-   (redirect "/manual/html_node/Invoking-guix-publish.html" "../en/html_node/Invoking-guix-publish.html")
-   (redirect "/manual/html_node/Log-Rotation.html" "../en/html_node/Log-Rotation.html")
-   (redirect "/manual/html_node/Building-from-Git.html" "../en/html_node/Building-from-Git.html")
-   (redirect "/manual/html_node/Defining-Packages.html" "../en/html_node/Defining-Packages.html")
-   (redirect "/manual/html_node/DNS-Services.html" "../en/html_node/DNS-Services.html")
-   (redirect "/manual/html_node/Bootloader-Configuration.html" "../en/html_node/Bootloader-Configuration.html")
-   (redirect "/manual/html_node/Invoking-guix-challenge.html" "../en/html_node/Invoking-guix-challenge.html")
-   (redirect "/manual/html_node/nginx_002dlocation_002dconfiguration-body.html" "../en/html_node/nginx_002dlocation_002dconfiguration-body.html")
-   (redirect "/manual/html_node/Proceeding-with-the-Installation.html" "../en/html_node/Proceeding-with-the-Installation.html")
-   (redirect "/manual/html_node/Initial-RAM-Disk.html" "../en/html_node/Initial-RAM-Disk.html")
-   (redirect "/manual/html_node/syslog_002dservice.html" "../en/html_node/syslog_002dservice.html")
-   (redirect "/manual/html_node/Preparing-for-Installation.html" "../en/html_node/Preparing-for-Installation.html")
-   (redirect "/manual/html_node/Application-Setup.html" "../en/html_node/Application-Setup.html")
-   (redirect "/manual/html_node/Service-Composition.html" "../en/html_node/Service-Composition.html")
-   (redirect "/manual/html_node/Packages-with-Multiple-Outputs.html" "../en/html_node/Packages-with-Multiple-Outputs.html")
-   (redirect "/manual/html_node/Submitting-Patches.html" "../en/html_node/Submitting-Patches.html")
-   (redirect "/manual/html_node/Substitution-Failure.html" "../en/html_node/Substitution-Failure.html")
-   (redirect "/manual/html_node/Porting.html" "../en/html_node/Porting.html")
-   (redirect "/manual/html_node/Web-Services.html" "../en/html_node/Web-Services.html")
-   (redirect "/manual/html_node/Build-Systems.html" "../en/html_node/Build-Systems.html")
-   (redirect "/manual/html_node/Python-Modules.html" "../en/html_node/Python-Modules.html")
-   (redirect "/manual/html_node/On-Trusting-Binaries.html" "../en/html_node/On-Trusting-Binaries.html")
-   (redirect "/manual/html_node/Synopses-and-Descriptions.html" "../en/html_node/Synopses-and-Descriptions.html")
-   (redirect "/manual/html_node/Invoking-guix-archive.html" "../en/html_node/Invoking-guix-archive.html")
-   (redirect "/manual/html_node/Package-Transformation-Options.html" "../en/html_node/Package-Transformation-Options.html")
-   (redirect "/manual/html_node/Perl-Modules.html" "../en/html_node/Perl-Modules.html")
-   (redirect "/manual/html_node/Base-Services.html" "../en/html_node/Base-Services.html")
-   (redirect "/manual/html_node/origin-Reference.html" "../en/html_node/origin-Reference.html")
-   (redirect "/manual/html_node/Substitute-Authentication.html" "../en/html_node/Substitute-Authentication.html")
-   (redirect "/manual/html_node/Service-Reference.html" "../en/html_node/Service-Reference.html")
-   (redirect "/manual/html_node/system_002dextension_002dgraph.html" "../en/html_node/system_002dextension_002dgraph.html")
-   (redirect "/manual/html_node/Installing-Debugging-Files.html" "../en/html_node/Installing-Debugging-Files.html")
-   (redirect "/manual/html_node/Official-Substitute-Server.html" "../en/html_node/Official-Substitute-Server.html")
-   (redirect "/manual/html_node/Scheduled-Job-Execution.html" "../en/html_node/Scheduled-Job-Execution.html")
-   (redirect "/manual/html_node/Package-Management.html" "../en/html_node/Package-Management.html")
-   (redirect "/manual/html_node/Networking-Services.html" "../en/html_node/Networking-Services.html")
+   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd")
+   (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/$lang/blog/2015/gnu-guix-welcomes-three-students-for-gsoc")
+   (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/$lang/blog/2015/gnu-guix-recruits-for-gsoc")
+   (redirect "/news/one-week-to-fosdem.html" "/$lang/blog/2014/one-week-to-fosdem")
+   (redirect "/news/gnu-dmd-02-released.html" "/$lang/blog/2014/gnu-dmd-02-released")
+   (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/$lang/blog/2014/emacs-as-a-general-purpose-package-manager")
+   (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/$lang/blog/2017/join-gnu-guix-for-gsoc-2017")
+   (redirect "/news/gnu-guix-05-released.html" "/$lang/blog/2013/gnu-guix-05-released")
+   (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/$lang/blog/2014/guix-at-the-2014-gnu-hackers-meeting")
+   (redirect "/news/state-of-aarch64-on-guix.html" "/$lang/blog/2017/state-of-aarch64-on-guix")
+   (redirect "/news/coming-events.html" "/$lang/blog/2017/coming-events")
+   (redirect "/news/gnu-dmd-01-released.html" "/$lang/blog/2013/gnu-dmd-01-released")
+   (redirect "/news/announcing-guix-hpc.html" "/$lang/blog/2017/announcing-guix-hpc")
+   (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/$lang/blog/2014/gnu-guix-looks-for-gsoc-students")
+   (redirect "/news/guix-at-the-european-lisp-symposium.html" "/$lang/blog/2013/guix-at-the-european-lisp-symposium")
+   (redirect "/news/gnu-guix-08-released.html" "/$lang/blog/2014/gnu-guix-08-released")
+   (redirect "/news/gnu-guix-090-released.html" "/$lang/blog/2015/gnu-guix-090-released")
+   (redirect "/news/index.html" "/$lang/blog/")
+   (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/$lang/blog/2016/gnu-guix-welcomes-four-students-for-gsoc")
+   (redirect "/news/gnu-guix-081-released.html" "/$lang/blog/2015/gnu-guix-081-released")
+   (redirect "/news/timely-delivery-of-security-updates.html" "/$lang/blog/2016/timely-delivery-of-security-updates")
+   (redirect "/news/guix-at-openbio-codefest-2014.html" "/$lang/blog/2014/guix-at-openbio-codefest-2014")
+   (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/$lang/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th")
+   (redirect "/news/gnu-guix-at-fosdem.html" "/$lang/blog/2015/gnu-guix-at-fosdem")
+   (redirect "/news/gnu-guix-082-released.html" "/$lang/blog/2015/gnu-guix-082-released")
+   (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/$lang/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th")
+   (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/$lang/blog/2013/back-from-the-gnu-hackers-meeting")
+   (redirect "/news/reproducible-build-summit-2nd-edition.html" "/$lang/blog/2016/reproducible-build-summit-2nd-edition")
+   (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/$lang/blog/2015/gnu-guix-talk-in-rennes-france-november-9th")
+   (redirect "/news/gnu-guix-01-released.html" "/$lang/blog/2013/gnu-guix-01-released")
+   (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/$lang/blog/2015/guix-tox-talk-at-pyconfr-october-17th")
+   (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/$lang/blog/2017/gnu-guix-and-guixsd-0.13.0-released")
+   (redirect "/news/guix-gets-cross-compilation-support.html" "/$lang/blog/2013/guix-gets-cross-compilation-support")
+   (redirect "/news/gnu-guix-06-released.html" "/$lang/blog/2014/gnu-guix-06-released")
+   (redirect "/news/meet-guix-at-fosdem.html" "/$lang/blog/2016/meet-guix-at-fosdem")
+   (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/$lang/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix")
+   (redirect "/news/container-provisioning-with-guix.html" "/$lang/blog/2015/container-provisioning-with-guix")
+   (redirect "/news/guixsd-system-tests.html" "/$lang/blog/2016/guixsd-system-tests")
+   (redirect "/news/gnu-guix--guixsd-0100-released.html" "/$lang/blog/2016/gnu-guix--guixsd-0100-released")
+   (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0110-released")
+   (redirect "/news/boot-to-guile.html" "/$lang/blog/2013/boot-to-guile")
+   (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/$lang/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th")
+   (redirect "/news/running-system-services-in-containers.html" "/$lang/blog/2017/running-system-services-in-containers")
+   (redirect "/news/growing-our-build-farm.html" "/$lang/blog/2016/growing-our-build-farm")
+   (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/$lang/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips")
+   (redirect "/news/guix-at-libreplanet-2016.html" "/$lang/blog/2016/guix-at-libreplanet-2016")
+   (redirect "/news/guix--gsoc.html" "/$lang/blog/2013/guix--gsoc")
+   (redirect "/news/service-composition-in-guixsd.html" "/$lang/blog/2015/service-composition-in-guixsd")
+   (redirect "/news/creating-bundles-with-guix-pack.html" "/$lang/blog/2017/creating-bundles-with-guix-pack")
+   (redirect "/news/back-from-the-european-lisp-symposium.html" "/$lang/blog/2013/back-from-the-european-lisp-symposium")
+   (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/$lang/blog/2013/gnu-guix-04-released-happy-birthday-gnu")
+   (redirect "/news/reproducible-builds-a-status-update.html" "/$lang/blog/2017/reproducible-builds-a-status-update")
+   (redirect "/news/gnu-guix-083-released.html" "/$lang/blog/2015/gnu-guix-083-released")
+   (redirect "/news/join-gnu-guix-for-gsoc.html" "/$lang/blog/2016/join-gnu-guix-for-gsoc")
+   (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0120-released")
+   (redirect "/news/meet-guix-at-fosdem-2017.html" "/$lang/blog/2017/meet-guix-at-fosdem-2017")
+   (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/$lang/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29")
+   (redirect "/news/gnome-in-guixsd.html" "/$lang/blog/2016/gnome-in-guixsd")
+   (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/$lang/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu")
+   (redirect "/news/gnu-guix-03-released.html" "/$lang/blog/2013/gnu-guix-03-released")
+   (redirect "/news/gnu-guix-07-released.html" "/$lang/blog/2014/gnu-guix-07-released")
+   (redirect "/news/gsoc-update.html" "/$lang/blog/2015/gsoc-update")
+   (redirect "/news/gnu-guix-02-released.html" "/$lang/blog/2013/gnu-guix-02-released")
+   (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/$lang/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf")
+   (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/$lang/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year")
+   (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/$lang/blog/2015/reproducible-builds-a-means-to-an-end")
+   (redirect "/manual/html_node/Substitutes.html" "/manual/en/html_node/Substitutes.html")
+   (redirect "/manual/html_node/GNU-Free-Documentation-License.html" "/manual/en/html_node/GNU-Free-Documentation-License.html")
+   (redirect "/manual/html_node/The-Store-Monad.html" "/manual/en/html_node/The-Store-Monad.html")
+   (redirect "/manual/html_node/Running-Guix-Before-It-Is-Installed.html" "/manual/en/html_node/Running-Guix-Before-It-Is-Installed.html")
+   (redirect "/manual/html_node/rngd_002dservice.html" "/manual/en/html_node/rngd_002dservice.html")
+   (redirect "/manual/html_node/Data-Types-and-Pattern-Matching.html" "/manual/en/html_node/Data-Types-and-Pattern-Matching.html")
+   (redirect "/manual/html_node/Version-Numbers.html" "/manual/en/html_node/Version-Numbers.html")
+   (redirect "/manual/html_node/The-Perfect-Setup.html" "/manual/en/html_node/The-Perfect-Setup.html")
+   (redirect "/manual/html_node/G_002dExpressions.html" "/manual/en/html_node/G_002dExpressions.html")
+   (redirect "/manual/html_node/Programming-Paradigm.html" "/manual/en/html_node/Programming-Paradigm.html")
+   (redirect "/manual/html_node/Installing-GuixSD-in-a-VM.html" "/manual/en/html_node/Installing-GuixSD-in-a-VM.html")
+   (redirect "/manual/html_node/syslog_002dconfiguration_002dtype.html" "/manual/en/html_node/syslog_002dconfiguration_002dtype.html")
+   (redirect "/manual/html_node/Running-the-Test-Suite.html" "/manual/en/html_node/Running-the-Test-Suite.html")
+   (redirect "/manual/html_node/Coding-Style.html" "/manual/en/html_node/Coding-Style.html")
+   (redirect "/manual/html_node/Version-Control-Services.html" "/manual/en/html_node/Version-Control-Services.html")
+   (redirect "/manual/html_node/client_002dsubstitute_002durls.html" "/manual/en/html_node/client_002dsubstitute_002durls.html")
+   (redirect "/manual/html_node/Database-Services.html" "/manual/en/html_node/Database-Services.html")
+   (redirect "/manual/html_node/Invoking-guix-download.html" "/manual/en/html_node/Invoking-guix-download.html")
+   (redirect "/manual/html_node/Documentation.html" "/manual/en/html_node/Documentation.html")
+   (redirect "/manual/html_node/Package-Naming.html" "/manual/en/html_node/Package-Naming.html")
+   (redirect "/manual/html_node/Invoking-guix-hash.html" "/manual/en/html_node/Invoking-guix-hash.html")
+   (redirect "/manual/html_node/Audio-Services.html" "/manual/en/html_node/Audio-Services.html")
+   (redirect "/manual/html_node/Mapped-Devices.html" "/manual/en/html_node/Mapped-Devices.html")
+   (redirect "/manual/html_node/operating_002dsystem-Reference.html" "/manual/en/html_node/operating_002dsystem-Reference.html")
+   (redirect "/manual/html_node/Security-Updates.html" "/manual/en/html_node/Security-Updates.html")
+   (redirect "/manual/html_node/Java-Packages.html" "/manual/en/html_node/Java-Packages.html")
+   (redirect "/manual/html_node/user_002daccount_002dpassword.html" "/manual/en/html_node/user_002daccount_002dpassword.html")
+   (redirect "/manual/html_node/System-Installation.html" "/manual/en/html_node/System-Installation.html")
+   (redirect "/manual/html_node/Installation.html" "/manual/en/html_node/Installation.html")
+   (redirect "/manual/html_node/Modules.html" "/manual/en/html_node/Modules.html")
+   (redirect "/manual/html_node/File-Systems.html" "/manual/en/html_node/File-Systems.html")
+   (redirect "/manual/html_node/Invoking-guix-gc.html" "/manual/en/html_node/Invoking-guix-gc.html")
+   (redirect "/manual/html_node/package_002dpropagated_002dinputs.html" "/manual/en/html_node/package_002dpropagated_002dinputs.html")
+   (redirect "/manual/html_node/Invoking-guix-lint.html" "/manual/en/html_node/Invoking-guix-lint.html")
+   (redirect "/manual/html_node/Invoking-guix-pull.html" "/manual/en/html_node/Invoking-guix-pull.html")
+   (redirect "/manual/html_node/Invoking-guix_002ddaemon.html" "/manual/en/html_node/Invoking-guix_002ddaemon.html")
+   (redirect "/manual/html_node/Locales.html" "/manual/en/html_node/Locales.html")
+   (redirect "/manual/html_node/Using-the-Configuration-System.html" "/manual/en/html_node/Using-the-Configuration-System.html")
+   (redirect "/manual/html_node/X_002e509-Certificates.html" "/manual/en/html_node/X_002e509-Certificates.html")
+   (redirect "/manual/html_node/guix_002dconfiguration_002dtype.html" "/manual/en/html_node/guix_002dconfiguration_002dtype.html")
+   (redirect "/manual/html_node/USB-Stick-and-DVD-Installation.html" "/manual/en/html_node/USB-Stick-and-DVD-Installation.html")
+   (redirect "/manual/html_node/Software-Freedom.html" "/manual/en/html_node/Software-Freedom.html")
+   (redirect "/manual/html_node/Building-the-Installation-Image.html" "/manual/en/html_node/Building-the-Installation-Image.html")
+   (redirect "/manual/html_node/Running-GuixSD-in-a-VM.html" "/manual/en/html_node/Running-GuixSD-in-a-VM.html")
+   (redirect "/manual/html_node/Debugging-Build-Failures.html" "/manual/en/html_node/Debugging-Build-Failures.html")
+   (redirect "/manual/html_node/daemon_002dsubstitute_002durls.html" "/manual/en/html_node/daemon_002dsubstitute_002durls.html")
+   (redirect "/manual/html_node/Virtualization-Services.html" "/manual/en/html_node/Virtualization-Services.html")
+   (redirect "/manual/html_node/Fonts.html" "/manual/en/html_node/Fonts.html")
+   (redirect "/manual/html_node/Monitoring-Services.html" "/manual/en/html_node/Monitoring-Services.html")
+   (redirect "/manual/html_node/Binary-Installation.html" "/manual/en/html_node/Binary-Installation.html")
+   (redirect "/manual/html_node/Messaging-Services.html" "/manual/en/html_node/Messaging-Services.html")
+   (redirect "/manual/html_node/X-Window.html" "/manual/en/html_node/X-Window.html")
+   (redirect "/manual/html_node/Service-Types-and-Services.html" "/manual/en/html_node/Service-Types-and-Services.html")
+   (redirect "/manual/html_node/Introduction.html" "/manual/en/html_node/Introduction.html")
+   (redirect "/manual/html_node/Hardware-Considerations.html" "/manual/en/html_node/Hardware-Considerations.html")
+   (redirect "/manual/html_node/System-Configuration.html" "/manual/en/html_node/System-Configuration.html")
+   (redirect "/manual/html_node/VPN-Services.html" "/manual/en/html_node/VPN-Services.html")
+   (redirect "/manual/html_node/Invoking-guix-system.html" "/manual/en/html_node/Invoking-guix-system.html")
+   (redirect "/manual/html_node/index.html" "/manual/en/html_node/index.html")
+   (redirect "/manual/html_node/package-Reference.html" "/manual/en/html_node/package-Reference.html")
+   (redirect "/manual/html_node/Sending-a-Patch-Series.html" "/manual/en/html_node/Sending-a-Patch-Series.html")
+   (redirect "/manual/html_node/package_002dcmd_002dpropagated_002dinputs.html" "/manual/en/html_node/package_002dcmd_002dpropagated_002dinputs.html")
+   (redirect "/manual/html_node/Invoking-guix-refresh.html" "/manual/en/html_node/Invoking-guix-refresh.html")
+   (redirect "/manual/html_node/GNU-Distribution.html" "/manual/en/html_node/GNU-Distribution.html")
+   (redirect "/manual/html_node/Name-Service-Switch.html" "/manual/en/html_node/Name-Service-Switch.html")
+   (redirect "/manual/html_node/The-Store.html" "/manual/en/html_node/The-Store.html")
+   (redirect "/manual/html_node/Common-Build-Options.html" "/manual/en/html_node/Common-Build-Options.html")
+   (redirect "/manual/html_node/Invoking-guix-import.html" "/manual/en/html_node/Invoking-guix-import.html")
+   (redirect "/manual/html_node/Invoking-guix-edit.html" "/manual/en/html_node/Invoking-guix-edit.html")
+   (redirect "/manual/html_node/Network-File-System.html" "/manual/en/html_node/Network-File-System.html")
+   (redirect "/manual/html_node/Miscellaneous-Services.html" "/manual/en/html_node/Miscellaneous-Services.html")
+   (redirect "/manual/html_node/Daemon-Offload-Setup.html" "/manual/en/html_node/Daemon-Offload-Setup.html")
+   (redirect "/manual/html_node/Features.html" "/manual/en/html_node/Features.html")
+   (redirect "/manual/html_node/guix_002dpublish_002dservice_002dtype.html" "/manual/en/html_node/guix_002dpublish_002dservice_002dtype.html")
+   (redirect "/manual/html_node/Invoking-guix-pack.html" "/manual/en/html_node/Invoking-guix-pack.html")
+   (redirect "/manual/html_node/Contributing.html" "/manual/en/html_node/Contributing.html")
+   (redirect "/manual/html_node/fallback_002doption.html" "/manual/en/html_node/fallback_002doption.html")
+   (redirect "/manual/html_node/Power-management-Services.html" "/manual/en/html_node/Power-Management-Services.html")
+   (redirect "/manual/html_node/build_002dcheck.html" "/manual/en/html_node/build_002dcheck.html")
+   (redirect "/manual/html_node/Invoking-guix-package.html" "/manual/en/html_node/Invoking-guix-package.html")
+   (redirect "/manual/html_node/Mail-Services.html" "/manual/en/html_node/Mail-Services.html")
+   (redirect "/manual/html_node/Concept-Index.html" "/manual/en/html_node/Concept-Index.html")
+   (redirect "/manual/html_node/Build-Environment-Setup.html" "/manual/en/html_node/Build-Environment-Setup.html")
+   (redirect "/manual/html_node/Printing-Services.html" "/manual/en/html_node/Printing-Services.html")
+   (redirect "/manual/html_node/Invoking-guix-build.html" "/manual/en/html_node/Invoking-guix-build.html")
+   (redirect "/manual/html_node/Programming-Interface.html" "/manual/en/html_node/Programming-Interface.html")
+   (redirect "/manual/html_node/profile_002dmanifest.html" "/manual/en/html_node/profile_002dmanifest.html")
+   (redirect "/manual/html_node/Packaging-Guidelines.html" "/manual/en/html_node/Packaging-Guidelines.html")
+   (redirect "/manual/html_node/Kerberos-Services.html" "/manual/en/html_node/Kerberos-Services.html")
+   (redirect "/manual/html_node/Invoking-guix-graph.html" "/manual/en/html_node/Invoking-guix-graph.html")
+   (redirect "/manual/html_node/Invoking-guix-container.html" "/manual/en/html_node/Invoking-guix-container.html")
+   (redirect "/manual/html_node/Derivations.html" "/manual/en/html_node/Derivations.html")
+   (redirect "/manual/html_node/Programming-Index.html" "/manual/en/html_node/Programming-Index.html")
+   (redirect "/manual/html_node/Setting-Up-the-Daemon.html" "/manual/en/html_node/Setting-Up-the-Daemon.html")
+   (redirect "/manual/html_node/Continuous-Integration.html" "/manual/en/html_node/Continuous-Integration.html")
+   (redirect "/manual/html_node/User-Accounts.html" "/manual/en/html_node/User-Accounts.html")
+   (redirect "/manual/html_node/guix-system-vm.html" "/manual/en/html_node/guix-system-vm.html")
+   (redirect "/manual/html_node/Invoking-guix-weather.html" "/manual/en/html_node/Invoking-guix-weather.html")
+   (redirect "/manual/html_node/USB-Stick-Installation.html" "/manual/en/html_node/USB-Stick-Installation.html")
+   (redirect "/manual/html_node/Telephony-Services.html" "/manual/en/html_node/Telephony-Services.html")
+   (redirect "/manual/html_node/Additional-Build-Options.html" "/manual/en/html_node/Additional-Build-Options.html")
+   (redirect "/manual/html_node/Requirements.html" "/manual/en/html_node/Requirements.html")
+   (redirect "/manual/html_node/Acknowledgments.html" "/manual/en/html_node/Acknowledgments.html")
+   (redirect "/manual/html_node/Formatting-Code.html" "/manual/en/html_node/Formatting-Code.html")
+   (redirect "/manual/html_node/Certificate-Services.html" "/manual/en/html_node/Certificate-Services.html")
+   (redirect "/manual/html_node/Invoking-guix-copy.html" "/manual/en/html_node/Invoking-guix-copy.html")
+   (redirect "/manual/html_node/Package-Modules.html" "/manual/en/html_node/Package-Modules.html")
+   (redirect "/manual/html_node/Proxy-Settings.html" "/manual/en/html_node/Proxy-Settings.html")
+   (redirect "/manual/html_node/locales_002dand_002dlocpath.html" "/manual/en/html_node/locales_002dand_002dlocpath.html")
+   (redirect "/manual/html_node/Substitute-Server-Authorization.html" "/manual/en/html_node/Substitute-Server-Authorization.html")
+   (redirect "/manual/html_node/Setuid-Programs.html" "/manual/en/html_node/Setuid-Programs.html")
+   (redirect "/manual/html_node/Bootstrapping.html" "/manual/en/html_node/Bootstrapping.html")
+   (redirect "/manual/html_node/Defining-Services.html" "/manual/en/html_node/Defining-Services.html")
+   (redirect "/manual/html_node/pam_002dlimits_002dservice.html" "/manual/en/html_node/pam_002dlimits_002dservice.html")
+   (redirect "/manual/html_node/Desktop-Services.html" "/manual/en/html_node/Desktop-Services.html")
+   (redirect "/manual/html_node/Utilities.html" "/manual/en/html_node/Utilities.html")
+   (redirect "/manual/html_node/Services.html" "/manual/en/html_node/Services.html")
+   (redirect "/manual/html_node/Limitations.html" "/manual/en/html_node/Limitations.html")
+   (redirect "/manual/html_node/Invoking-guix-size.html" "/manual/en/html_node/Invoking-guix-size.html")
+   (redirect "/manual/html_node/Shepherd-Services.html" "/manual/en/html_node/Shepherd-Services.html")
+   (redirect "/manual/html_node/system_002dshepherd_002dgraph.html" "/manual/en/html_node/system_002dshepherd_002dgraph.html")
+   (redirect "/manual/html_node/Invoking-guix-environment.html" "/manual/en/html_node/Invoking-guix-environment.html")
+   (redirect "/manual/html_node/Invoking-guix-publish.html" "/manual/en/html_node/Invoking-guix-publish.html")
+   (redirect "/manual/html_node/Log-Rotation.html" "/manual/en/html_node/Log-Rotation.html")
+   (redirect "/manual/html_node/Building-from-Git.html" "/manual/en/html_node/Building-from-Git.html")
+   (redirect "/manual/html_node/Defining-Packages.html" "/manual/en/html_node/Defining-Packages.html")
+   (redirect "/manual/html_node/DNS-Services.html" "/manual/en/html_node/DNS-Services.html")
+   (redirect "/manual/html_node/Bootloader-Configuration.html" "/manual/en/html_node/Bootloader-Configuration.html")
+   (redirect "/manual/html_node/Invoking-guix-challenge.html" "/manual/en/html_node/Invoking-guix-challenge.html")
+   (redirect "/manual/html_node/nginx_002dlocation_002dconfiguration-body.html" "/manual/en/html_node/nginx_002dlocation_002dconfiguration-body.html")
+   (redirect "/manual/html_node/Proceeding-with-the-Installation.html" "/manual/en/html_node/Proceeding-with-the-Installation.html")
+   (redirect "/manual/html_node/Initial-RAM-Disk.html" "/manual/en/html_node/Initial-RAM-Disk.html")
+   (redirect "/manual/html_node/syslog_002dservice.html" "/manual/en/html_node/syslog_002dservice.html")
+   (redirect "/manual/html_node/Preparing-for-Installation.html" "/manual/en/html_node/Preparing-for-Installation.html")
+   (redirect "/manual/html_node/Application-Setup.html" "/manual/en/html_node/Application-Setup.html")
+   (redirect "/manual/html_node/Service-Composition.html" "/manual/en/html_node/Service-Composition.html")
+   (redirect "/manual/html_node/Packages-with-Multiple-Outputs.html" "/manual/en/html_node/Packages-with-Multiple-Outputs.html")
+   (redirect "/manual/html_node/Submitting-Patches.html" "/manual/en/html_node/Submitting-Patches.html")
+   (redirect "/manual/html_node/Substitution-Failure.html" "/manual/en/html_node/Substitution-Failure.html")
+   (redirect "/manual/html_node/Porting.html" "/manual/en/html_node/Porting.html")
+   (redirect "/manual/html_node/Web-Services.html" "/manual/en/html_node/Web-Services.html")
+   (redirect "/manual/html_node/Build-Systems.html" "/manual/en/html_node/Build-Systems.html")
+   (redirect "/manual/html_node/Python-Modules.html" "/manual/en/html_node/Python-Modules.html")
+   (redirect "/manual/html_node/On-Trusting-Binaries.html" "/manual/en/html_node/On-Trusting-Binaries.html")
+   (redirect "/manual/html_node/Synopses-and-Descriptions.html" "/manual/en/html_node/Synopses-and-Descriptions.html")
+   (redirect "/manual/html_node/Invoking-guix-archive.html" "/manual/en/html_node/Invoking-guix-archive.html")
+   (redirect "/manual/html_node/Package-Transformation-Options.html" "/manual/en/html_node/Package-Transformation-Options.html")
+   (redirect "/manual/html_node/Perl-Modules.html" "/manual/en/html_node/Perl-Modules.html")
+   (redirect "/manual/html_node/Base-Services.html" "/manual/en/html_node/Base-Services.html")
+   (redirect "/manual/html_node/origin-Reference.html" "/manual/en/html_node/origin-Reference.html")
+   (redirect "/manual/html_node/Substitute-Authentication.html" "/manual/en/html_node/Substitute-Authentication.html")
+   (redirect "/manual/html_node/Service-Reference.html" "/manual/en/html_node/Service-Reference.html")
+   (redirect "/manual/html_node/system_002dextension_002dgraph.html" "/manual/en/html_node/system_002dextension_002dgraph.html")
+   (redirect "/manual/html_node/Installing-Debugging-Files.html" "/manual/en/html_node/Installing-Debugging-Files.html")
+   (redirect "/manual/html_node/Official-Substitute-Server.html" "/manual/en/html_node/Official-Substitute-Server.html")
+   (redirect "/manual/html_node/Scheduled-Job-Execution.html" "/manual/en/html_node/Scheduled-Job-Execution.html")
+   (redirect "/manual/html_node/Package-Management.html" "/manual/en/html_node/Package-Management.html")
+   (redirect "/manual/html_node/Networking-Services.html" "/manual/en/html_node/Networking-Services.html")
    (redirect "/manual/html_node" "en/html_node")
    (redirect "/manual/guix.html" "en/guix.html")
    (redirect "/manual/en/html_node/Installing-GuixSD-in-a-VM.html" "Installing-Guix-in-a-VM.html")
    (redirect "/manual/en/html_node/Running-GuixSD-in-a-VM.html"
              "Running-Guix-in-a-VM.html")
+   ;; Old URLs not ending in a slash like https://guix.gnu.org/graphics.
+   (redirect "/about" "/$lang/about/")
+   (redirect "/blog" "/$lang/blog/")
+   (redirect "/blog/2006/purely-functional-software-deployment-model" "/$lang/blog/2006/purely-functional-software-deployment-model/")
+   (redirect "/blog/2012/functional-package-management-for-the-people" "/$lang/blog/2012/functional-package-management-for-the-people/")
+   (redirect "/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu" "/$lang/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu/")
+   (redirect "/blog/2013/back-from-the-european-lisp-symposium" "/$lang/blog/2013/back-from-the-european-lisp-symposium/")
+   (redirect "/blog/2013/back-from-the-gnu-hackers-meeting" "/$lang/blog/2013/back-from-the-gnu-hackers-meeting/")
+   (redirect "/blog/2013/boot-to-guile" "/$lang/blog/2013/boot-to-guile/")
+   (redirect "/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips" "/$lang/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips/")
+   (redirect "/blog/2013/gnu-dmd-01-released" "/$lang/blog/2013/gnu-dmd-01-released/")
+   (redirect "/blog/2013/gnu-guix-01-released" "/$lang/blog/2013/gnu-guix-01-released/")
+   (redirect "/blog/2013/gnu-guix-02-released" "/$lang/blog/2013/gnu-guix-02-released/")
+   (redirect "/blog/2013/gnu-guix-03-released" "/$lang/blog/2013/gnu-guix-03-released/")
+   (redirect "/blog/2013/gnu-guix-04-released-happy-birthday-gnu" "/$lang/blog/2013/gnu-guix-04-released-happy-birthday-gnu/")
+   (redirect "/blog/2013/gnu-guix-05-released" "/$lang/blog/2013/gnu-guix-05-released/")
+   (redirect "/blog/2013/guix-at-the-european-lisp-symposium" "/$lang/blog/2013/guix-at-the-european-lisp-symposium/")
+   (redirect "/blog/2013/guix-gets-cross-compilation-support" "/$lang/blog/2013/guix-gets-cross-compilation-support/")
+   (redirect "/blog/2013/guix--gsoc" "/$lang/blog/2013/guix--gsoc/")
+   (redirect "/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29" "/$lang/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29/")
+   (redirect "/blog/2014/emacs-as-a-general-purpose-package-manager" "/$lang/blog/2014/emacs-as-a-general-purpose-package-manager/")
+   (redirect "/blog/2014/gnu-dmd-02-released" "/$lang/blog/2014/gnu-dmd-02-released/")
+   (redirect "/blog/2014/gnu-guix-06-released" "/$lang/blog/2014/gnu-guix-06-released/")
+   (redirect "/blog/2014/gnu-guix-07-released" "/$lang/blog/2014/gnu-guix-07-released/")
+   (redirect "/blog/2014/gnu-guix-08-released" "/$lang/blog/2014/gnu-guix-08-released/")
+   (redirect "/blog/2014/gnu-guix-looks-for-gsoc-students" "/$lang/blog/2014/gnu-guix-looks-for-gsoc-students/")
+   (redirect "/blog/2014/guix-at-openbio-codefest-2014" "/$lang/blog/2014/guix-at-openbio-codefest-2014/")
+   (redirect "/blog/2014/guix-at-the-2014-gnu-hackers-meeting" "/$lang/blog/2014/guix-at-the-2014-gnu-hackers-meeting/")
+   (redirect "/blog/2014/join-us-for-a-guix-hackathon-on-sep-27-28" "/$lang/blog/2014/join-us-for-a-guix-hackathon-on-sep-27-28/")
+   (redirect "/blog/2014/one-week-to-fosdem" "/$lang/blog/2014/one-week-to-fosdem/")
+   (redirect "/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th" "/$lang/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th/")
+   (redirect "/blog/2015/container-provisioning-with-guix" "/$lang/blog/2015/container-provisioning-with-guix/")
+   (redirect "/blog/2015/gnu-guix-081-released" "/$lang/blog/2015/gnu-guix-081-released/")
+   (redirect "/blog/2015/gnu-guix-082-released" "/$lang/blog/2015/gnu-guix-082-released/")
+   (redirect "/blog/2015/gnu-guix-083-released" "/$lang/blog/2015/gnu-guix-083-released/")
+   (redirect "/blog/2015/gnu-guix-090-released" "/$lang/blog/2015/gnu-guix-090-released/")
+   (redirect "/blog/2015/gnu-guix-at-fosdem" "/$lang/blog/2015/gnu-guix-at-fosdem/")
+   (redirect "/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year" "/$lang/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year/")
+   (redirect "/blog/2015/gnu-guix-recruits-for-gsoc" "/$lang/blog/2015/gnu-guix-recruits-for-gsoc/")
+   (redirect "/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th" "/$lang/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th/")
+   (redirect "/blog/2015/gnu-guix-talk-in-rennes-france-november-9th" "/$lang/blog/2015/gnu-guix-talk-in-rennes-france-november-9th/")
+   (redirect "/blog/2015/gnu-guix-welcomes-three-students-for-gsoc" "/$lang/blog/2015/gnu-guix-welcomes-three-students-for-gsoc/")
+   (redirect "/blog/2015/gsoc-update" "/$lang/blog/2015/gsoc-update/")
+   (redirect "/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf" "/$lang/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf/")
+   (redirect "/blog/2015/guix-tox-talk-at-pyconfr-october-17th" "/$lang/blog/2015/guix-tox-talk-at-pyconfr-october-17th/")
+   (redirect "/blog/2015/porting-guix-and-guixsd" "/$lang/blog/2015/porting-guix-and-guixsd/")
+   (redirect "/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix" "/$lang/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix/")
+   (redirect "/blog/2015/reproducible-builds-a-means-to-an-end" "/$lang/blog/2015/reproducible-builds-a-means-to-an-end/")
+   (redirect "/blog/2015/service-composition-in-guixsd" "/$lang/blog/2015/service-composition-in-guixsd/")
+   (redirect "/blog/2016/back-from-cufp-2016" "/$lang/blog/2016/back-from-cufp-2016/")
+   (redirect "/blog/2016/back-from-dconf-2016" "/$lang/blog/2016/back-from-dconf-2016/")
+   (redirect "/blog/2016/back-from-gbcuw-2016" "/$lang/blog/2016/back-from-gbcuw-2016/")
+   (redirect "/blog/2016/back-from-the-gnu-hackers-meeting-2016" "/$lang/blog/2016/back-from-the-gnu-hackers-meeting-2016/")
+   (redirect "/blog/2016/back-from-the-scheme-workshop-2016" "/$lang/blog/2016/back-from-the-scheme-workshop-2016/")
+   (redirect "/blog/2016/gnome-in-guixsd" "/$lang/blog/2016/gnome-in-guixsd/")
+   (redirect "/blog/2016/gnu-guix-and-guixsd-0110-released" "/$lang/blog/2016/gnu-guix-and-guixsd-0110-released/")
+   (redirect "/blog/2016/gnu-guix-and-guixsd-0120-released" "/$lang/blog/2016/gnu-guix-and-guixsd-0120-released/")
+   (redirect "/blog/2016/gnu-guix--guixsd-0100-released" "/$lang/blog/2016/gnu-guix--guixsd-0100-released/")
+   (redirect "/blog/2016/gnu-guix-on-hacker-public-radio" "/$lang/blog/2016/gnu-guix-on-hacker-public-radio/")
+   (redirect "/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th" "/$lang/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th/")
+   (redirect "/blog/2016/gnu-guix-welcomes-four-students-for-gsoc" "/$lang/blog/2016/gnu-guix-welcomes-four-students-for-gsoc/")
+   (redirect "/blog/2016/growing-our-build-farm" "/$lang/blog/2016/growing-our-build-farm/")
+   (redirect "/blog/2016/guix-at-libreplanet-2016" "/$lang/blog/2016/guix-at-libreplanet-2016/")
+   (redirect "/blog/2016/guixsd-system-tests" "/$lang/blog/2016/guixsd-system-tests/")
+   (redirect "/blog/2016/join-gnu-guix-for-gsoc" "/$lang/blog/2016/join-gnu-guix-for-gsoc/")
+   (redirect "/blog/2016/meet-guix-at-fosdem" "/$lang/blog/2016/meet-guix-at-fosdem/")
+   (redirect "/blog/2016/reproducible-build-summit-2nd-edition" "/$lang/blog/2016/reproducible-build-summit-2nd-edition/")
+   (redirect "/blog/2016/timely-delivery-of-security-updates" "/$lang/blog/2016/timely-delivery-of-security-updates/")
+   (redirect "/blog/2017/announcing-guix-hpc" "/$lang/blog/2017/announcing-guix-hpc/")
+   (redirect "/blog/2017/back-from-bob-konferenz-2017" "/$lang/blog/2017/back-from-bob-konferenz-2017/")
+   (redirect "/blog/2017/back-from-bosc-2017" "/$lang/blog/2017/back-from-bosc-2017/")
+   (redirect "/blog/2017/back-from-fosdem-2017" "/$lang/blog/2017/back-from-fosdem-2017/")
+   (redirect "/blog/2017/back-from-gpce" "/$lang/blog/2017/back-from-gpce/")
+   (redirect "/blog/2017/back-from-rse-2017" "/$lang/blog/2017/back-from-rse-2017/")
+   (redirect "/blog/2017/coming-events" "/$lang/blog/2017/coming-events/")
+   (redirect "/blog/2017/creating-bundles-with-guix-pack" "/$lang/blog/2017/creating-bundles-with-guix-pack/")
+   (redirect "/blog/2017/gnu-guix-and-guixsd-0.13.0-released" "/$lang/blog/2017/gnu-guix-and-guixsd-0.13.0-released/")
+   (redirect "/blog/2017/gnu-guix-and-guixsd-0.14.0-released" "/$lang/blog/2017/gnu-guix-and-guixsd-0.14.0-released/")
+   (redirect "/blog/2017/join-gnu-guix-for-gsoc-2017" "/$lang/blog/2017/join-gnu-guix-for-gsoc-2017/")
+   (redirect "/blog/2017/meet-guix-at-fosdem-2017" "/$lang/blog/2017/meet-guix-at-fosdem-2017/")
+   (redirect "/blog/2017/porting-guixsd-to-armv7" "/$lang/blog/2017/porting-guixsd-to-armv7/")
+   (redirect "/blog/2017/reproducible-builds-a-status-update" "/$lang/blog/2017/reproducible-builds-a-status-update/")
+   (redirect "/blog/2017/running-system-services-in-containers" "/$lang/blog/2017/running-system-services-in-containers/")
+   (redirect "/blog/2017/state-of-aarch64-on-guix" "/$lang/blog/2017/state-of-aarch64-on-guix/")
+   (redirect "/blog/2018/aarch64-build-machines-donated" "/$lang/blog/2018/aarch64-build-machines-donated/")
+   (redirect "/blog/2018/a-packaging-tutorial-for-guix" "/$lang/blog/2018/a-packaging-tutorial-for-guix/")
+   (redirect "/blog/2018/back-from-seagl-2018" "/$lang/blog/2018/back-from-seagl-2018/")
+   (redirect "/blog/2018/bootstrapping-rust" "/$lang/blog/2018/bootstrapping-rust/")
+   (redirect "/blog/2018/customize-guixsd-use-stock-ssh-agent-everywhere" "/$lang/blog/2018/customize-guixsd-use-stock-ssh-agent-everywhere/")
+   (redirect "/blog/2018/gnu-guix-and-guixsd-0.15.0-released" "/$lang/blog/2018/gnu-guix-and-guixsd-0.15.0-released/")
+   (redirect "/blog/2018/gnu-guix-and-guixsd-0.16.0-released" "/$lang/blog/2018/gnu-guix-and-guixsd-0.16.0-released/")
+   (redirect "/blog/2018/gnu-guix-receives-donation-from-the-handshake-project" "/$lang/blog/2018/gnu-guix-receives-donation-from-the-handshake-project/")
+   (redirect "/blog/2018/gsoc-2018-report-cuirass-web-interface" "/$lang/blog/2018/gsoc-2018-report-cuirass-web-interface/")
+   (redirect "/blog/2018/guix-on-android" "/$lang/blog/2018/guix-on-android/")
+   (redirect "/blog/2018/guix--reproducible-builds-at-libreplanet-2018" "/$lang/blog/2018/guix--reproducible-builds-at-libreplanet-2018/")
+   (redirect "/blog/2018/guix-welcomes-outreachy-gsoc-and-guix-hpc-interns" "/$lang/blog/2018/guix-welcomes-outreachy-gsoc-and-guix-hpc-interns/")
+   (redirect "/blog/2018/join-gnu-guix-outreachy-gsoc" "/$lang/blog/2018/join-gnu-guix-outreachy-gsoc/")
+   (redirect "/blog/2018/join-gnu-guix-through-outreachy" "/$lang/blog/2018/join-gnu-guix-through-outreachy/")
+   (redirect "/blog/2018/meet-guix-at-fosdem-2018" "/$lang/blog/2018/meet-guix-at-fosdem-2018/")
+   (redirect "/blog/2018/multi-dimensional-transactions-and-rollbacks-oh-my" "/$lang/blog/2018/multi-dimensional-transactions-and-rollbacks-oh-my/")
+   (redirect "/blog/2018/paper-on-reproducible-bioinformatics-pipelines-with-guix" "/$lang/blog/2018/paper-on-reproducible-bioinformatics-pipelines-with-guix/")
+   (redirect "/blog/2018/reproducible-builds-summit-4th-edition" "/$lang/blog/2018/reproducible-builds-summit-4th-edition/")
+   (redirect "/blog/2018/tarballs-the-ultimate-container-image-format" "/$lang/blog/2018/tarballs-the-ultimate-container-image-format/")
+   (redirect "/blog/2018/upcoming-talk-everyday-use-of-gnu-guix" "/$lang/blog/2018/upcoming-talk-everyday-use-of-gnu-guix/")
+   (redirect "/blog/2019/connecting-reproducible-deployment-to-a-long-term-source-code-archive" "/$lang/blog/2019/connecting-reproducible-deployment-to-a-long-term-source-code-archive/")
+   (redirect "/blog/2019/creating-and-using-a-custom-linux-kernel-on-guix-system" "/$lang/blog/2019/creating-and-using-a-custom-linux-kernel-on-guix-system/")
+   (redirect "/blog/2019/documentation-video-creation" "/$lang/blog/2019/documentation-video-creation/")
+   (redirect "/blog/2019/gnu-guix-1.0.0-released" "/$lang/blog/2019/gnu-guix-1.0.0-released/")
+   (redirect "/blog/2019/gnu-guix-1.0.1-released" "/$lang/blog/2019/gnu-guix-1.0.1-released/")
+   (redirect "/blog/2019/gnu-guix-maintainer-collective-expands" "/$lang/blog/2019/gnu-guix-maintainer-collective-expands/")
+   (redirect "/blog/2019/guix-days-bootstrapping-arm" "/$lang/blog/2019/guix-days-bootstrapping-arm/")
+   (redirect "/blog/2019/guix-on-an-arm-board" "/$lang/blog/2019/guix-on-an-arm-board/")
+   (redirect "/blog/2019/guix-profiles-in-practice" "/$lang/blog/2019/guix-profiles-in-practice/")
+   (redirect "/blog/2019/guix-reduces-bootstrap-seed-by-50" "/$lang/blog/2019/guix-reduces-bootstrap-seed-by-50/")
+   (redirect "/blog/2019/insecure-permissions-on-profile-directory-cve-2019-18192" "/$lang/blog/2019/insecure-permissions-on-profile-directory-cve-2019-18192/")
+   (redirect "/blog/2019/join-gnu-guix-through-outreachy" "/$lang/blog/2019/join-gnu-guix-through-outreachy/")
+   (redirect "/blog/2019/joint-statement-on-the-gnu-project" "/$lang/blog/2019/joint-statement-on-the-gnu-project/")
+   (redirect "/blog/2019/managing-servers-with-gnu-guix-a-tutorial" "/$lang/blog/2019/managing-servers-with-gnu-guix-a-tutorial/")
+   (redirect "/blog/2019/meet-guix-at-fosdem-2019" "/$lang/blog/2019/meet-guix-at-fosdem-2019/")
+   (redirect "/blog/2019/qa-on-non-intel-at-guix-days" "/$lang/blog/2019/qa-on-non-intel-at-guix-days/")
+   (redirect "/blog/2019/reproducible-builds-summit-5th-edition" "/$lang/blog/2019/reproducible-builds-summit-5th-edition/")
+   (redirect "/blog/2019/running-a-guix-xfce-desktop-on-centos-7" "/$lang/blog/2019/running-a-guix-xfce-desktop-on-centos-7/")
+   (redirect "/blog/2019/spreading-the-news" "/$lang/blog/2019/spreading-the-news/")
+   (redirect "/blog/2019/substitutes-are-now-available-as-lzip" "/$lang/blog/2019/substitutes-are-now-available-as-lzip/")
+   (redirect "/blog/2019/towards-guix-for-devops" "/$lang/blog/2019/towards-guix-for-devops/")
+   (redirect "/blog/2020/a-hello-world-virtual-machine-running-the-hurd" "/$lang/blog/2020/a-hello-world-virtual-machine-running-the-hurd/")
+   (redirect "/blog/2020/deprecating-support-for-the-linux-kernel" "/$lang/blog/2020/deprecating-support-for-the-linux-kernel/")
+   (redirect "/blog/2020/gnu-guix-1.1.0-released" "/$lang/blog/2020/gnu-guix-1.1.0-released/")
+   (redirect "/blog/2020/gnu-guix-maintainer-collective-update" "/$lang/blog/2020/gnu-guix-maintainer-collective-update/")
+   (redirect "/blog/2020/gnu-shepherd-user-services" "/$lang/blog/2020/gnu-shepherd-user-services/")
+   (redirect "/blog/2020/grafts-continued" "/$lang/blog/2020/grafts-continued/")
+   (redirect "/blog/2020/gsoc-2020-and-outreachy-may-2020-to-august-2020-status-report-ii" "/$lang/blog/2020/gsoc-2020-and-outreachy-may-2020-to-august-2020-status-report-ii/")
+   (redirect "/blog/2020/guile-3-and-guix" "/$lang/blog/2020/guile-3-and-guix/")
+   (redirect "/blog/2020/guix-further-reduces-bootstrap-seed-to-25" "/$lang/blog/2020/guix-further-reduces-bootstrap-seed-to-25/")
+   (redirect "/blog/2020/guix-welcomes-outreachy-and-gsoc-interns" "/$lang/blog/2020/guix-welcomes-outreachy-and-gsoc-interns/")
+   (redirect "/blog/2020/join-gnu-guix-through-outreachy" "/$lang/blog/2020/join-gnu-guix-through-outreachy/")
+   (redirect "/blog/2020/meet-guix-at-fosdem-2020" "/$lang/blog/2020/meet-guix-at-fosdem-2020/")
+   (redirect "/blog/2020/outreachy-may-2020-to-august-2020-status-report-i" "/$lang/blog/2020/outreachy-may-2020-to-august-2020-status-report-i/")
+   (redirect "/blog/2020/reproducible-computations-with-guix" "/$lang/blog/2020/reproducible-computations-with-guix/")
+   (redirect "/blog/2020/securing-updates" "/$lang/blog/2020/securing-updates/")
+   (redirect "/blog/page/1" "/$lang/blog/page/1/")
+   (redirect "/blog/page/2" "/$lang/blog/page/2/")
+   (redirect "/blog/page/3" "/$lang/blog/page/3/")
+   (redirect "/blog/page/4" "/$lang/blog/page/4/")
+   (redirect "/blog/page/5" "/$lang/blog/page/5/")
+   (redirect "/blog/tags/arm" "/$lang/blog/tags/arm/")
+   (redirect "/blog/tags/arm/page/1" "/$lang/blog/tags/arm/page/1/")
+   (redirect "/blog/tags/bioinformatics" "/$lang/blog/tags/bioinformatics/")
+   (redirect "/blog/tags/bioinformatics/page/1" "/$lang/blog/tags/bioinformatics/page/1/")
+   (redirect "/blog/tags/bootstrapping" "/$lang/blog/tags/bootstrapping/")
+   (redirect "/blog/tags/bootstrapping/page/1" "/$lang/blog/tags/bootstrapping/page/1/")
+   (redirect "/blog/tags/build-farm" "/$lang/blog/tags/build-farm/")
+   (redirect "/blog/tags/build-farm/page/1" "/$lang/blog/tags/build-farm/page/1/")
+   (redirect "/blog/tags/community" "/$lang/blog/tags/community/")
+   (redirect "/blog/tags/community/page/1" "/$lang/blog/tags/community/page/1/")
+   (redirect "/blog/tags/containers" "/$lang/blog/tags/containers/")
+   (redirect "/blog/tags/containers/page/1" "/$lang/blog/tags/containers/page/1/")
+   (redirect "/blog/tags/continuous-integration" "/$lang/blog/tags/continuous-integration/")
+   (redirect "/blog/tags/continuous-integration/page/1" "/$lang/blog/tags/continuous-integration/page/1/")
+   (redirect "/blog/tags/cookbook" "/$lang/blog/tags/cookbook/")
+   (redirect "/blog/tags/cookbook/page/1" "/$lang/blog/tags/cookbook/page/1/")
+   (redirect "/blog/tags/cross-compilation" "/$lang/blog/tags/cross-compilation/")
+   (redirect "/blog/tags/cross-compilation/page/1" "/$lang/blog/tags/cross-compilation/page/1/")
+   (redirect "/blog/tags/customization" "/$lang/blog/tags/customization/")
+   (redirect "/blog/tags/customization/page/1" "/$lang/blog/tags/customization/page/1/")
+   (redirect "/blog/tags/desktop-environments" "/$lang/blog/tags/desktop-environments/")
+   (redirect "/blog/tags/desktop-environments/page/1" "/$lang/blog/tags/desktop-environments/page/1/")
+   (redirect "/blog/tags/documentation" "/$lang/blog/tags/documentation/")
+   (redirect "/blog/tags/documentation/page/1" "/$lang/blog/tags/documentation/page/1/")
+   (redirect "/blog/tags/federation" "/$lang/blog/tags/federation/")
+   (redirect "/blog/tags/federation/page/1" "/$lang/blog/tags/federation/page/1/")
+   (redirect "/blog/tags/foreign-distribution" "/$lang/blog/tags/foreign-distribution/")
+   (redirect "/blog/tags/foreign-distribution/page/1" "/$lang/blog/tags/foreign-distribution/page/1/")
+   (redirect "/blog/tags/fosdem" "/$lang/blog/tags/fosdem/")
+   (redirect "/blog/tags/fosdem/page/1" "/$lang/blog/tags/fosdem/page/1/")
+   (redirect "/blog/tags/functional-package-management" "/$lang/blog/tags/functional-package-management/")
+   (redirect "/blog/tags/functional-package-management/page/1" "/$lang/blog/tags/functional-package-management/page/1/")
+   (redirect "/blog/tags/functional-programming" "/$lang/blog/tags/functional-programming/")
+   (redirect "/blog/tags/functional-programming/page/1" "/$lang/blog/tags/functional-programming/page/1/")
+   (redirect "/blog/tags/fundraising" "/$lang/blog/tags/fundraising/")
+   (redirect "/blog/tags/fundraising/page/1" "/$lang/blog/tags/fundraising/page/1/")
+   (redirect "/blog/tags/gnuhurd" "/$lang/blog/tags/gnuhurd/")
+   (redirect "/blog/tags/gnuhurd/page/1" "/$lang/blog/tags/gnuhurd/page/1/")
+   (redirect "/blog/tags/gsoc" "/$lang/blog/tags/gsoc/")
+   (redirect "/blog/tags/gsoc/page/1" "/$lang/blog/tags/gsoc/page/1/")
+   (redirect "/blog/tags/guix-days" "/$lang/blog/tags/guix-days/")
+   (redirect "/blog/tags/guix-days/page/1" "/$lang/blog/tags/guix-days/page/1/")
+   (redirect "/blog/tags/guix-hackathon" "/$lang/blog/tags/guix-hackathon/")
+   (redirect "/blog/tags/guix-hackathon/page/1" "/$lang/blog/tags/guix-hackathon/page/1/")
+   (redirect "/blog/tags/high-performance-computing" "/$lang/blog/tags/high-performance-computing/")
+   (redirect "/blog/tags/high-performance-computing/page/1" "/$lang/blog/tags/high-performance-computing/page/1/")
+   (redirect "/blog/tags/init-system" "/$lang/blog/tags/init-system/")
+   (redirect "/blog/tags/init-system/page/1" "/$lang/blog/tags/init-system/page/1/")
+   (redirect "/blog/tags/interviews" "/$lang/blog/tags/interviews/")
+   (redirect "/blog/tags/interviews/page/1" "/$lang/blog/tags/interviews/page/1/")
+   (redirect "/blog/tags/libreboot" "/$lang/blog/tags/libreboot/")
+   (redirect "/blog/tags/libreboot/page/1" "/$lang/blog/tags/libreboot/page/1/")
+   (redirect "/blog/tags/linux" "/$lang/blog/tags/linux/")
+   (redirect "/blog/tags/linux/page/1" "/$lang/blog/tags/linux/page/1/")
+   (redirect "/blog/tags/mips" "/$lang/blog/tags/mips/")
+   (redirect "/blog/tags/mips/page/1" "/$lang/blog/tags/mips/page/1/")
+   (redirect "/blog/tags/outreachy" "/$lang/blog/tags/outreachy/")
+   (redirect "/blog/tags/outreachy/page/1" "/$lang/blog/tags/outreachy/page/1/")
+   (redirect "/blog/tags/papers" "/$lang/blog/tags/papers/")
+   (redirect "/blog/tags/papers/page/1" "/$lang/blog/tags/papers/page/1/")
+   (redirect "/blog/tags/programming-interfaces" "/$lang/blog/tags/programming-interfaces/")
+   (redirect "/blog/tags/programming-interfaces/page/1" "/$lang/blog/tags/programming-interfaces/page/1/")
+   (redirect "/blog/tags/releases" "/$lang/blog/tags/releases/")
+   (redirect "/blog/tags/releases/page/1" "/$lang/blog/tags/releases/page/1/")
+   (redirect "/blog/tags/reproducibility" "/$lang/blog/tags/reproducibility/")
+   (redirect "/blog/tags/reproducibility/page/1" "/$lang/blog/tags/reproducibility/page/1/")
+   (redirect "/blog/tags/reproducible-builds" "/$lang/blog/tags/reproducible-builds/")
+   (redirect "/blog/tags/reproducible-builds/page/1" "/$lang/blog/tags/reproducible-builds/page/1/")
+   (redirect "/blog/tags/research" "/$lang/blog/tags/research/")
+   (redirect "/blog/tags/research/page/1" "/$lang/blog/tags/research/page/1/")
+   (redirect "/blog/tags/scheme-api" "/$lang/blog/tags/scheme-api/")
+   (redirect "/blog/tags/scheme-api/page/1" "/$lang/blog/tags/scheme-api/page/1/")
+   (redirect "/blog/tags/security" "/$lang/blog/tags/security/")
+   (redirect "/blog/tags/security/page/1" "/$lang/blog/tags/security/page/1/")
+   (redirect "/blog/tags/security-advisory" "/$lang/blog/tags/security-advisory/")
+   (redirect "/blog/tags/security-advisory/page/1" "/$lang/blog/tags/security-advisory/page/1/")
+   (redirect "/blog/tags/security-updates" "/$lang/blog/tags/security-updates/")
+   (redirect "/blog/tags/security-updates/page/1" "/$lang/blog/tags/security-updates/page/1/")
+   (redirect "/blog/tags/shepherd" "/$lang/blog/tags/shepherd/")
+   (redirect "/blog/tags/shepherd/page/1" "/$lang/blog/tags/shepherd/page/1/")
+   (redirect "/blog/tags/software-development" "/$lang/blog/tags/software-development/")
+   (redirect "/blog/tags/software-development/page/1" "/$lang/blog/tags/software-development/page/1/")
+   (redirect "/blog/tags/system-services" "/$lang/blog/tags/system-services/")
+   (redirect "/blog/tags/system-services/page/1" "/$lang/blog/tags/system-services/page/1/")
+   (redirect "/blog/tags/system-tests" "/$lang/blog/tags/system-tests/")
+   (redirect "/blog/tags/system-tests/page/1" "/$lang/blog/tags/system-tests/page/1/")
+   (redirect "/blog/tags/talks" "/$lang/blog/tags/talks/")
+   (redirect "/blog/tags/talks/page/1" "/$lang/blog/tags/talks/page/1/")
+   (redirect "/blog/tags/talks/page/2" "/$lang/blog/tags/talks/page/2/")
+   (redirect "/blog/tags/transactional-upgrades" "/$lang/blog/tags/transactional-upgrades/")
+   (redirect "/blog/tags/transactional-upgrades/page/1" "/$lang/blog/tags/transactional-upgrades/page/1/")
+   (redirect "/blog/tags/trust" "/$lang/blog/tags/trust/")
+   (redirect "/blog/tags/trust/page/1" "/$lang/blog/tags/trust/page/1/")
+   (redirect "/blog/tags/user-interfaces" "/$lang/blog/tags/user-interfaces/")
+   (redirect "/blog/tags/user-interfaces/page/1" "/$lang/blog/tags/user-interfaces/page/1/")
+   (redirect "/blog/tags/virtual-machine-images" "/$lang/blog/tags/virtual-machine-images/")
+   (redirect "/blog/tags/virtual-machine-images/page/1" "/$lang/blog/tags/virtual-machine-images/page/1/")
+   (redirect "/blog/tags/xfce" "/$lang/blog/tags/xfce/")
+   (redirect "/blog/tags/xfce/page/1" "/$lang/blog/tags/xfce/page/1/")
+   (redirect "/contact" "/$lang/contact/")
+   (redirect "/contact/irc" "/$lang/contact/irc/")
+   (redirect "/contribute" "/$lang/contribute/")
+   (redirect "/donate" "/$lang/donate/")
+   (redirect "/download" "/$lang/download/")
+   (redirect "/download/latest" "/$lang/download/latest/")
+   (redirect "/graphics" "/$lang/graphics/")
+   (redirect "/help" "/$lang/help/")
+   (redirect "/menu" "/$lang/menu/")
+   (redirect "/packages" "/$lang/packages/")
+   (redirect "/screenshots" "/$lang/screenshots/")
+   (redirect "/screenshots/enlightenment" "/$lang/screenshots/enlightenment/")
+   (redirect "/screenshots/gnome" "/$lang/screenshots/gnome/")
+   (redirect "/screenshots/slim" "/$lang/screenshots/slim/")
+   (redirect "/screenshots/sway" "/$lang/screenshots/sway/")
+   (redirect "/screenshots/virtual-machine" "/$lang/screenshots/virtual-machine/")
+   (redirect "/screenshots/xfce" "/$lang/screenshots/xfce/")
+   (redirect "/security" "/$lang/security/")
+   (redirect "/videos" "/$lang/videos/")
+   (redirect "/videos/asking-for-help" "/$lang/videos/asking-for-help/")
+   (redirect "/videos/everyday-use-of-gnu-guix,-part-one" "/$lang/videos/everyday-use-of-gnu-guix,-part-one/")
+   (redirect "/videos/everyday-use-of-gnu-guix,-part-two" "/$lang/videos/everyday-use-of-gnu-guix,-part-two/")
+   (redirect "/videos/installation-from-script" "/$lang/videos/installation-from-script/")
+   (redirect "/videos/packaging,-part-one" "/$lang/videos/packaging,-part-one/")
+   (redirect "/videos/packaging,-part-two" "/$lang/videos/packaging,-part-two/")
+   (redirect "/videos/packaging,-part-three" "/$lang/videos/packaging,-part-three/")
 
    (nginx-location-configuration
     (uri "/guix-videos")
@@ -468,6 +738,10 @@ PUBLISH-URL."
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list "try_files $uri /$lang/$uri /$lang/$uri/index.html =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
@@ -521,6 +795,7 @@ PUBLISH-URL."
       "if_modified_since off;"
       "etag off;"
 
+      "rewrite (.*)/$ $1/index.html;"
       "access_log /var/log/nginx/guix-info.access.log;")))
 
    (nginx-server-configuration
@@ -532,6 +807,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -628,6 +904,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -648,6 +925,7 @@ PUBLISH-URL."
        "if_modified_since off;"
        "etag off;"
 
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
 
    (nginx-server-configuration
@@ -731,6 +1009,8 @@ PUBLISH-URL."
    "default_type  application/octet-stream;"
    "sendfile        on;"
 
+   "set_from_accept_language $lang en de;"
+
    ;; Maximum chunk size to send.  Partly this is a workaround for
    ;; <http://bugs.gnu.org/19939>, but also the nginx docs mention that
    ;; "Without the limit, one fast connection may seize the worker
@@ -789,6 +1069,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (modules
+    (list
+     ;; Module to redirect users to the localized pages of their choice.
+     (file-append nginx-accept-language-module
+                  "/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (global-directives
     ;; This is a 72-core machine, but let's not use all of them for nginx.
     '((worker_processes . 16)
-- 
2.26.2


--jaxtpnqtvloxuavv--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Jul 2020 16:56:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jul 09 12:56:52 2020
Received: from localhost ([127.0.0.1]:41559 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jtZqu-0000M7-MK
	for submit <at> debbugs.gnu.org; Thu, 09 Jul 2020 12:56:52 -0400
Received: from mira.cbaines.net ([212.71.252.8]:51036)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <mail@HIDDEN>) id 1jtZqs-0000Ly-3s
 for 26302 <at> debbugs.gnu.org; Thu, 09 Jul 2020 12:56:51 -0400
Received: from localhost (unknown [46.237.172.69])
 by mira.cbaines.net (Postfix) with ESMTPSA id B8A7627BBE1;
 Thu,  9 Jul 2020 17:56:48 +0100 (BST)
Received: from localhost (localhost [local])
 by localhost (OpenSMTPD) with ESMTPA id fb5869af;
 Thu, 9 Jul 2020 16:56:46 +0000 (UTC)
References: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
User-agent: mu4e 1.4.10; emacs 26.3
From: Christopher Baines <mail@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
In-reply-to: <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
Date: Thu, 09 Jul 2020 17:56:43 +0100
Message-ID: <87wo3ck4ok.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
 micalg=pgp-sha512; protocol="application/pgp-signature"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 Bengt Richter <bokr@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


pelzflorian (Florian Pelz) <pelzflorian@HIDDEN> writes:

> Sorry, I forgot to address the patch tracker.  I wrote some hours ago:
>
> On Thu, Apr 09, 2020 at 07:31:04PM +0200, pelzflorian (Florian Pelz) wrot=
e:
>> On Thu, Apr 09, 2020 at 05:27:05PM +0200, Ludovic Court=C3=A8s wrote:
>> > Hi Florian,
>> >
>> > "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
>> >
>> > > +   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015=
/porting-guix-and-guixsd")
>> >
>> > Does that mean that /blog/2015/porting-guix-and-guixsd (without /LANG)
>> > will _not_ redirect to /LANG/blog/2015/porting-guix-and-guixsd?
>> >
>> > It=E2=80=99s important that all the current URL, without /LANG, remain=
 valid.
>>
>> With the new test VM, not all is working.
>>
>> /news/porting-guix-and-guixsd.html fails (code 404).
>>
>> /blog/2015/porting-guix-and-guixsd fails (code 404).
>>
>> /blog/2015/porting-guix-and-guixsd fails (404).
>>
>> But /blog/2015/porting-guix-and-guixsd/ works fine.
>>
>> Well this is difficult to figure out.
>>
>> Regards,
>> Florian
>
> An update:
>
> The attached patch for berlin serves more but not all URLs
> properly when testing on a VM.
>
> I found one problem; the nginx locations for redirecting old URLs can
> be given a higher priority via specifying =3D before the location path.
>
> I am sorry for neglecting this for so long until Christopher Baines
> offered to help a few days ago.  Now I too started investigating
> myself again.

Thanks for your continued time working on this Florian. I've made a
little bit of progress now, I've taken the wip-i18n branch, applied the
patch attached to this email and deployed that at [1].

1: http://guix-website-test.cbaines.net/

This isn't a close test of the configuration for berlin, but might come
in useful when testing the NGinx configuration.

Thanks,

Chris

--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAl8HTEtfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9Xdcgw//csS+Vx91Vr9g1SRoLXKWNagCOh99d9xm8xwjmAUxohjwn576cza6GSb8
sCugVPdg4mdc5Xz4NBZ9vS4am0C4/aGuB1geEX+9ZXQsDO5ELOwaByOLDcd2BvFI
GsqWLhVgpfLfEp96vjSGTo//7NCUIQkBrLrWoXK9RRB25vuW9HKHYTOBRCtN1AEh
MFcopCuoAEzrgeUmSBpSRDY2PJ8fXE1iWbnAEZy4S8dWHUiQmY6SYGgUI242qPFg
qIrVE8onZBUd54k42Md+IenEaLuTojGZ5gzDzuuo+SPFMgA24I7cI5no/0upd20B
YdyXiWdHSNnkGivMN2kpR/Bcwaze7HlxQ7atdXV/958WAvi1RI2NIQdYV63g3vxa
TMlAw3hvMxGJhkTKSRDUoRJzQ20QGhRFt32qSrqFkWZacXdH4LgnMSHBr7ef+FO8
RZNM0Fa1qnaBml1XlYC26MmCGXerJ4VAlSyFq6WcLRK47NB2vfgZsxnBkjuy07fa
I6P+aN1GmoCpvl1w2q1dCFkdG4+aV80YxT5t/zCzYL1JqGHkGHxHz0ZcJ8KXjqgm
tqUA9YeMa5DSGh8vAgdKVVGFzu2sJ//QXa+HQ7kOr+gMXJyRJF95h32Vq7qXjYmj
eLWuWwdwL/Cc/et11ycdQtRXa6d4O1Tr9kNLL9+MJsuts7Z8NEs=
=qpIF
-----END PGP SIGNATURE-----
--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Jul 2020 14:48:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jul 09 10:48:58 2020
Received: from localhost ([127.0.0.1]:41458 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jtXr8-0005jv-Fa
	for submit <at> debbugs.gnu.org; Thu, 09 Jul 2020 10:48:58 -0400
Received: from pelzflorian.de ([5.45.111.108]:59842 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jtXr4-0005ji-S2
 for 26302 <at> debbugs.gnu.org; Thu, 09 Jul 2020 10:48:57 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 2568236055C;
 Thu,  9 Jul 2020 16:48:53 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1594306133;
 bh=6rReN0bzz6n7Ou311MIZr+/q4+VWrf3F2A0tEmT0dvs=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=sJHphoDeVthpwYjFRCqVPkrW5faLrgvQBXx+P9+Q8oUkVbleS7ejfWKpmbuI5LfRv
 gN8bG9m6hT+nTl5/4qbmyY9Jp/wMoDYrmf8hkdcJL8y+8g5u77XXyEmSxQ4Yszq9OC
 1stSfjNo1EAZtOl9kqLkXOLwThNDgfHxC0BXlxHA=
Date: Thu, 9 Jul 2020 16:48:43 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200709144524.fjri2znqer2dzn7a@HIDDEN>
References: <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 <87d054bzru.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87d054bzru.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Christopher Baines <mail@HIDDEN>, Bengt Richter <bokr@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>, sirgazil <sirgazil@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

The trouble is that I do not have an understanding in what order nginx
tries which redirections/rewrites.  An understanding is needed instead
of investigating dead ends and 3rd party nginx modules.

What I have done a while ago (the berlin patch for guix-maintenance
from my last e-mail contains this):

To redirect accesses only to HTML files I had added

(nginx-location-configuration
 (uri "~ (.html|.htm)$")
 (body (list "try_files $uri /$lang/$uri /$lang/$uri/index.html =404;")))

However, this does not match when nginx redirects URLs like

http://guix.gnu.org/graphics/

to the index file

http://guix.gnu.org/graphics/index.html


For this reason I had added

rewrite (.*)/$ $1/index.html;

Then it matched.  But:

> > Still failing:
> >
> > http://guix.gnu.org/graphics
> >
> > http://guix.gnu.org/blog/2013/back-from-the-european-lisp-symposium
> >
> > worked before wip-i18n but stopped working.  Hrm.

Previously when visiting

http://guix.gnu.org/graphics

then nginx too looked up the index file

http://guix.gnu.org/graphics/index.html

This broke.  “rewrite (.*)/$ $1/index.html;” had not fixed it.

!! I do not know what to do about it.



My last change addressed this:

On Thu, Jul 09, 2020 at 03:09:57PM +0200, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > I found one problem; the nginx locations for redirecting old URLs can
> > be given a higher priority via specifying = before the location path.
> 
> One thing that bit me in the past is that regex locations have higher
> precedence that other locations, IIRC.

Yes, I think this is what happened, the

(nginx-location-configuration
 (uri "~ (.html|.htm)$")
 (body (list "try_files $uri /$lang/$uri /$lang/$uri/index.html =404;")))

was run before the

location /news/gnu-dmd-01-released.html {
  return 301 /blog/2013/gnu-dmd-01-released;
}

and therefore no return was performed.


Changing it to

location = /news/gnu-dmd-01-released.html {
  return 301 /$lang/blog/2013/gnu-dmd-01-released;
}

with = in my last described attempt fixed this.  Because the location
uri does not end in a slash, using = does not make a difference when
matching, but gives higher priority.


> > I cleared the browser cache, restarted nscd and tested these URLs
> > (with a changed /etc/hosts file pointing guix.gnu.org to the VM):
> 
> I guess you could check with “wget -v -O /dev/null” or similar, so you
> can be sure there’s no client cache interfering.

This is a good idea.  In the past I had thought things work when in
reality all was broken and it was just cached.



> If you don’t have the manual at hand, you can just make sure you’re
> getting the expected redirect, even if the end result is 404.

You are right, trying to build the manual was pointless.

> > Still failing:
> >
> > http://guix.gnu.org/graphics
> >
> > http://guix.gnu.org/blog/2013/back-from-the-european-lisp-symposium
> >
> > worked before wip-i18n but stopped working.  Hrm.
> What does nginx’s error.log file say?

I can only check later, I have deleted my VM because texinfo for
building the manual consumed too much disk space.




> > http://guix.gnu.org/manual/html_node/Power-management-Services.html
> 

The URL should have been

http://guix.gnu.org/manual/html_node/Power-Management-Services.html

with capital M.  But the old config has the wrong URL as well I think.


I have made some wrong changes since my last mail.  Will go back and
rebuild the VM from my last mail now.  With what I currently have
redirection explodes

http://guix.gnu.org/manual/html_node/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/html_node

!! I think this happened too back then.  I have not investigated this yet.




> I’d be happy to go ahead and deploy this so maybe let’s see and hammer
> down those remaining issues and then we can profit!  Let us know how we
> can help!
> 
> Thanks,
> Ludo’.

A solution for the two problems I marked with !! might be important.

Other than that, I would be very happy if first the berlin patch to
guix-maintenance and then after that the wip-i18n branch finally would
go to master.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Jul 2020 13:10:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jul 09 09:10:07 2020
Received: from localhost ([127.0.0.1]:40243 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jtWJT-0007Ef-AG
	for submit <at> debbugs.gnu.org; Thu, 09 Jul 2020 09:10:07 -0400
Received: from eggs.gnu.org ([209.51.188.92]:33554)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1jtWJR-0007E1-Q1
 for 26302 <at> debbugs.gnu.org; Thu, 09 Jul 2020 09:10:06 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:55766)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1jtWJL-0008W7-Uc; Thu, 09 Jul 2020 09:09:59 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=33862 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1jtWJL-0004uQ-F3; Thu, 09 Jul 2020 09:09:59 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
References: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 22 Messidor an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Thu, 09 Jul 2020 15:09:57 +0200
In-Reply-To: <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
 (pelzflorian@HIDDEN's message of "Sun, 5 Jul 2020 11:08:08
 +0200")
Message-ID: <87d054bzru.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Christopher Baines <mail@HIDDEN>, Bengt Richter <bokr@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>, sirgazil <sirgazil@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi Florian,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> The attached patch for berlin serves more but not all URLs
> properly when testing on a VM.
>
> I found one problem; the nginx locations for redirecting old URLs can
> be given a higher priority via specifying =3D before the location path.

One thing that bit me in the past is that regex locations have higher
precedence that other locations, IIRC.

> I am sorry for neglecting this for so long until
> Christopher Baines offered to help a few days ago.  Now I too started
> investigating myself again.
>
> I cleared the browser cache, restarted nscd and tested these URLs
> (with a changed /etc/hosts file pointing guix.gnu.org to the VM):

I guess you could check with =E2=80=9Cwget -v -O /dev/null=E2=80=9D or simi=
lar, so you
can be sure there=E2=80=99s no client cache interfering.

> Still failing:
>
> http://guix.gnu.org/graphics
>
> http://guix.gnu.org/blog/2013/back-from-the-european-lisp-symposium
>
> worked before wip-i18n but stopped working.  Hrm.

What does nginx=E2=80=99s error.log file say?

> These seem to fail but I could not properly build the manual yet:
>
> http://guix.gnu.org/manual/en/html_node/Miscellaneous-Services.html
>
> http://guix.gnu.org/manual/html_node/Power-management-Services.html

If you don=E2=80=99t have the manual at hand, you can just make sure you=E2=
=80=99re
getting the expected redirect, even if the end result is 404.

> The rest looks good:
>
> http://guix.gnu.org/news/timely-delivery-of-security-updates.html
>
> http://guix.gnu.org/security/
>
> http://guix.gnu.org/blog/2016/back-from-the-gnu-hackers-meeting-2016/
>
> http://guix.gnu.org/en/blog/2017/back-from-fosdem-2017
>
> http://guix.gnu.org/de/blog/2016/back-from-gbcuw-2016/
>
> works.
>
> http://guix.gnu.org/news/coming-events
>
> http://guix.gnu.org/news
>
> never worked, so it=E2=80=99s OK that these URLs don=E2=80=99t work.

Sounds good.

> http://guix.gnu.org/news/
>
> This redirect now works but did not work before wip-i18n (??).

Nice.

I=E2=80=99d be happy to go ahead and deploy this so maybe let=E2=80=99s see=
 and hammer
down those remaining issues and then we can profit!  Let us know how we
can help!

Thanks,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 5 Jul 2020 09:08:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jul 05 05:08:23 2020
Received: from localhost ([127.0.0.1]:60021 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1js0dL-0000nz-0g
	for submit <at> debbugs.gnu.org; Sun, 05 Jul 2020 05:08:23 -0400
Received: from pelzflorian.de ([5.45.111.108]:47904 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1js0dI-0000nq-F1
 for 26302 <at> debbugs.gnu.org; Sun, 05 Jul 2020 05:08:22 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id A503C36055C;
 Sun,  5 Jul 2020 11:08:18 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1593940099;
 bh=FETxttAHPEKtmFKtOA4DExuF35MRuf6WVV6EZCzIAt4=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Py7tVGuhKWGq0JcWZAXJ06d2GgBVh12hFKSDRHHrNCCp1okO+yUxAABiqlyoPsQmk
 BDFsRtQvOEZQwCgHMhwjGXGb6GL56Wj+ah8Kcw5W5MxVvwSVz1VDi/t0K9gmHEY9YR
 2XRdB01Go8H8m21QQ19rcvHKROHzYxiIgH37C9yY=
Date: Sun, 5 Jul 2020 11:08:08 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: 26302 <26302 <at> debbugs.gnu.org>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200705090808.7c7ihjnymo6hv7ch@HIDDEN>
References: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="jtzwqgsvir7islum"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>,
 Christopher Baines <mail@HIDDEN>, Bengt Richter <bokr@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--jtzwqgsvir7islum
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

Sorry, I forgot to address the patch tracker.  I wrote some hours ago:

On Thu, Apr 09, 2020 at 07:31:04PM +0200, pelzflorian (Florian Pelz) wrote:
> On Thu, Apr 09, 2020 at 05:27:05PM +0200, Ludovic Courtès wrote:
> > Hi Florian,
> > 
> > "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > 
> > > +   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd")
> > 
> > Does that mean that /blog/2015/porting-guix-and-guixsd (without /LANG)
> > will _not_ redirect to /LANG/blog/2015/porting-guix-and-guixsd?
> > 
> > It’s important that all the current URL, without /LANG, remain valid.
> 
> With the new test VM, not all is working.
> 
> /news/porting-guix-and-guixsd.html fails (code 404).
> 
> /blog/2015/porting-guix-and-guixsd fails (code 404).
> 
> /blog/2015/porting-guix-and-guixsd fails (404).
> 
> But /blog/2015/porting-guix-and-guixsd/ works fine.
> 
> Well this is difficult to figure out.
> 
> Regards,
> Florian

An update:

The attached patch for berlin serves more but not all URLs
properly when testing on a VM.

I found one problem; the nginx locations for redirecting old URLs can
be given a higher priority via specifying = before the location path.

I am sorry for neglecting this for so long until
Christopher Baines offered to help a few days ago.  Now I too started
investigating myself again.

I cleared the browser cache, restarted nscd and tested these URLs
(with a changed /etc/hosts file pointing guix.gnu.org to the VM):

Still failing:

http://guix.gnu.org/graphics

http://guix.gnu.org/blog/2013/back-from-the-european-lisp-symposium

worked before wip-i18n but stopped working.  Hrm.

These seem to fail but I could not properly build the manual yet:

http://guix.gnu.org/manual/en/html_node/Miscellaneous-Services.html

http://guix.gnu.org/manual/html_node/Power-management-Services.html


The rest looks good:

http://guix.gnu.org/news/timely-delivery-of-security-updates.html

http://guix.gnu.org/security/

http://guix.gnu.org/blog/2016/back-from-the-gnu-hackers-meeting-2016/

http://guix.gnu.org/en/blog/2017/back-from-fosdem-2017

http://guix.gnu.org/de/blog/2016/back-from-gbcuw-2016/

works.

http://guix.gnu.org/news/coming-events

http://guix.gnu.org/news

never worked, so it’s OK that these URLs don’t work.

http://guix.gnu.org/news/

This redirect now works but did not work before wip-i18n (??).


I will continue to investigate.

Regards,
Florian

--jtzwqgsvir7islum
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
	filename="0001-berlin-Redirect-to-localized-website-by-browser-lang.patch"

From 59a82c819ff987a598f14d87ea7524f6c4451276 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sat, 4 Jul 2020 21:14:19 +0200
Subject: [PATCH 1/2] berlin: Redirect to localized website by browser language
 settings.

* hydra/nginx/berlin.scm (%nginx-configuration): Load required nginx
dynamic module.
(%extra-content): Set $lang variable with it.
(guix.gnu.org-locations): Redirect html URLs.
(%berlin-servers): Rewrite to index files.
(redirect): Give redirect locations highest priority.
---
 hydra/nginx/berlin.scm | 149 +++++++++++++++++++++++------------------
 1 file changed, 82 insertions(+), 67 deletions(-)

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 8c90eb1..aa0a857 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -14,7 +14,7 @@
 
 (define (redirect old new)
   (nginx-location-configuration
-   (uri old)
+   (uri (string-append "= " old)) ;= means highest priority
    (body (list (string-append "return 301 " new ";\n")))))
 
 (define (publish-locations url)
@@ -196,72 +196,72 @@ PUBLISH-URL."
    ;; available at gnu.org/s/guix--e.g.,
    ;; <http://gnu.org/s/guix/news/porting-guix-and-guixsd.html>.
    (redirect "/news/feed.xml" "/feeds/blog.atom")
-   (redirect "/news/porting-guix-and-guixsd.html" "/blog/2015/porting-guix-and-guixsd")
-   (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/blog/2015/gnu-guix-welcomes-three-students-for-gsoc")
-   (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/blog/2015/gnu-guix-recruits-for-gsoc")
-   (redirect "/news/one-week-to-fosdem.html" "/blog/2014/one-week-to-fosdem")
-   (redirect "/news/gnu-dmd-02-released.html" "/blog/2014/gnu-dmd-02-released")
-   (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/blog/2014/emacs-as-a-general-purpose-package-manager")
-   (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/blog/2017/join-gnu-guix-for-gsoc-2017")
-   (redirect "/news/gnu-guix-05-released.html" "/blog/2013/gnu-guix-05-released")
-   (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/blog/2014/guix-at-the-2014-gnu-hackers-meeting")
-   (redirect "/news/state-of-aarch64-on-guix.html" "/blog/2017/state-of-aarch64-on-guix")
-   (redirect "/news/coming-events.html" "/blog/2017/coming-events")
-   (redirect "/news/gnu-dmd-01-released.html" "/blog/2013/gnu-dmd-01-released")
-   (redirect "/news/announcing-guix-hpc.html" "/blog/2017/announcing-guix-hpc")
-   (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/blog/2014/gnu-guix-looks-for-gsoc-students")
-   (redirect "/news/guix-at-the-european-lisp-symposium.html" "/blog/2013/guix-at-the-european-lisp-symposium")
-   (redirect "/news/gnu-guix-08-released.html" "/blog/2014/gnu-guix-08-released")
-   (redirect "/news/gnu-guix-090-released.html" "/blog/2015/gnu-guix-090-released")
-   (redirect "/news/index.html" "/blog/")
-   (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/blog/2016/gnu-guix-welcomes-four-students-for-gsoc")
-   (redirect "/news/gnu-guix-081-released.html" "/blog/2015/gnu-guix-081-released")
-   (redirect "/news/timely-delivery-of-security-updates.html" "/blog/2016/timely-delivery-of-security-updates")
-   (redirect "/news/guix-at-openbio-codefest-2014.html" "/blog/2014/guix-at-openbio-codefest-2014")
-   (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th")
-   (redirect "/news/gnu-guix-at-fosdem.html" "/blog/2015/gnu-guix-at-fosdem")
-   (redirect "/news/gnu-guix-082-released.html" "/blog/2015/gnu-guix-082-released")
-   (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th")
-   (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/blog/2013/back-from-the-gnu-hackers-meeting")
-   (redirect "/news/reproducible-build-summit-2nd-edition.html" "/blog/2016/reproducible-build-summit-2nd-edition")
-   (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/blog/2015/gnu-guix-talk-in-rennes-france-november-9th")
-   (redirect "/news/gnu-guix-01-released.html" "/blog/2013/gnu-guix-01-released")
-   (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/blog/2015/guix-tox-talk-at-pyconfr-october-17th")
-   (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/blog/2017/gnu-guix-and-guixsd-0.13.0-released")
-   (redirect "/news/guix-gets-cross-compilation-support.html" "/blog/2013/guix-gets-cross-compilation-support")
-   (redirect "/news/gnu-guix-06-released.html" "/blog/2014/gnu-guix-06-released")
-   (redirect "/news/meet-guix-at-fosdem.html" "/blog/2016/meet-guix-at-fosdem")
-   (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix")
-   (redirect "/news/container-provisioning-with-guix.html" "/blog/2015/container-provisioning-with-guix")
-   (redirect "/news/guixsd-system-tests.html" "/blog/2016/guixsd-system-tests")
-   (redirect "/news/gnu-guix--guixsd-0100-released.html" "/blog/2016/gnu-guix--guixsd-0100-released")
-   (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/blog/2016/gnu-guix-and-guixsd-0110-released")
-   (redirect "/news/boot-to-guile.html" "/blog/2013/boot-to-guile")
-   (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th")
-   (redirect "/news/running-system-services-in-containers.html" "/blog/2017/running-system-services-in-containers")
-   (redirect "/news/growing-our-build-farm.html" "/blog/2016/growing-our-build-farm")
-   (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips")
-   (redirect "/news/guix-at-libreplanet-2016.html" "/blog/2016/guix-at-libreplanet-2016")
-   (redirect "/news/guix--gsoc.html" "/blog/2013/guix--gsoc")
-   (redirect "/news/service-composition-in-guixsd.html" "/blog/2015/service-composition-in-guixsd")
-   (redirect "/news/creating-bundles-with-guix-pack.html" "/blog/2017/creating-bundles-with-guix-pack")
-   (redirect "/news/back-from-the-european-lisp-symposium.html" "/blog/2013/back-from-the-european-lisp-symposium")
-   (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/blog/2013/gnu-guix-04-released-happy-birthday-gnu")
-   (redirect "/news/reproducible-builds-a-status-update.html" "/blog/2017/reproducible-builds-a-status-update")
-   (redirect "/news/gnu-guix-083-released.html" "/blog/2015/gnu-guix-083-released")
-   (redirect "/news/join-gnu-guix-for-gsoc.html" "/blog/2016/join-gnu-guix-for-gsoc")
-   (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/blog/2016/gnu-guix-and-guixsd-0120-released")
-   (redirect "/news/meet-guix-at-fosdem-2017.html" "/blog/2017/meet-guix-at-fosdem-2017")
-   (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29")
-   (redirect "/news/gnome-in-guixsd.html" "/blog/2016/gnome-in-guixsd")
-   (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu")
-   (redirect "/news/gnu-guix-03-released.html" "/blog/2013/gnu-guix-03-released")
-   (redirect "/news/gnu-guix-07-released.html" "/blog/2014/gnu-guix-07-released")
-   (redirect "/news/gsoc-update.html" "/blog/2015/gsoc-update")
-   (redirect "/news/gnu-guix-02-released.html" "/blog/2013/gnu-guix-02-released")
-   (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf")
-   (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year")
-   (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/blog/2015/reproducible-builds-a-means-to-an-end")
+   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd")
+   (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/$lang/blog/2015/gnu-guix-welcomes-three-students-for-gsoc")
+   (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/$lang/blog/2015/gnu-guix-recruits-for-gsoc")
+   (redirect "/news/one-week-to-fosdem.html" "/$lang/blog/2014/one-week-to-fosdem")
+   (redirect "/news/gnu-dmd-02-released.html" "/$lang/blog/2014/gnu-dmd-02-released")
+   (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/$lang/blog/2014/emacs-as-a-general-purpose-package-manager")
+   (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/$lang/blog/2017/join-gnu-guix-for-gsoc-2017")
+   (redirect "/news/gnu-guix-05-released.html" "/$lang/blog/2013/gnu-guix-05-released")
+   (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/$lang/blog/2014/guix-at-the-2014-gnu-hackers-meeting")
+   (redirect "/news/state-of-aarch64-on-guix.html" "/$lang/blog/2017/state-of-aarch64-on-guix")
+   (redirect "/news/coming-events.html" "/$lang/blog/2017/coming-events")
+   (redirect "/news/gnu-dmd-01-released.html" "/$lang/blog/2013/gnu-dmd-01-released")
+   (redirect "/news/announcing-guix-hpc.html" "/$lang/blog/2017/announcing-guix-hpc")
+   (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/$lang/blog/2014/gnu-guix-looks-for-gsoc-students")
+   (redirect "/news/guix-at-the-european-lisp-symposium.html" "/$lang/blog/2013/guix-at-the-european-lisp-symposium")
+   (redirect "/news/gnu-guix-08-released.html" "/$lang/blog/2014/gnu-guix-08-released")
+   (redirect "/news/gnu-guix-090-released.html" "/$lang/blog/2015/gnu-guix-090-released")
+   (redirect "/news/index.html" "/$lang/blog/")
+   (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/$lang/blog/2016/gnu-guix-welcomes-four-students-for-gsoc")
+   (redirect "/news/gnu-guix-081-released.html" "/$lang/blog/2015/gnu-guix-081-released")
+   (redirect "/news/timely-delivery-of-security-updates.html" "/$lang/blog/2016/timely-delivery-of-security-updates")
+   (redirect "/news/guix-at-openbio-codefest-2014.html" "/$lang/blog/2014/guix-at-openbio-codefest-2014")
+   (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/$lang/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th")
+   (redirect "/news/gnu-guix-at-fosdem.html" "/$lang/blog/2015/gnu-guix-at-fosdem")
+   (redirect "/news/gnu-guix-082-released.html" "/$lang/blog/2015/gnu-guix-082-released")
+   (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/$lang/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th")
+   (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/$lang/blog/2013/back-from-the-gnu-hackers-meeting")
+   (redirect "/news/reproducible-build-summit-2nd-edition.html" "/$lang/blog/2016/reproducible-build-summit-2nd-edition")
+   (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/$lang/blog/2015/gnu-guix-talk-in-rennes-france-november-9th")
+   (redirect "/news/gnu-guix-01-released.html" "/$lang/blog/2013/gnu-guix-01-released")
+   (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/$lang/blog/2015/guix-tox-talk-at-pyconfr-october-17th")
+   (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/$lang/blog/2017/gnu-guix-and-guixsd-0.13.0-released")
+   (redirect "/news/guix-gets-cross-compilation-support.html" "/$lang/blog/2013/guix-gets-cross-compilation-support")
+   (redirect "/news/gnu-guix-06-released.html" "/$lang/blog/2014/gnu-guix-06-released")
+   (redirect "/news/meet-guix-at-fosdem.html" "/$lang/blog/2016/meet-guix-at-fosdem")
+   (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/$lang/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix")
+   (redirect "/news/container-provisioning-with-guix.html" "/$lang/blog/2015/container-provisioning-with-guix")
+   (redirect "/news/guixsd-system-tests.html" "/$lang/blog/2016/guixsd-system-tests")
+   (redirect "/news/gnu-guix--guixsd-0100-released.html" "/$lang/blog/2016/gnu-guix--guixsd-0100-released")
+   (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0110-released")
+   (redirect "/news/boot-to-guile.html" "/$lang/blog/2013/boot-to-guile")
+   (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/$lang/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th")
+   (redirect "/news/running-system-services-in-containers.html" "/$lang/blog/2017/running-system-services-in-containers")
+   (redirect "/news/growing-our-build-farm.html" "/$lang/blog/2016/growing-our-build-farm")
+   (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/$lang/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips")
+   (redirect "/news/guix-at-libreplanet-2016.html" "/$lang/blog/2016/guix-at-libreplanet-2016")
+   (redirect "/news/guix--gsoc.html" "/$lang/blog/2013/guix--gsoc")
+   (redirect "/news/service-composition-in-guixsd.html" "/$lang/blog/2015/service-composition-in-guixsd")
+   (redirect "/news/creating-bundles-with-guix-pack.html" "/$lang/blog/2017/creating-bundles-with-guix-pack")
+   (redirect "/news/back-from-the-european-lisp-symposium.html" "/$lang/blog/2013/back-from-the-european-lisp-symposium")
+   (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/$lang/blog/2013/gnu-guix-04-released-happy-birthday-gnu")
+   (redirect "/news/reproducible-builds-a-status-update.html" "/$lang/blog/2017/reproducible-builds-a-status-update")
+   (redirect "/news/gnu-guix-083-released.html" "/$lang/blog/2015/gnu-guix-083-released")
+   (redirect "/news/join-gnu-guix-for-gsoc.html" "/$lang/blog/2016/join-gnu-guix-for-gsoc")
+   (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0120-released")
+   (redirect "/news/meet-guix-at-fosdem-2017.html" "/$lang/blog/2017/meet-guix-at-fosdem-2017")
+   (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/$lang/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29")
+   (redirect "/news/gnome-in-guixsd.html" "/$lang/blog/2016/gnome-in-guixsd")
+   (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/$lang/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu")
+   (redirect "/news/gnu-guix-03-released.html" "/$lang/blog/2013/gnu-guix-03-released")
+   (redirect "/news/gnu-guix-07-released.html" "/$lang/blog/2014/gnu-guix-07-released")
+   (redirect "/news/gsoc-update.html" "/$lang/blog/2015/gsoc-update")
+   (redirect "/news/gnu-guix-02-released.html" "/$lang/blog/2013/gnu-guix-02-released")
+   (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/$lang/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf")
+   (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/$lang/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year")
+   (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/$lang/blog/2015/reproducible-builds-a-means-to-an-end")
    (redirect "/manual/html_node/Substitutes.html" "../en/html_node/Substitutes.html")
    (redirect "/manual/html_node/GNU-Free-Documentation-License.html" "../en/html_node/GNU-Free-Documentation-License.html")
    (redirect "/manual/html_node/The-Store-Monad.html" "../en/html_node/The-Store-Monad.html")
@@ -468,6 +468,10 @@ PUBLISH-URL."
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list "try_files $uri /$lang/$uri /$lang/$uri/index.html =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
@@ -521,6 +525,7 @@ PUBLISH-URL."
       "if_modified_since off;"
       "etag off;"
 
+      "rewrite (.*)/$ $1/index.html;"
       "access_log /var/log/nginx/guix-info.access.log;")))
 
    (nginx-server-configuration
@@ -532,6 +537,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -628,6 +634,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -648,6 +655,7 @@ PUBLISH-URL."
        "if_modified_since off;"
        "etag off;"
 
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
 
    (nginx-server-configuration
@@ -731,6 +739,8 @@ PUBLISH-URL."
    "default_type  application/octet-stream;"
    "sendfile        on;"
 
+   "set_from_accept_language $lang en de;"
+
    ;; Maximum chunk size to send.  Partly this is a workaround for
    ;; <http://bugs.gnu.org/19939>, but also the nginx docs mention that
    ;; "Without the limit, one fast connection may seize the worker
@@ -789,6 +799,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (modules
+    (list
+     ;; Module to redirect users to the localized pages of their choice.
+     (file-append nginx-accept-language-module
+                  "/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (global-directives
     ;; This is a 72-core machine, but let's not use all of them for nginx.
     '((worker_processes . 16)
-- 
2.26.2


--jtzwqgsvir7islum--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 1 Jul 2020 20:11:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 01 16:11:11 2020
Received: from localhost ([127.0.0.1]:53764 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jqj4Z-0002yd-K6
	for submit <at> debbugs.gnu.org; Wed, 01 Jul 2020 16:11:11 -0400
Received: from mira.cbaines.net ([212.71.252.8]:52028)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <mail@HIDDEN>) id 1jqj4W-0002yS-AV
 for 26302 <at> debbugs.gnu.org; Wed, 01 Jul 2020 16:11:10 -0400
Received: from localhost (unknown [46.237.173.5])
 by mira.cbaines.net (Postfix) with ESMTPSA id 14A0227BBE1;
 Wed,  1 Jul 2020 21:11:07 +0100 (BST)
Received: from localhost (localhost [local])
 by localhost (OpenSMTPD) with ESMTPA id bf0a7ba1;
 Wed, 1 Jul 2020 20:11:04 +0000 (UTC)
References: <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200409185814.GA12183@LionPure>
 <20200409191744.aajfv4hg6toc5mnk@HIDDEN>
User-agent: mu4e 1.4.10; emacs 26.3
From: Christopher Baines <mail@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>, Ludovic
 =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
In-reply-to: <20200409191744.aajfv4hg6toc5mnk@HIDDEN>
Date: Wed, 01 Jul 2020 21:11:02 +0100
Message-ID: <87a70j2dyh.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
 micalg=pgp-sha512; protocol="application/pgp-signature"
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Daniela Lura <danielaluraa@HIDDEN>, , sirgazil <sirgazil@HIDDEN>,
 Bengt Richter <bokr@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain


pelzflorian (Florian Pelz) <pelzflorian@HIDDEN> writes:

> On Thu, Apr 09, 2020 at 08:58:14PM +0200, Bengt Richter wrote:
>> Wondering, could dnsmasq help?
>
> I am already using dnsmasq to access a virtual machine of the machine
> hosting the Guix website so <guix.gnu.org/.i18n/de/> can replace the
> Guix website while old URLs keep working.

...

> I am confused by all the ways to rewrite, redirect and try_files in
> nginx.  I would be happy if others with more knowledge could help.

Hey Florian,

I'm wondering what the current state of the Guix website translation
work is?

I can see the translated website is available at [1], but maybe not with
the full NGinx configuration needed. I also managed to use haunt
locally, but I noticed there were some merge conflicts between the
wip-i18n and master branch.

1: http://guix.gnu.org/.i18n/en/

I can try and help with the NGinx stuff, I've muddled through
configuring NGinx in the past. I think it might be useful to test
without the /.i18n prefix, maybe berlin can be changed to serve the site
at wip-i18n.guix.gnu.org. I also have a server where I might try
deploying the translated website for testing.

Thanks,

Chris

--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAl787dZfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9XdU3w/8C8y7w8YtJL2ZNBeQWWsDcbkzsLSz4kiRaJdaebZ1T5W4cxCQ19GhBCnM
9lTS1g8fHFuAiOOIgDc6FQh0Tt+nX2DZstb910eWnZl/BbjaqY8p3CSWOm9GYSvr
NSEH2EoG60G+goACvAeVXHgwAfGxZ5RFSr9lZwn7nt+Ku9VN0HJtwjkn/o2zEm7k
i4jsLsx3FpRujzCdq7EQ3dLxIfEgT/W3+fQ3CihS64gkIczTVkpCPM4/bzh9XgY3
hLrZwAK9M1c0/W1C3WcXvk2glrXw1R80uENM5oyrBmXmyzcb1dxleq2YKwq6TejX
D9QjALiQAIgLiryjHKjNuy2l7cv69zr8ErkZb+iJrjacnwhXq+6zJrtmhohrRbb6
LBcuKzZBkyBShcMNzVfRMmlIBo/AMTqLCVXBxdjWH2fvU/YT6Y0JIgAG+48dhjRy
t2kg7Qzj3+nRNjEcwpIQzcvGjbdjLI1kmetaYkf9TQTaz75WwmohZlvivjV8iCLb
/2Loe6TFQIzNppw0gn0K4d6Kh044Tq1hbRlAWFg0RDg+hYidQYXdSkOc5CEIzAxn
PHHZ/1QRFsowyE7h6zqzoevhZPBMmjPlQOhquHHwFLSvq4Oi6W08yBqD228gY0fj
GFA/2A64z1Lhw5MmpCBrIpeRWwX/5YZ4uDOEAo54szmB87i2Flk=
=vUAl
-----END PGP SIGNATURE-----
--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 19:17:57 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 09 15:17:57 2020
Received: from localhost ([127.0.0.1]:54444 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMcgP-0001Gx-8e
	for submit <at> debbugs.gnu.org; Thu, 09 Apr 2020 15:17:57 -0400
Received: from pelzflorian.de ([5.45.111.108]:58900 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jMcgM-0001Gn-Uu
 for 26302 <at> debbugs.gnu.org; Thu, 09 Apr 2020 15:17:48 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 81D5B36055C;
 Thu,  9 Apr 2020 21:17:45 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1586459865;
 bh=qbwrhJo9M5jnapzA3CT/4VoNEcwZktCmVZgqNTJLWLw=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Ez1XQrhURNEYY9/mGYeajnqVQtcOs9suxuDk4CZDzHspHsQ9/bTdrT7vSNE+bNAxH
 pCt5hjFAOFsikPBLzFqYTOtP9ke4rrovQmM0k2OKsDipuskb7lEAjcfrMvqUH/RjLj
 1LpBHjan9h8JjRF1oLvkJe8D2Ue2J0GtxfhnwdKE=
Date: Thu, 9 Apr 2020 21:17:44 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Bengt Richter <bokr@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200409191744.aajfv4hg6toc5mnk@HIDDEN>
References: <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
 <20200409185814.GA12183@LionPure>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="f2y56uww2ligiehc"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200409185814.GA12183@LionPure>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--f2y56uww2ligiehc
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Thu, Apr 09, 2020 at 08:58:14PM +0200, Bengt Richter wrote:
> Wondering, could dnsmasq help?

I am already using dnsmasq to access a virtual machine of the machine
hosting the Guix website so <guix.gnu.org/.i18n/de/> can replace the
Guix website while old URLs keep working.

https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/berlin.scm.

I configured dnsmasq with NetworkManager.

(network-manager-service-type config =>
  (network-manager-configuration
    (inherit config)
    (dns "dnsmasq")
    (vpn-plugins (list network-manager-openconnect)))))))

Also I made the network manager configuration as described in the Guix
manual.

I made the attached modifications to berlin.scm so I can test without
the VM starting to build the world.

Then I changed my /etc/hosts

127.0.0.1 localhost florianmacbook
::1       localhost florianmacbook
172.28.112.244 guix.gnu.org guix.gnu.org

Then I made the changes from my previous patch, except those
nginx-server-configuration that I removed because I cannot test TLS.

I compile the VM using

~/git/maintenance$ GUILE_LOAD_PATH=$GUILE_LOAD_PATH:$(pwd)/modules guix system vm-image --image-size=5G --fallback /home/florian/git/maintenance/hydra/berlin.scm

(More than --image-size=5G to be safe.)  I copy the resulting image
and name it berlin1.img, make it writable and run it via

qemu-system-x86_64 -enable-kvm berlin1.img -m 2048 -nic tap,ifname=tap0,script=no,downscript=no

When running the virtual machine, I log in as root and do “herd stop
mcron” so the VM does not get overloaded building all kinds of things
I do not need.  I run the command from “herd schedule mcron” to build
the guix.gnu.org website manually once.

I am confused by all the ways to rewrite, redirect and try_files in
nginx.  I would be happy if others with more knowledge could help.

Regards,
Florian

--f2y56uww2ligiehc
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
	filename="0001-various-changes-for-local-testing.patch"

From b914a165a2e9b9b7bd7760cec09a531c70611141 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Wed, 8 Apr 2020 00:44:18 +0200
Subject: [PATCH 1/2] [various changes for local testing]

---
 hydra/berlin.scm                    |  80 +--------
 hydra/modules/sysadmin/services.scm |  39 +----
 hydra/nginx/berlin.scm              | 241 +---------------------------
 3 files changed, 7 insertions(+), 353 deletions(-)

diff --git a/hydra/berlin.scm b/hydra/berlin.scm
index ee828d8..529f4f0 100644
--- a/hydra/berlin.scm
+++ b/hydra/berlin.scm
@@ -31,7 +31,7 @@
 		  (ssh-public-key (local-file "keys/ssh/nckx.pub")))))
 
 ;;; XXX: relative includes don't seem to work with Guile 3.0
-(include "/root/maintenance/hydra/nginx/berlin.scm")
+(include "/home/florian/git/maintenance/hydra/nginx/berlin.scm")
 
 
 ;;;
@@ -116,29 +116,9 @@ Happy hacking!\n"))
                  ;; The root file system resides on just a single
                  ;; disk, no RAID :-/
                  (file-system
-                   (device (file-system-label "my-root"))
+                   (device "/dev/sda")
                    (mount-point "/")
                    (type "ext4"))
-                 ;; This is a large external storage array
-                 ;; connected via 2 HBA cards.  We only mount it
-                 ;; through one of the HBA cards.  We would need
-                 ;; to use multipathd otherwise.
-                 (file-system
-                   (device (uuid "a6455b66-59d2-40bd-bddb-0c572bb62a2f"))
-                   (mount-point "/gnu")
-                   (type "ext4"))
-                 ;; Bind mount cache to large external storage.
-                 (file-system
-                   (device "/gnu/cache")
-                   (mount-point "/var/cache")
-                   (flags '(bind-mount))
-                   (type "none"))
-                 ;; Access root file system without bind mounts.
-                 (file-system
-                   (device "/")
-                   (mount-point "/mnt/root-fs")
-                   (flags '(bind-mount))
-                   (type "none"))
                  %base-file-systems))
 
   ;; Local admin account for MDC maintenance.
@@ -164,52 +144,12 @@ Happy hacking!\n"))
                              activation-service-type
                              %copy-kernel-and-initrd)
 
-             ;; Connection to the DMZ for public access
-             ;; This is a 10G port.
-             (static-networking-service "enp129s0f0"
-                                        "141.80.181.40"
-                                        #:netmask "255.255.255.0"
-                                        #:gateway "141.80.181.1")
-             ;; Connection to build nodes
-             (static-networking-service "enp129s0f1"
-                                        "141.80.167.131"
-                                        #:netmask "255.255.255.192")
-
+             (service dhcp-client-service-type)
              ;; Allow login over serial console.
              (agetty-service (agetty-configuration
                               (tty "ttyS0")
                               (baud-rate "115200")))
 
-             ;; DNS
-             (service knot-service-type
-                      (knot-configuration
-                        (zones (list (knot-zone-configuration
-                                       (domain "guix.gnu.org")
-                                       (master '("bayfront-master"))
-                                       (acl '("notify-allow")))))
-                        (acls (list (knot-acl-configuration
-                                      (id "notify-allow")
-                                      (address (list bayfront-ip4))
-                                      (action '(notify)))))
-                        (remotes (list (knot-remote-configuration
-                                         (id "bayfront-master")
-                                         (address (list bayfront-ip4)))))))
-
-             ;; Monitoring
-             (service zabbix-agent-service-type)
-             (service zabbix-server-service-type
-                      (zabbix-server-configuration
-                       (include-files '("/root/zabbix-pass"))
-                       (extra-options "AlertScriptsPath=/root/zabbix-alert-scripts\n")))
-             (service zabbix-front-end-service-type
-                      (zabbix-front-end-configuration
-                       (nginx (list %zabbix-nginx-server))
-                       (db-secret-file "/root/zabbix-front-end-secrets")))
-
-             ;; For the Zabbix database.  It was created by manually
-             ;; following the instructions here:
-             ;; https://www.zabbix.com/documentation/3.0/manual/appendix/install/db_scripts
-             (postgresql-service)
 
              (service ntp-service-type)
 
@@ -226,22 +166,10 @@ Happy hacking!\n"))
              (service static-web-site-service-type
                       (static-web-site-configuration
                        (git-url
-                        "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
+                        "git://pelzflorian.de/guix-artwork.git")
                        (directory "/srv/guix.gnu.org")
                        (build-file "website/.guix.scm")))
 
-             ;; 'wip-i18n' branch of guix.gnu.org.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url
-                        "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
-                       (git-ref '(branch . "wip-i18n"))
-                       (directory "/srv/guix.gnu.org-i18n")
-                       (build-file "website/.guix.scm")
-                       (cache-directory "guix.gnu.org-i18n") ;avoid collision
-                       (environment-variables
-                        '(("GUIX_WEB_SITE_ROOT_PATH" . "/.i18n")))))
-
              ;; Manual for the latest stable release.
              (service static-web-site-service-type
                       (static-web-site-configuration
diff --git a/hydra/modules/sysadmin/services.scm b/hydra/modules/sysadmin/services.scm
index 3323efa..22765cf 100644
--- a/hydra/modules/sysadmin/services.scm
+++ b/hydra/modules/sysadmin/services.scm
@@ -96,20 +96,6 @@
 
 (define* (guix-daemon-config #:key (max-jobs 5) (cores 4))
   (guix-configuration
-   ;; Disable substitutes altogether.
-   (use-substitutes? #f)
-   (substitute-urls '())
-   (authorized-keys '())
-
-   ;; We don't want to let builds get stuck for too long, but we still want
-   ;; to allow building, say, Guile 2.2 on armhf-linux, which takes < 3h on
-   ;; an OverDrive 1000.
-   (max-silent-time 3600)
-   (timeout (* 6 3600))
-
-   (log-compression 'gzip)               ;be friendly to 'guix publish' users
-
-   (build-accounts (* 4 max-jobs))
    (extra-options (list "--max-jobs" (number->string max-jobs)
                         "--cores" (number->string cores)
                         "--cache-failures"
@@ -277,30 +263,10 @@
   (cons* (service rottlog-service-type (rottlog-configuration))
          (service mcron-service-type
                   (mcron-configuration
-                   (jobs (cons %certbot-job %gc-jobs))))
-
-         firewall-service
-
-         ;; The Web service.
-         (service guix-publish-service-type
-                  (guix-publish-configuration
-                   (port 3000)
-                   (cache "/var/cache/guix/publish")
-                   (ttl nar-ttl)
-                   (compression '(("gzip" 9) ("lzip" 9)))
-                   (workers publish-workers)))
+                   (jobs (list))))
 
          %nginx-mime-types
          %nginx-cache-activation
-
-         (service cuirass-service-type
-                  (cuirass-configuration
-                   (cuirass cuirass-without-fiber-tests)
-                   (interval (* 5 60))
-                   (ttl (quotient nar-ttl 2))
-                   (specifications (cuirass-specs systems))))
-
-         (service openssh-service-type)
          (service sysadmin-service-type sysadmins)
 
          (append (if nginx-config-file
@@ -309,9 +275,6 @@
                                      (file nginx-config-file))))
                      '())
                  (modify-services %base-services
-                   (guix-service-type
-                    config => (guix-daemon-config #:max-jobs max-jobs
-                                                  #:cores cores))
                    (login-service-type
                     config => (login-configuration
                                (inherit config)
diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 303fd35..954b47f 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -157,27 +157,6 @@
 PUBLISH-URL."
   (append (publish-locations publish-url)
           (list
-           ;; Cuirass.
-           (nginx-location-configuration
-            (uri "/")
-            (body (list "proxy_pass http://localhost:8081;")))
-           (nginx-location-configuration
-            (uri "~ ^/admin")
-            (body
-             (list "if ($ssl_client_verify != SUCCESS) { return 403; } proxy_pass http://localhost:8081;")))
-
-           (nginx-location-configuration
-            (uri "/static")
-            (body
-             (list
-              "proxy_pass http://localhost:8081;"
-              ;; Let browsers cache this for a while.
-              "expires 10d;"
-              ;; Cache quite aggressively.
-              "proxy_cache static;"
-              "proxy_cache_valid 200 5d;"
-              "proxy_cache_valid any 10m;"
-              "proxy_ignore_client_abort on;")))
 
            (nginx-location-configuration          ;certbot
             (uri "/.well-known")
@@ -485,27 +464,6 @@ PUBLISH-URL."
 (define %berlin-servers
   (list
    ;; Plain HTTP
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("berlin.guixsd.org"
-                   "ci.guix.info"
-                   "ci.guix.gnu.org"))
-    (locations (berlin-locations %publish-url))
-    (raw-content
-     (list
-      "access_log  /var/log/nginx/http.access.log;"
-      "proxy_set_header X-Forwarded-Host $host;"
-      "proxy_set_header X-Forwarded-Port $server_port;"
-      "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("bootstrappable.org"
-                   "www.bootstrappable.org"))
-    (root "/home/rekado/bootstrappable.org")
-    (raw-content
-     (list
-      "access_log /var/log/nginx/bootstrappable.access.log;")))
 
    (nginx-server-configuration
     (listen '("80"))
@@ -515,203 +473,7 @@ PUBLISH-URL."
     (raw-content
      (list
       "access_log /var/log/nginx/guix-info.access.log;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("guix.info"
-                   "www.guix.info"))
-    (locations guix.info-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("issues.guix.info"
-                   "issues.guix.gnu.org"))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration ;certbot
-            (uri "/.well-known")
-            (body (list "root /var/www;")))
-           (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (list
-      "access_log /var/log/nginx/issues-guix-info.access.log;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("workflows.guix.info"
-                   "workflow.guix.info"
-                   "guixwl.org"
-                   "www.guixwl.org"))
-    (root "/home/rekado/gwl/")
-    (locations
-     (list (nginx-location-configuration ;certbot
-            (uri "/.well-known")
-            (body (list "root /var/www;")))
-
-           (nginx-location-configuration
-            (uri "/manual")
-            (body (list "alias /srv/gwl-manual;")))
-
-           ;; Pass requests to 'guix workflow --web-interface'.
-           (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:5000;")))))
-    (raw-content
-     (list
-      "access_log /var/log/nginx/workflows-guix-info.access.log;")))
-        
-   ;; HTTPS servers
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("berlin.guixsd.org"
-                   "ci.guix.info"
-                   "ci.guix.gnu.org"))
-    (ssl-certificate (le "berlin.guixsd.org"))
-    (ssl-certificate-key (le "berlin.guixsd.org" 'key))
-    (locations (berlin-locations %publish-url))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log  /var/log/nginx/https.access.log;"
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       ;; For Cuirass admin interface authentication
-       "ssl_client_certificate /etc/ssl-ca/certs/ca.crt;"
-       "ssl_crl /etc/ssl-ca/private/ca.crl;"
-       "ssl_verify_client optional;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("qualif.ci.guix.gnu.org"))
-    (locations (berlin-locations "http://localhost:3003"))
-    (raw-content
-     (append %tls-settings
-             '("access_log  /var/log/nginx/qualif.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("bootstrappable.org"
-                   "www.bootstrappable.org"))
-    (ssl-certificate (le "bootstrappable.org"))
-    (ssl-certificate-key (le "bootstrappable.org" 'key))
-    (root "/home/rekado/bootstrappable.org")
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/bootstrappable.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("guix.info"
-                   "www.guix.info"))
-    (ssl-certificate (le "guix.info"))
-    (ssl-certificate-key (le "guix.info" 'key))
-    (locations guix.info-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("guix.gnu.org"))
-    (ssl-certificate (le "guix.gnu.org"))
-    (ssl-certificate-key (le "guix.gnu.org" 'key))
-    (root "/srv/guix.gnu.org")
-    (locations guix.gnu.org-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("issues.guix.info"))
-    (ssl-certificate (le "issues.guix.info"))
-    (ssl-certificate-key (le "issues.guix.info" 'key))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/issues-guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("issues.guix.gnu.org"))
-    (ssl-certificate (le "issues.guix.gnu.org"))
-    (ssl-certificate-key (le "issues.guix.gnu.org" 'key))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/issues-guix-gnu-org.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("workflows.guix.info"
-                   "workflow.guix.info"
-                   "guixwl.org"
-                   "www.guixwl.org"))
-    (ssl-certificate (le "www.guixwl.org"))
-    (ssl-certificate-key (le "www.guixwl.org" 'key))
-    (root "/home/rekado/gwl/")
-    (locations
-     (list
-      (nginx-location-configuration
-       (uri "/manual")
-       (body (list "alias /srv/gwl-manual;")))
-      (nginx-location-configuration
-       (uri "/")
-       (body '("proxy_pass http://localhost:5000;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/workflows-guix-info.https.access.log;"))))))
-
+))
 (define %extra-content
   (list
    "default_type  application/octet-stream;"
@@ -774,6 +536,7 @@ PUBLISH-URL."
 
 (define %nginx-configuration
   (nginx-configuration
+   (server-names-hash-bucket-size 64)
    (server-blocks %berlin-servers)
    (global-directives
     ;; This is a 72-core machine, but let's not use all of them for nginx.
-- 
2.26.0


--f2y56uww2ligiehc
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0002-remove-rottlog.patch"

From 8b8f7a404b29ab3341b7dd19dcd1c5415723c1a0 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Wed, 8 Apr 2020 21:08:57 +0200
Subject: [PATCH 2/2] remove rottlog

---
 hydra/modules/sysadmin/services.scm | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/hydra/modules/sysadmin/services.scm b/hydra/modules/sysadmin/services.scm
index 22765cf..fe023ad 100644
--- a/hydra/modules/sysadmin/services.scm
+++ b/hydra/modules/sysadmin/services.scm
@@ -260,8 +260,7 @@
                             (nar-ttl (* 90 24 3600))
                             (publish-workers 6))
   "Return the list of services for the build farm frontend."
-  (cons* (service rottlog-service-type (rottlog-configuration))
-         (service mcron-service-type
+  (cons* (service mcron-service-type
                   (mcron-configuration
                    (jobs (list))))
 
-- 
2.26.0


--f2y56uww2ligiehc--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 18:58:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 09 14:58:28 2020
Received: from localhost ([127.0.0.1]:54434 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMcNg-0000nh-BB
	for submit <at> debbugs.gnu.org; Thu, 09 Apr 2020 14:58:28 -0400
Received: from imta-35.everyone.net ([216.200.145.35]:60276
 helo=imta-38.everyone.net)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <bokr@HIDDEN>) id 1jMcNe-0000nY-On
 for 26302 <at> debbugs.gnu.org; Thu, 09 Apr 2020 14:58:27 -0400
Received: from pps.filterd (m0004961.ppops.net [127.0.0.1])
 by imta-38.everyone.net (8.16.0.27/8.16.0.27) with SMTP id 039Ijx7a005222;
 Thu, 9 Apr 2020 11:58:25 -0700
X-Eon-Originating-Account: KdPKIsWkTMppgSquCBiLuompPmfsmg0srBM1D5PlzXM
X-Eon-Dm: m0116293.ppops.net
Received: by m0116293.mta.everyone.net (EON-AUTHRELAY2 - 53b92cd0)
 id m0116293.5e67f91c.28a05a; Thu, 9 Apr 2020 11:58:24 -0700
X-Eon-Sig: AQMHrIJej3BQjeoVRwIAAAAE,53e583c8df4afbf34fea173aa4cbe187
X-Eip: Ovxr8RykBVNvpe69oUYRu5jISvvakVJOSo5sAZtmYPY
Date: Thu, 9 Apr 2020 20:58:14 +0200
From: Bengt Richter <bokr@HIDDEN>
To: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18?= =?utf-8?B?buKAmWQ=?=
 web site
Message-ID: <20200409185814.GA12183@LionPure>
References: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
 <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
User-Agent: Mutt/1.10.1 (2018-07-13)
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.676
 definitions=2020-04-09_06:2020-04-07,
 2020-04-09 signatures=0
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0
 priorityscore=1501 malwarescore=0
 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1034
 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=972 adultscore=0
 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-2002250000
 definitions=main-2004090135
X-Spam-Score: -0.4 (/)
X-Debbugs-Envelope-To: 26302
Cc: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Reply-To: Bengt Richter <bokr@HIDDEN>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.4 (-)

Hi Florian,

On +2020-04-09 19:31:02 +0200, pelzflorian (Florian Pelz) wrote:
> On Thu, Apr 09, 2020 at 05:27:05PM +0200, Ludovic Courtès wrote:
> > Hi Florian,
> > 
> > "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > 
> > > +   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd")
> > 
> > Does that mean that /blog/2015/porting-guix-and-guixsd (without /LANG)
> > will _not_ redirect to /LANG/blog/2015/porting-guix-and-guixsd?
> > 
> > It’s important that all the current URL, without /LANG, remain valid.
> 
> With the new test VM, not all is working.
> 
> /news/porting-guix-and-guixsd.html fails (code 404).
> 
> /blog/2015/porting-guix-and-guixsd fails (code 404).
> 
> /blog/2015/porting-guix-and-guixsd fails (404).
> 
> But /blog/2015/porting-guix-and-guixsd/ works fine.
> 
> Well this is difficult to figure out.
>

Wondering, could dnsmasq help?

> Regards,
> Florian
> 
> 
> 

-- 
Regards,
Bengt Richter




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 17:31:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 09 13:31:07 2020
Received: from localhost ([127.0.0.1]:54392 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMb19-00077L-LO
	for submit <at> debbugs.gnu.org; Thu, 09 Apr 2020 13:31:07 -0400
Received: from pelzflorian.de ([5.45.111.108]:58774 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jMb17-00077C-HR
 for 26302 <at> debbugs.gnu.org; Thu, 09 Apr 2020 13:31:06 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 0DD3B36055C;
 Thu,  9 Apr 2020 19:31:04 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1586453464;
 bh=d1yxSH7vxgtjzfqXJpaFj9Gy4Gkexe4yXXBksbJddX0=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=ulp0jpKI0AsAlyDxiyEh0IZPpO+s6U37bn+5b1AhQh1c3enqy67aS+FDc74ilu9st
 DHjs2GlTjZwoFjYy7cLWOBGOpseT3sha/cWHWEXBKoEjO2FhBQswunNkNzgDcKUtVn
 dlzcB0vvPimKrGDF96+gVmLYHF1iqhdXcy8MIoaE=
Date: Thu, 9 Apr 2020 19:31:02 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200409173102.gaheruhtp7fg6cgg@HIDDEN>
References: <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 <878sj43cja.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <878sj43cja.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 09, 2020 at 05:27:05PM +0200, Ludovic Courtès wrote:
> Hi Florian,
> 
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> 
> > +   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd")
> 
> Does that mean that /blog/2015/porting-guix-and-guixsd (without /LANG)
> will _not_ redirect to /LANG/blog/2015/porting-guix-and-guixsd?
> 
> It’s important that all the current URL, without /LANG, remain valid.

With the new test VM, not all is working.

/news/porting-guix-and-guixsd.html fails (code 404).

/blog/2015/porting-guix-and-guixsd fails (code 404).

/blog/2015/porting-guix-and-guixsd fails (404).

But /blog/2015/porting-guix-and-guixsd/ works fine.

Well this is difficult to figure out.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 15:27:14 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 09 11:27:14 2020
Received: from localhost ([127.0.0.1]:54339 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMZ5G-0003w1-9O
	for submit <at> debbugs.gnu.org; Thu, 09 Apr 2020 11:27:14 -0400
Received: from eggs.gnu.org ([209.51.188.92]:34657)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1jMZ5F-0003vo-Cj
 for 26302 <at> debbugs.gnu.org; Thu, 09 Apr 2020 11:27:13 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:48774)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1jMZ5A-00004s-6z; Thu, 09 Apr 2020 11:27:08 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=42560 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1jMZ59-00089Z-4Q; Thu, 09 Apr 2020 11:27:07 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
References: <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
 <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 21 Germinal an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Thu, 09 Apr 2020 17:27:05 +0200
In-Reply-To: <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
 (pelzflorian@HIDDEN's message of "Thu, 9 Apr 2020 16:57:30
 +0200")
Message-ID: <878sj43cja.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Hi Florian,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> +   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/port=
ing-guix-and-guixsd")

Does that mean that /blog/2015/porting-guix-and-guixsd (without /LANG)
will _not_ redirect to /LANG/blog/2015/porting-guix-and-guixsd?

It=E2=80=99s important that all the current URL, without /LANG, remain vali=
d.

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 14:57:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 09 10:57:36 2020
Received: from localhost ([127.0.0.1]:54299 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMYca-0003Bt-5u
	for submit <at> debbugs.gnu.org; Thu, 09 Apr 2020 10:57:36 -0400
Received: from pelzflorian.de ([5.45.111.108]:58602 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jMYcX-0003Bj-Kf
 for 26302 <at> debbugs.gnu.org; Thu, 09 Apr 2020 10:57:34 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 30DC136055C;
 Thu,  9 Apr 2020 16:57:32 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1586444252;
 bh=sKHh5b0bUtEl1SkX50f1qmEXqRaAbcBZ0XrkYOlXxpI=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=fNtoku1YIfggkb3wjSDypiYEpqMSMy3AE9js5JCQvVRsyj5ltXckn2H3L+hhu1NB8
 dJmI6F9xqoC3+WItiCqiT8fCYxuLXPypCA8t/F8owMevE/4v0hpIbD/ML20hYf9cQF
 DU/4o38sURYEkUtDtDZMz2oCP1h5MHqOw97NarjA=
Date: Thu, 9 Apr 2020 16:57:30 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200409145730.qd2nqg4gxrf4ofzw@HIDDEN>
References: <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
 <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="zcdijj2hw7447wp5"
Content-Disposition: inline
In-Reply-To: <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--zcdijj2hw7447wp5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Thu, Apr 09, 2020 at 09:45:50AM +0200, pelzflorian (Florian Pelz) wrote:
> It seems redirects broke like
> 
> http://guix.gnu.org/news/gnu-dmd-01-released.html
> 
> on my test VM. :/

This seems to be fixed by using the attached patch instead.

I have not recreated the berlin test VM yet though, only edited
nginx.conf.

Regards,
Florian

--zcdijj2hw7447wp5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="deploy-i18n-with-redirects.patch"

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 303fd35..ff62fec 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -195,73 +195,73 @@ PUBLISH-URL."
    ;; What follows is a list of redirects for URLs that used to be
    ;; available at gnu.org/s/guix--e.g.,
    ;; <http://gnu.org/s/guix/news/porting-guix-and-guixsd.html>.
-   (redirect "/news/feed.xml" "/feeds/blog.atom")
-   (redirect "/news/porting-guix-and-guixsd.html" "/blog/2015/porting-guix-and-guixsd")
-   (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/blog/2015/gnu-guix-welcomes-three-students-for-gsoc")
-   (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/blog/2015/gnu-guix-recruits-for-gsoc")
-   (redirect "/news/one-week-to-fosdem.html" "/blog/2014/one-week-to-fosdem")
-   (redirect "/news/gnu-dmd-02-released.html" "/blog/2014/gnu-dmd-02-released")
-   (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/blog/2014/emacs-as-a-general-purpose-package-manager")
-   (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/blog/2017/join-gnu-guix-for-gsoc-2017")
-   (redirect "/news/gnu-guix-05-released.html" "/blog/2013/gnu-guix-05-released")
-   (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/blog/2014/guix-at-the-2014-gnu-hackers-meeting")
-   (redirect "/news/state-of-aarch64-on-guix.html" "/blog/2017/state-of-aarch64-on-guix")
-   (redirect "/news/coming-events.html" "/blog/2017/coming-events")
-   (redirect "/news/gnu-dmd-01-released.html" "/blog/2013/gnu-dmd-01-released")
-   (redirect "/news/announcing-guix-hpc.html" "/blog/2017/announcing-guix-hpc")
-   (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/blog/2014/gnu-guix-looks-for-gsoc-students")
-   (redirect "/news/guix-at-the-european-lisp-symposium.html" "/blog/2013/guix-at-the-european-lisp-symposium")
-   (redirect "/news/gnu-guix-08-released.html" "/blog/2014/gnu-guix-08-released")
-   (redirect "/news/gnu-guix-090-released.html" "/blog/2015/gnu-guix-090-released")
-   (redirect "/news/index.html" "/blog/")
-   (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/blog/2016/gnu-guix-welcomes-four-students-for-gsoc")
-   (redirect "/news/gnu-guix-081-released.html" "/blog/2015/gnu-guix-081-released")
-   (redirect "/news/timely-delivery-of-security-updates.html" "/blog/2016/timely-delivery-of-security-updates")
-   (redirect "/news/guix-at-openbio-codefest-2014.html" "/blog/2014/guix-at-openbio-codefest-2014")
-   (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th")
-   (redirect "/news/gnu-guix-at-fosdem.html" "/blog/2015/gnu-guix-at-fosdem")
-   (redirect "/news/gnu-guix-082-released.html" "/blog/2015/gnu-guix-082-released")
-   (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th")
-   (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/blog/2013/back-from-the-gnu-hackers-meeting")
-   (redirect "/news/reproducible-build-summit-2nd-edition.html" "/blog/2016/reproducible-build-summit-2nd-edition")
-   (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/blog/2015/gnu-guix-talk-in-rennes-france-november-9th")
-   (redirect "/news/gnu-guix-01-released.html" "/blog/2013/gnu-guix-01-released")
-   (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/blog/2015/guix-tox-talk-at-pyconfr-october-17th")
-   (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/blog/2017/gnu-guix-and-guixsd-0.13.0-released")
-   (redirect "/news/guix-gets-cross-compilation-support.html" "/blog/2013/guix-gets-cross-compilation-support")
-   (redirect "/news/gnu-guix-06-released.html" "/blog/2014/gnu-guix-06-released")
-   (redirect "/news/meet-guix-at-fosdem.html" "/blog/2016/meet-guix-at-fosdem")
-   (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix")
-   (redirect "/news/container-provisioning-with-guix.html" "/blog/2015/container-provisioning-with-guix")
-   (redirect "/news/guixsd-system-tests.html" "/blog/2016/guixsd-system-tests")
-   (redirect "/news/gnu-guix--guixsd-0100-released.html" "/blog/2016/gnu-guix--guixsd-0100-released")
-   (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/blog/2016/gnu-guix-and-guixsd-0110-released")
-   (redirect "/news/boot-to-guile.html" "/blog/2013/boot-to-guile")
-   (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th")
-   (redirect "/news/running-system-services-in-containers.html" "/blog/2017/running-system-services-in-containers")
-   (redirect "/news/growing-our-build-farm.html" "/blog/2016/growing-our-build-farm")
-   (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips")
-   (redirect "/news/guix-at-libreplanet-2016.html" "/blog/2016/guix-at-libreplanet-2016")
-   (redirect "/news/guix--gsoc.html" "/blog/2013/guix--gsoc")
-   (redirect "/news/service-composition-in-guixsd.html" "/blog/2015/service-composition-in-guixsd")
-   (redirect "/news/creating-bundles-with-guix-pack.html" "/blog/2017/creating-bundles-with-guix-pack")
-   (redirect "/news/back-from-the-european-lisp-symposium.html" "/blog/2013/back-from-the-european-lisp-symposium")
-   (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/blog/2013/gnu-guix-04-released-happy-birthday-gnu")
-   (redirect "/news/reproducible-builds-a-status-update.html" "/blog/2017/reproducible-builds-a-status-update")
-   (redirect "/news/gnu-guix-083-released.html" "/blog/2015/gnu-guix-083-released")
-   (redirect "/news/join-gnu-guix-for-gsoc.html" "/blog/2016/join-gnu-guix-for-gsoc")
-   (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/blog/2016/gnu-guix-and-guixsd-0120-released")
-   (redirect "/news/meet-guix-at-fosdem-2017.html" "/blog/2017/meet-guix-at-fosdem-2017")
-   (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29")
-   (redirect "/news/gnome-in-guixsd.html" "/blog/2016/gnome-in-guixsd")
-   (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu")
-   (redirect "/news/gnu-guix-03-released.html" "/blog/2013/gnu-guix-03-released")
-   (redirect "/news/gnu-guix-07-released.html" "/blog/2014/gnu-guix-07-released")
-   (redirect "/news/gsoc-update.html" "/blog/2015/gsoc-update")
-   (redirect "/news/gnu-guix-02-released.html" "/blog/2013/gnu-guix-02-released")
-   (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf")
-   (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year")
-   (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/blog/2015/reproducible-builds-a-means-to-an-end")
+   (redirect "/news/feed.xml" "/$lang/feeds/blog.atom")
+   (redirect "/news/porting-guix-and-guixsd.html" "/$lang/blog/2015/porting-guix-and-guixsd")
+   (redirect "/news/gnu-guix-welcomes-three-students-for-gsoc.html" "/$lang/blog/2015/gnu-guix-welcomes-three-students-for-gsoc")
+   (redirect "/news/gnu-guix-recruits-for-gsoc.html" "/$lang/blog/2015/gnu-guix-recruits-for-gsoc")
+   (redirect "/news/one-week-to-fosdem.html" "/$lang/blog/2014/one-week-to-fosdem")
+   (redirect "/news/gnu-dmd-02-released.html" "/$lang/blog/2014/gnu-dmd-02-released")
+   (redirect "/news/emacs-as-a-general-purpose-package-manager.html" "/$lang/blog/2014/emacs-as-a-general-purpose-package-manager")
+   (redirect "/news/join-gnu-guix-for-gsoc-2017.html" "/$lang/blog/2017/join-gnu-guix-for-gsoc-2017")
+   (redirect "/news/gnu-guix-05-released.html" "/$lang/blog/2013/gnu-guix-05-released")
+   (redirect "/news/guix-at-the-2014-gnu-hackers-meeting.html" "/$lang/blog/2014/guix-at-the-2014-gnu-hackers-meeting")
+   (redirect "/news/state-of-aarch64-on-guix.html" "/$lang/blog/2017/state-of-aarch64-on-guix")
+   (redirect "/news/coming-events.html" "/$lang/blog/2017/coming-events")
+   (redirect "/news/gnu-dmd-01-released.html" "/$lang/blog/2013/gnu-dmd-01-released")
+   (redirect "/news/announcing-guix-hpc.html" "/$lang/blog/2017/announcing-guix-hpc")
+   (redirect "/news/gnu-guix-looks-for-gsoc-students.html" "/$lang/blog/2014/gnu-guix-looks-for-gsoc-students")
+   (redirect "/news/guix-at-the-european-lisp-symposium.html" "/$lang/blog/2013/guix-at-the-european-lisp-symposium")
+   (redirect "/news/gnu-guix-08-released.html" "/$lang/blog/2014/gnu-guix-08-released")
+   (redirect "/news/gnu-guix-090-released.html" "/$lang/blog/2015/gnu-guix-090-released")
+   (redirect "/news/index.html" "/$lang/blog/")
+   (redirect "/news/gnu-guix-welcomes-four-students-for-gsoc.html" "/$lang/blog/2016/gnu-guix-welcomes-four-students-for-gsoc")
+   (redirect "/news/gnu-guix-081-released.html" "/$lang/blog/2015/gnu-guix-081-released")
+   (redirect "/news/timely-delivery-of-security-updates.html" "/$lang/blog/2016/timely-delivery-of-security-updates")
+   (redirect "/news/guix-at-openbio-codefest-2014.html" "/$lang/blog/2014/guix-at-openbio-codefest-2014")
+   (redirect "/news/gnu-guix-talk-in-boston-ma-usa-on-january-20th.html" "/$lang/blog/2016/gnu-guix-talk-in-boston-ma-usa-on-january-20th")
+   (redirect "/news/gnu-guix-at-fosdem.html" "/$lang/blog/2015/gnu-guix-at-fosdem")
+   (redirect "/news/gnu-guix-082-released.html" "/$lang/blog/2015/gnu-guix-082-released")
+   (redirect "/news/chris-webber-talks-about-guix-in-chicago-september-30th.html" "/$lang/blog/2015/chris-webber-talks-about-guix-in-chicago-september-30th")
+   (redirect "/news/back-from-the-gnu-hackers-meeting.html" "/$lang/blog/2013/back-from-the-gnu-hackers-meeting")
+   (redirect "/news/reproducible-build-summit-2nd-edition.html" "/$lang/blog/2016/reproducible-build-summit-2nd-edition")
+   (redirect "/news/gnu-guix-talk-in-rennes-france-november-9th.html" "/$lang/blog/2015/gnu-guix-talk-in-rennes-france-november-9th")
+   (redirect "/news/gnu-guix-01-released.html" "/$lang/blog/2013/gnu-guix-01-released")
+   (redirect "/news/guix-tox-talk-at-pyconfr-october-17th.html" "/$lang/blog/2015/guix-tox-talk-at-pyconfr-october-17th")
+   (redirect "/news/gnu-guix-and-guixsd-0.13.0-released.html" "/$lang/blog/2017/gnu-guix-and-guixsd-0.13.0-released")
+   (redirect "/news/guix-gets-cross-compilation-support.html" "/$lang/blog/2013/guix-gets-cross-compilation-support")
+   (redirect "/news/gnu-guix-06-released.html" "/$lang/blog/2014/gnu-guix-06-released")
+   (redirect "/news/meet-guix-at-fosdem.html" "/$lang/blog/2016/meet-guix-at-fosdem")
+   (redirect "/news/reproducible-and-user-controlled-software-environments-in-hpc-with-guix.html" "/$lang/blog/2015/reproducible-and-user-controlled-software-environments-in-hpc-with-guix")
+   (redirect "/news/container-provisioning-with-guix.html" "/$lang/blog/2015/container-provisioning-with-guix")
+   (redirect "/news/guixsd-system-tests.html" "/$lang/blog/2016/guixsd-system-tests")
+   (redirect "/news/gnu-guix--guixsd-0100-released.html" "/$lang/blog/2016/gnu-guix--guixsd-0100-released")
+   (redirect "/news/gnu-guix-and-guixsd-0110-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0110-released")
+   (redirect "/news/boot-to-guile.html" "/$lang/blog/2013/boot-to-guile")
+   (redirect "/news/gnu-guix-talk-at-opentechsummit-berlin-may-14th.html" "/$lang/blog/2015/gnu-guix-talk-at-opentechsummit-berlin-may-14th")
+   (redirect "/news/running-system-services-in-containers.html" "/$lang/blog/2017/running-system-services-in-containers")
+   (redirect "/news/growing-our-build-farm.html" "/$lang/blog/2016/growing-our-build-farm")
+   (redirect "/news/distro-of-the-linux-based-gnu-system-ported-to-mips.html" "/$lang/blog/2013/distro-of-the-linux-based-gnu-system-ported-to-mips")
+   (redirect "/news/guix-at-libreplanet-2016.html" "/$lang/blog/2016/guix-at-libreplanet-2016")
+   (redirect "/news/guix--gsoc.html" "/$lang/blog/2013/guix--gsoc")
+   (redirect "/news/service-composition-in-guixsd.html" "/$lang/blog/2015/service-composition-in-guixsd")
+   (redirect "/news/creating-bundles-with-guix-pack.html" "/$lang/blog/2017/creating-bundles-with-guix-pack")
+   (redirect "/news/back-from-the-european-lisp-symposium.html" "/$lang/blog/2013/back-from-the-european-lisp-symposium")
+   (redirect "/news/gnu-guix-04-released-happy-birthday-gnu.html" "/$lang/blog/2013/gnu-guix-04-released-happy-birthday-gnu")
+   (redirect "/news/reproducible-builds-a-status-update.html" "/$lang/blog/2017/reproducible-builds-a-status-update")
+   (redirect "/news/gnu-guix-083-released.html" "/$lang/blog/2015/gnu-guix-083-released")
+   (redirect "/news/join-gnu-guix-for-gsoc.html" "/$lang/blog/2016/join-gnu-guix-for-gsoc")
+   (redirect "/news/gnu-guix-and-guixsd-0120-released.html" "/$lang/blog/2016/gnu-guix-and-guixsd-0120-released")
+   (redirect "/news/meet-guix-at-fosdem-2017.html" "/$lang/blog/2017/meet-guix-at-fosdem-2017")
+   (redirect "/news/join-guix-for-an-on-line-hackathon-on-sep-28-29.html" "/$lang/blog/2013/join-guix-for-an-on-line-hackathon-on-sep-28-29")
+   (redirect "/news/gnome-in-guixsd.html" "/$lang/blog/2016/gnome-in-guixsd")
+   (redirect "/news/introducing-guix-a-package-manager-and-distro-for-gnu.html" "/$lang/blog/2012/introducing-guix-a-package-manager-and-distro-for-gnu")
+   (redirect "/news/gnu-guix-03-released.html" "/$lang/blog/2013/gnu-guix-03-released")
+   (redirect "/news/gnu-guix-07-released.html" "/$lang/blog/2014/gnu-guix-07-released")
+   (redirect "/news/gsoc-update.html" "/$lang/blog/2015/gsoc-update")
+   (redirect "/news/gnu-guix-02-released.html" "/$lang/blog/2013/gnu-guix-02-released")
+   (redirect "/news/guix-starts-fundraising-campaign-with-support-from-the-fsf.html" "/$lang/blog/2015/guix-starts-fundraising-campaign-with-support-from-the-fsf")
+   (redirect "/news/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year.html" "/$lang/blog/2015/gnu-guix-ported-to-arm-and-other-niceties-of-the-new-year")
+   (redirect "/news/reproducible-builds-a-means-to-an-end.html" "/$lang/blog/2015/reproducible-builds-a-means-to-an-end")
    (redirect "/manual/html_node/Substitutes.html" "../en/html_node/Substitutes.html")
    (redirect "/manual/html_node/GNU-Free-Documentation-License.html" "../en/html_node/GNU-Free-Documentation-License.html")
    (redirect "/manual/html_node/The-Store-Monad.html" "../en/html_node/The-Store-Monad.html")
@@ -468,6 +468,10 @@ PUBLISH-URL."
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list "try_files /$lang/$uri $uri =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
@@ -514,6 +518,7 @@ PUBLISH-URL."
     (locations guix.gnu.org-locations)
     (raw-content
      (list
+      "rewrite (.*)/$ $1/index.html;"
       "access_log /var/log/nginx/guix-info.access.log;")))
 
    (nginx-server-configuration
@@ -525,6 +530,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -621,6 +627,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -634,6 +641,7 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
 
    (nginx-server-configuration
@@ -717,6 +725,8 @@ PUBLISH-URL."
    "default_type  application/octet-stream;"
    "sendfile        on;"
 
+   "set_from_accept_language $lang en de;"
+
    ;; Maximum chunk size to send.  Partly this is a workaround for
    ;; <http://bugs.gnu.org/19939>, but also the nginx docs mention that
    ;; "Without the limit, one fast connection may seize the worker
@@ -775,6 +785,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (modules
+    (list
+     ;; Module to redirect users to the localized pages of their choice.
+     (file-append nginx-accept-language-module
+                  "/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (global-directives
     ;; This is a 72-core machine, but let's not use all of them for nginx.
     '((worker_processes . 16)

--zcdijj2hw7447wp5--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 07:45:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 09 03:45:56 2020
Received: from localhost ([127.0.0.1]:53189 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMRsq-0003nE-3Q
	for submit <at> debbugs.gnu.org; Thu, 09 Apr 2020 03:45:56 -0400
Received: from pelzflorian.de ([5.45.111.108]:58122 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jMRsn-0003jf-5v
 for 26302 <at> debbugs.gnu.org; Thu, 09 Apr 2020 03:45:54 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id B586E360566;
 Thu,  9 Apr 2020 09:45:51 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1586418351;
 bh=CbyscpHto7WkVhSq8tPkpIozMecgvuHNu/JBrc660PY=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=aRprtcVT+trNefekrmLitr6Wlg/tDw20+nXo0d6vvwOdDSc10oMTsVjIuVvL/LMHh
 IiHiMSPfBxYwt9smMv/gRWNy+35oZCBYCQZjPEsWroEEngKpxv22Q476NvOEOmF/O3
 FcABlpu6KjoyzIqCZv3pPjAWb3+oFa4rPlJgLj7I=
Date: Thu, 9 Apr 2020 09:45:50 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200409074550.ecq4ltzvu27o3js3@HIDDEN>
References: <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
 <20200409032146.tm76qkrwwydfadye@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20200409032146.tm76qkrwwydfadye@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 09, 2020 at 05:21:46AM +0200, pelzflorian (Florian Pelz) wrote:
> but I could not yet test building the
> website i.e. if the redirects really work correctly.

It seems redirects broke like

http://guix.gnu.org/news/gnu-dmd-01-released.html

on my test VM. :/




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 9 Apr 2020 03:21:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Apr 08 23:21:58 2020
Received: from localhost ([127.0.0.1]:53053 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jMNlK-00029O-Ji
	for submit <at> debbugs.gnu.org; Wed, 08 Apr 2020 23:21:58 -0400
Received: from pelzflorian.de ([5.45.111.108]:57770 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jMNlF-00029D-RP
 for 26302 <at> debbugs.gnu.org; Wed, 08 Apr 2020 23:21:53 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 3A6EB360566;
 Thu,  9 Apr 2020 05:21:48 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1586402508;
 bh=yEoIdPRWoaai8rWOrZ0pRRc/x3BlTFfUWtBdT0+ftOM=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=SLmQQHQ6h1Hi/7t0/y6Q1uVuPgWf1L2JLdetF02Qw1q4lL8ESTB2R5v+2HNrldqKi
 86rboZDKT0EboDvNQ6mlXYwrzA0RpDbaD4mlrN0lITQ5t88lNXPWsyYllx6VPgAayA
 2pt0VbUYjrlLScGg+kerKAEva61dlTgrjfPngcm8=
Date: Thu, 9 Apr 2020 05:21:46 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200409032146.tm76qkrwwydfadye@HIDDEN>
References: <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
 <20200407220225.zlw64sywakcajvkt@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="rtwdw7hi5bzmgb7o"
Content-Disposition: inline
In-Reply-To: <20200407220225.zlw64sywakcajvkt@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--rtwdw7hi5bzmgb7o
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Wed, Apr 08, 2020 at 12:02:25AM +0200, pelzflorian (Florian Pelz) wrote:
> set_from_accept_language should better be a global directive I think.
> 

No, I was wrong.  set_from_accept_language must only appear once, but
not in a global directive.  I put it in %extra-content for the
nginx-configuration now.  It seems the attached patch works (after
removing the rottlog service), but I could not yet test building the
website i.e. if the redirects really work correctly.  It is so slow.

Then again, better break the website before the release than after (if
it does not work).  I cannot test tls and certbot anyway.

Regards,
Florian

--rtwdw7hi5bzmgb7o
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="deploy-i18n.patch"

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 303fd35..a57640e 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -461,20 +461,24 @@ PUBLISH-URL."
     (body (list "alias /srv/guix.gnu.org-i18n;")))
 
    (git-http-nginx-location-configuration
     (git-http-configuration))
 
    ;; For Hurd bootstrap binaries.
    (nginx-location-configuration
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list "try_files /$lang/$uri $uri =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
 
 (define guix.info-locations
   (list (nginx-location-configuration             ;certbot
          (uri "~ ^/\\.well-known")
          (body (list "root /var/www;")))
         (nginx-location-configuration
          (uri "~ /(.*)")
@@ -507,31 +511,33 @@ PUBLISH-URL."
      (list
       "access_log /var/log/nginx/bootstrappable.access.log;")))
 
    (nginx-server-configuration
     (listen '("80"))
     (server-name '("guix.gnu.org"))
     (root "/srv/guix.gnu.org")
     (locations guix.gnu.org-locations)
     (raw-content
      (list
+      "rewrite (.*)/$ $1/index.html;"
       "access_log /var/log/nginx/guix-info.access.log;")))
 
    (nginx-server-configuration
     (listen '("80"))
     (server-name '("guix.info"
                    "www.guix.info"))
     (locations guix.info-locations)
     (raw-content
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
     (listen '("80"))
     (server-name '("issues.guix.info"
                    "issues.guix.gnu.org"))
     (root "/home/rekado/mumi/")
     (locations
      (list (nginx-location-configuration ;certbot
             (uri "/.well-known")
@@ -614,33 +620,35 @@ PUBLISH-URL."
     (listen '("443 ssl"))
     (server-name '("guix.info"
                    "www.guix.info"))
     (ssl-certificate (le "guix.info"))
     (ssl-certificate-key (le "guix.info" 'key))
     (locations guix.info-locations)
     (raw-content
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
     (listen '("443 ssl"))
     (server-name '("guix.gnu.org"))
     (ssl-certificate (le "guix.gnu.org"))
     (ssl-certificate-key (le "guix.gnu.org" 'key))
     (root "/srv/guix.gnu.org")
     (locations guix.gnu.org-locations)
     (raw-content
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
        "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
 
    (nginx-server-configuration
     (listen '("443 ssl"))
     (server-name '("issues.guix.info"))
     (ssl-certificate (le "issues.guix.info"))
     (ssl-certificate-key (le "issues.guix.info" 'key))
     (root "/home/rekado/mumi/")
     (locations
      (list (nginx-location-configuration
@@ -710,20 +718,22 @@ PUBLISH-URL."
        "proxy_send_timeout          600;"
        "proxy_read_timeout          600;"
        "send_timeout                600;"
        "access_log /var/log/nginx/workflows-guix-info.https.access.log;"))))))
 
 (define %extra-content
   (list
    "default_type  application/octet-stream;"
    "sendfile        on;"
 
+   "set_from_accept_language $lang en de;"
+
    ;; Maximum chunk size to send.  Partly this is a workaround for
    ;; <http://bugs.gnu.org/19939>, but also the nginx docs mention that
    ;; "Without the limit, one fast connection may seize the worker
    ;; process entirely."
    ;;  <http://nginx.org/en/docs/http/ngx_http_core_module#sendfile_max_chunk>
    "sendfile_max_chunk 1m;"
 
    "keepalive_timeout  65;"
 
    ;; Use HTTP 1.1 to talk to the backend so we benefit from keep-alive
@@ -768,20 +778,25 @@ PUBLISH-URL."
    "proxy_connect_timeout 7s;"
    "proxy_read_timeout 10s;"
    "proxy_send_timeout 10s;"
 
    ;; Cache timeouts for a little while to avoid increasing pressure.
    "proxy_cache_valid 504 30s;"))
 
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (modules
+    (list
+     ;; Module to redirect users to the localized pages of their choice.
+     (file-append nginx-accept-language-module
+                  "/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (global-directives
     ;; This is a 72-core machine, but let's not use all of them for nginx.
     '((worker_processes . 16)
       (pcre_jit . on)
       (events . ((worker_connections . 1024)))))
    (extra-content
     (string-join %extra-content "\n"))))
 
 (define %zabbix-nginx-server
   (nginx-server-configuration

--rtwdw7hi5bzmgb7o--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 7 Apr 2020 22:02:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Apr 07 18:02:29 2020
Received: from localhost ([127.0.0.1]:51138 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jLwIe-0006Fn-PO
	for submit <at> debbugs.gnu.org; Tue, 07 Apr 2020 18:02:28 -0400
Received: from pelzflorian.de ([5.45.111.108]:55606 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jLwId-0006Fg-Ng
 for 26302 <at> debbugs.gnu.org; Tue, 07 Apr 2020 18:02:28 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id BE02436055C;
 Wed,  8 Apr 2020 00:02:26 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1586296946;
 bh=S00ouFugoXmxcFbaCIrKQVM7nSKt31xtJjGjIlKvWMQ=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=XK9rrxDUNfquoJvuWHrr1wxYc6ma1H2oxTwoZHZf4yjxS9s5Gn0EREmTHhjbMkKBt
 sAH4NZkZw3cSBRBNdkp5P2zzZkHlDYzpryn77LHZjCJdKi5ArYp8v+FwG5Dyu2usBS
 fPD4MOJscqX7UOfrAl/6VviyM3Y59YOHx6+VdqwI=
Date: Wed, 8 Apr 2020 00:02:25 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200407220225.zlw64sywakcajvkt@HIDDEN>
References: <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 <87sghf6lkv.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87sghf6lkv.fsf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Tue, Apr 07, 2020 at 11:18:56PM +0200, Ludovic Courtès wrote:
> I haven’t tested it though.  I’m a bit concerned about the rewrite rule,
> because there are bits that should not be rewritten, like:
> 
>   /manual (must not be: /LANG/manual, at least for now)
>   /guix-refcard.pdf
>   …
> 
> Will there be rewritten with the config below?

These should be OK.  Because it uses try_files, both /en/manual and
/manual should be checked.  guix-refcard.pdf does not end in .html and
therefore is not rewritten.

set_from_accept_language should better be a global directive I think.


> I know you’re already busy with the installer, Florian, so maybe we can
> postpone that after the release, unless someone else champions to test it!
> 
> Thanks,
> Ludo’.
> 

I will test, but I cannot test if certbot and tls work.  But of course
the translated website can wait.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 7 Apr 2020 21:19:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Apr 07 17:19:11 2020
Received: from localhost ([127.0.0.1]:51115 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jLvch-00058C-Mj
	for submit <at> debbugs.gnu.org; Tue, 07 Apr 2020 17:19:11 -0400
Received: from eggs.gnu.org ([209.51.188.92]:51538)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1jLvce-00057a-Dj
 for 26302 <at> debbugs.gnu.org; Tue, 07 Apr 2020 17:19:06 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:37989)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1jLvcZ-00023o-1S; Tue, 07 Apr 2020 17:18:59 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=47520 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1jLvcY-0006KP-Au; Tue, 07 Apr 2020 17:18:58 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
Date: Tue, 07 Apr 2020 23:18:56 +0200
In-Reply-To: <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
 (pelzflorian@HIDDEN's message of "Thu, 26 Mar 2020 00:21:00
 +0100")
Message-ID: <87sghf6lkv.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hi Florian,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

>> What would it take to complete the i18n=E2=80=99d web site deployment?  =
It would
>> be great to get that done by the time of the next release.
>>
>
> set_from_accept_language $lang en de;
>
> would better be a global directive.  en comes first so it is the
> default.
>
> Otherwise it=E2=80=99s the changes you quoted.  Testing is difficult thou=
gh.
> I tested without https and with some modifications to make berlin.scm
> work in a virtual machine.

I had to slightly adjust your changes, leading to the patch below.

I haven=E2=80=99t tested it though.  I=E2=80=99m a bit concerned about the =
rewrite rule,
because there are bits that should not be rewritten, like:

  /manual (must not be: /LANG/manual, at least for now)
  /guix-refcard.pdf
  =E2=80=A6

Will there be rewritten with the config below?

I know you=E2=80=99re already busy with the installer, Florian, so maybe we=
 can
postpone that after the release, unless someone else champions to test it!

Thanks,
Ludo=E2=80=99.


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 303fd35..7e329fc 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -468,6 +468,10 @@ PUBLISH-URL."
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list "try_files /$lang/$uri $uri =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
@@ -514,6 +518,8 @@ PUBLISH-URL."
     (locations guix.gnu.org-locations)
     (raw-content
      (list
+      "rewrite (.*)/$ $1/index.html;"
+      "set_from_accept_language $lang en de;"
       "access_log /var/log/nginx/guix-info.access.log;")))
 
    (nginx-server-configuration
@@ -525,6 +531,8 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
+       "set_from_accept_language $lang en de;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -621,6 +629,8 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
+       "set_from_accept_language $lang en de;"
        "access_log /var/log/nginx/guix-info.https.access.log;"))))
 
    (nginx-server-configuration
@@ -634,6 +644,8 @@ PUBLISH-URL."
      (append
       %tls-settings
       (list
+       "rewrite (.*)/$ $1/index.html;"
+       "set_from_accept_language $lang en de;"
        "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
 
    (nginx-server-configuration
@@ -775,6 +787,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (modules
+    (list
+     ;; Module to redirect users to the localized pages of their choice.
+     (file-append nginx-accept-language-module
+                  "/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (global-directives
     ;; This is a 72-core machine, but let's not use all of them for nginx.
     '((worker_processes . 16)

--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 26 Mar 2020 01:25:05 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 25 21:25:05 2020
Received: from localhost ([127.0.0.1]:57998 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jHHGb-00070O-0R
	for submit <at> debbugs.gnu.org; Wed, 25 Mar 2020 21:25:05 -0400
Received: from pelzflorian.de ([5.45.111.108]:58728 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jHHGZ-0006zi-40
 for 26302 <at> debbugs.gnu.org; Wed, 25 Mar 2020 21:25:03 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 4A29736055C;
 Thu, 26 Mar 2020 02:25:00 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1585185900;
 bh=8X47VD70+2fAWzAiToxa1tn9lsFyoJ2+ETitUqCgTYY=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=y5phLTGyw+TiBRg8DM7Fl70iVBs/3G61SXmLmArUeSruUVTUw1LbinZ3JRMIuDRZl
 JEfbmz5t4MB5uskA3t0WP0YpvPh8fPTW555PjAEz2SjHBF2AkNSfkhr3EF66lHWlKJ
 JPaTWi9AkjH84+xGUI3iZNsH4MdMXkjlZto+yB8I=
Date: Thu, 26 Mar 2020 02:24:59 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200326012459.7npj2vuidyvn2dwb@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
 <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Mar 26, 2020 at 12:21:00AM +0100, pelzflorian (Florian Pelz) wrote:
> I will try rebasing wip-i18n to current master now.

Done.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 25 Mar 2020 23:21:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 25 19:21:11 2020
Received: from localhost ([127.0.0.1]:57984 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jHFKh-0003er-Gn
	for submit <at> debbugs.gnu.org; Wed, 25 Mar 2020 19:21:11 -0400
Received: from pelzflorian.de ([5.45.111.108]:58606 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1jHFKc-0003eW-0W
 for 26302 <at> debbugs.gnu.org; Wed, 25 Mar 2020 19:21:10 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id D8A7936055C;
 Thu, 26 Mar 2020 00:21:01 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1585178462;
 bh=vVnbYtDAoe/wyvZ3jNNx2+sxhlHVrkFRxwaSPdYLNr8=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=d4R9j/ivSl7oEsoUzV19yUmlsfCf+Epg7FozPx4x6Gqnn+3JjpkKAmYQ1tmCnKPat
 jNABOpiwaGP2l9wutQbMSbzHHS4XH6htKrayGWPeF02jAZ/Lq8NjSVlO9e7w2o46N1
 wHbtKi1Dxr1egkjtUwjk+AMxYNgJXTMtoXSglu6Q=
Date: Thu, 26 Mar 2020 00:21:00 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: Deploying the =?utf-8?B?aTE4buKAmWQ=?= web site
Message-ID: <20200325232100.ynsy7xog4vt6nq5q@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 <87d090ibk5.fsf_-_@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87d090ibk5.fsf_-_@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Mar 25, 2020 at 06:33:46PM +0100, Ludovic Courtès wrote:
> Hi Florian,
> 
> We dropped the ball on this, but it looks like we were close to the
> finish line.
> 
> What would it take to complete the i18n’d web site deployment?  It would
> be great to get that done by the time of the next release.
>

set_from_accept_language $lang en de;

would better be a global directive.  en comes first so it is the
default.

Otherwise it’s the changes you quoted.  Testing is difficult though.
I tested without https and with some modifications to make berlin.scm
work in a virtual machine.

I will try rebasing wip-i18n to current master now.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 25 Mar 2020 17:33:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 25 13:33:58 2020
Received: from localhost ([127.0.0.1]:57712 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jH9ug-0002X2-Hg
	for submit <at> debbugs.gnu.org; Wed, 25 Mar 2020 13:33:58 -0400
Received: from eggs.gnu.org ([209.51.188.92]:45681)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1jH9uf-0002Wn-Cz
 for 26302 <at> debbugs.gnu.org; Wed, 25 Mar 2020 13:33:58 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:44678)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1jH9uY-00049d-OC; Wed, 25 Mar 2020 13:33:50 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=35546 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1jH9uX-0003o7-Cs; Wed, 25 Mar 2020 13:33:50 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Deploying the =?utf-8?Q?i18n=E2=80=99d?= web site
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
Date: Wed, 25 Mar 2020 18:33:46 +0100
In-Reply-To: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
 (pelzflorian@HIDDEN's message of "Sun, 17 Nov 2019 17:17:02
 +0100")
Message-ID: <87d090ibk5.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Hi Florian,

We dropped the ball on this, but it looks like we were close to the
finish line.

What would it take to complete the i18n=E2=80=99d web site deployment?  It =
would
be great to get that done by the time of the next release.

Thanks!

Ludo=E2=80=99.

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> First on serving the internationalized website:
>
> The following changes to maintenance:berlin redirect requests for old
> URLs properly *only for non-HTTPS* in local testing on a vm-image.  I
> assume the same will work when added for the HTTPS location, though
> perhaps the line "set_from_accept_language $lang en de;" cannot or
> need not be duplicated for both non-HTTPS and HTTPS.  I hope the
> changes are compatible with the manual and cookbook URLs.  The changes
> would better be tested more but I do not know how.
>
>
> diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
> index 2947759..8b66ba7 100644
> --- a/hydra/nginx/berlin.scm
> +++ b/hydra/nginx/berlin.scm
> @@ -468,6 +468,10 @@ PUBLISH-URL."
>      (uri "/guix")
>      (body (list "root /var/www;")))
>=20=20
> +   (nginx-location-configuration
> +    (uri "~ (.html|.htm)$")
> +    (body (list "try_files /$lang/$uri $uri =3D404;")))
> +
>     (nginx-location-configuration                  ;certbot
>      (uri "/.well-known")
>      (body (list "root /var/www;")))))
> @@ -505,6 +509,9 @@ PUBLISH-URL."
>      (root "/home/rekado/bootstrappable.org")
>      (raw-content
>       (list
> +      "rewrite (.*)/$ $1/index.html;"
> +      ;; put en first so it is the default:
> +      "set_from_accept_language $lang en de;"
>        "access_log /var/log/nginx/bootstrappable.access.log;")))
>=20=20
>     (nginx-server-configuration
> @@ -767,5 +774,11 @@ PUBLISH-URL."
>  (define %nginx-configuration
>    (nginx-configuration
>     (server-blocks %berlin-servers)
> +   (modules
> +    (list
> +     ;; We need this module for redirecting users to the localized
> +     ;; website of their choice.
> +     (file-append nginx-accept-language-module "\
> +/etc/nginx/modules/ngx_http_accept_language_module.so")))
>     (extra-content
>      (string-join %extra-content "\n"))))
>
>
>
> I attach a complete patch that can only be used for testing on a local
> VM.  For testing, I perform the following steps:
>
> cd ~/git/maintenance/hydra/
> GUILE_LOAD_PATH=3D$(readlink -f ~/git/maintenance/hydra/modules):$GUILE_L=
OAD_PATH guix system vm-image --image-size=3D14G berlin.scm --fallback
> cp /gnu/store/mm000wdzkzrvalg09jxk0y6nhi9c4iai-qemu-image berlin1.img
> guix gc -D /gnu/store/mm000wdzkzrvalg09jxk0y6nhi9c4iai-qemu-image
> chmod +w berlin1.img
> qemu-system-x86_64 -enable-kvm berlin1.img -m 2048 -nic tap,ifname=3Dtap0=
,script=3Dno,downscript=3Dno
>
> Note that I use NetworkManager with dnsmasq for a tap0 host-to-guest
> network connection as specified in the Guix manual.
>
> ---
>
> Second, unrelated to serving the website:
>
> I also noticed that Microsoft Internet Explorer 11 cannot display the
> new accessible dropdowns on https://guix.gnu.org/.i18n/en.  Do we
> care?  Perhaps the use of CSS z-index causes the problems.  The
> previous dropdowns used display: none; which made the dropdowns
> not-keyboard navigable.
>
> Regards,
> Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 2 Dec 2019 08:57:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 02 03:57:49 2019
Received: from localhost ([127.0.0.1]:37060 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1ibhWf-0001tU-Fb
	for submit <at> debbugs.gnu.org; Mon, 02 Dec 2019 03:57:49 -0500
Received: from pelzflorian.de ([5.45.111.108]:39136 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1ibhWd-0001tL-5M
 for 26302 <at> debbugs.gnu.org; Mon, 02 Dec 2019 03:57:48 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id F35693604F7;
 Mon,  2 Dec 2019 09:57:45 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1575277066;
 bh=EXEITOkykHOsKCjW2f8O0dlRVo26gdUqw0DgGDjL8yE=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=aRGegbAjITvwV0mbSRrds0OE0WH8hfxcq3Oi56xNFB9gDPVqtOXUatYZ5THW8/vA2
 JNBgRruoUktJXFCj1AruF6psykP49FCb4YVKrpQNY8UQrNmXjOfMx72HMYWbIateDn
 VcsvjZXOCAybslsYEx2SPY9WH/t0QitBcui6oa64=
Date: Mon, 2 Dec 2019 09:57:45 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>,
 sirgazil <sirgazil@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191202085745.o3yh3uqwdbi4fuji@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191117161702.bfmuiukhyacbukqf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sun, Nov 17, 2019 at 05:17:02PM +0100, pelzflorian (Florian Pelz) wrote:
> I also noticed that Microsoft Internet Explorer 11 cannot display the
> new accessible dropdowns on https://guix.gnu.org/.i18n/en.

The issue was IE11 does not support the CSS value “initial”.  I pushed
a new version.  I tested IE11 and it works now.

I believe doing the changes I described in my past email (which I am
responding to) both for the HTTP and HTTPS location will give us a
working translatable website and preserve all URLs.  The
set_from_accept_language line probably need not and cannot be
specified for both locations though, once is enough, I think (perhaps
in extra-content).

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 17 Nov 2019 16:17:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 17 11:17:16 2019
Received: from localhost ([127.0.0.1]:42447 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iWNEZ-0005ZC-0s
	for submit <at> debbugs.gnu.org; Sun, 17 Nov 2019 11:17:16 -0500
Received: from pelzflorian.de ([5.45.111.108]:43228 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iWNEW-0005WB-4M
 for 26302 <at> debbugs.gnu.org; Sun, 17 Nov 2019 11:17:05 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id F08BA3602A4;
 Sun, 17 Nov 2019 17:17:02 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1574007423;
 bh=rVnLsBAtBE5Ia4GtCKTPt9xiALMYzLKVUsg6+3QVIug=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Dq0Zamjc+jviOPYLvmZQ/oflyQOQpjYY45ZWIMXS8f21lY61hp9x7/lYkcTVmdVM6
 0USbSpaUwK3281x9u4IAICTu9jPnf/sOyg9dfgfJ6fn9VhW2lXMa+40bPU94Sj96He
 cCRZLlYDmbCH0g6ubPvUWSbwWD06jZK/YRqYSY+I=
Date: Sun, 17 Nov 2019 17:17:02 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191117161702.bfmuiukhyacbukqf@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="kmecfqpfehrjqlbj"
Content-Disposition: inline
In-Reply-To: <20191008093719.duvx26l2ods3fg75@HIDDEN>
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--kmecfqpfehrjqlbj
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

First on serving the internationalized website:

The following changes to maintenance:berlin redirect requests for old
URLs properly *only for non-HTTPS* in local testing on a vm-image.  I
assume the same will work when added for the HTTPS location, though
perhaps the line "set_from_accept_language $lang en de;" cannot or
need not be duplicated for both non-HTTPS and HTTPS.  I hope the
changes are compatible with the manual and cookbook URLs.  The changes
would better be tested more but I do not know how.


diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 2947759..8b66ba7 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -468,6 +468,10 @@ PUBLISH-URL."
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list "try_files /$lang/$uri $uri =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
@@ -505,6 +509,9 @@ PUBLISH-URL."
     (root "/home/rekado/bootstrappable.org")
     (raw-content
      (list
+      "rewrite (.*)/$ $1/index.html;"
+      ;; put en first so it is the default:
+      "set_from_accept_language $lang en de;"
       "access_log /var/log/nginx/bootstrappable.access.log;")))
 
    (nginx-server-configuration
@@ -767,5 +774,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (modules
+    (list
+     ;; We need this module for redirecting users to the localized
+     ;; website of their choice.
+     (file-append nginx-accept-language-module "\
+/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (extra-content
     (string-join %extra-content "\n"))))



I attach a complete patch that can only be used for testing on a local
VM.  For testing, I perform the following steps:

cd ~/git/maintenance/hydra/
GUILE_LOAD_PATH=$(readlink -f ~/git/maintenance/hydra/modules):$GUILE_LOAD_PATH guix system vm-image --image-size=14G berlin.scm --fallback
cp /gnu/store/mm000wdzkzrvalg09jxk0y6nhi9c4iai-qemu-image berlin1.img
guix gc -D /gnu/store/mm000wdzkzrvalg09jxk0y6nhi9c4iai-qemu-image
chmod +w berlin1.img
qemu-system-x86_64 -enable-kvm berlin1.img -m 2048 -nic tap,ifname=tap0,script=no,downscript=no

Note that I use NetworkManager with dnsmasq for a tap0 host-to-guest
network connection as specified in the Guix manual.

---

Second, unrelated to serving the website:

I also noticed that Microsoft Internet Explorer 11 cannot display the
new accessible dropdowns on https://guix.gnu.org/.i18n/en.  Do we
care?  Perhaps the use of CSS z-index causes the problems.  The
previous dropdowns used display: none; which made the dropdowns
not-keyboard navigable.

Regards,
Florian

--kmecfqpfehrjqlbj
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment;
	filename="0001-various-changes-for-local-testing.patch"

From 3cfdd06a5f29b664666a002e4b49ecc82b157b5a Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sun, 17 Nov 2019 17:12:11 +0100
Subject: [PATCH] [various changes for local testing]

---
 hydra/berlin.scm                    | 140 +---------------
 hydra/modules/sysadmin/services.scm |  66 ++++----
 hydra/nginx/berlin.scm              | 238 +---------------------------
 3 files changed, 41 insertions(+), 403 deletions(-)

diff --git a/hydra/berlin.scm b/hydra/berlin.scm
index fddf597..b34cf34 100644
--- a/hydra/berlin.scm
+++ b/hydra/berlin.scm
@@ -90,29 +90,9 @@ Happy hacking!\n"))
                  ;; The root file system resides on just a single
                  ;; disk, no RAID :-/
                  (file-system
-                   (device (file-system-label "my-root"))
+                   (device "/dev/sda")
                    (mount-point "/")
                    (type "ext4"))
-                 ;; This is a large external storage array
-                 ;; connected via 2 HBA cards.  We only mount it
-                 ;; through one of the HBA cards.  We would need
-                 ;; to use multipathd otherwise.
-                 (file-system
-                   (device (uuid "a6455b66-59d2-40bd-bddb-0c572bb62a2f"))
-                   (mount-point "/gnu")
-                   (type "ext4"))
-                 ;; Bind mount cache to large external storage.
-                 (file-system
-                   (device "/gnu/cache")
-                   (mount-point "/var/cache")
-                   (flags '(bind-mount))
-                   (type "none"))
-                 ;; Access root file system without bind mounts.
-                 (file-system
-                   (device "/")
-                   (mount-point "/mnt/root-fs")
-                   (flags '(bind-mount))
-                   (type "none"))
                  %base-file-systems))
 
   ;; Local admin account for MDC maintenance.
@@ -132,69 +112,13 @@ Happy hacking!\n"))
                    %base-packages))
 
   (services (cons*
-             ;; Connection to the DMZ for public access
-             ;; This is a 1G port only
-             (static-networking-service "eno1"
-                                        "141.80.181.41"
-                                        #:netmask "255.255.255.0"
-                                        #:gateway "141.80.181.1")
-             ;; This is a 10G port.
-             (static-networking-service "enp129s0f0"
-                                        "141.80.181.40"
-                                        #:netmask "255.255.255.0")
-             ;; Connection to build nodes
-             (static-networking-service "eno3"
-                                        "141.80.167.131"
-                                        #:netmask "255.255.255.192")
+             (service dhcp-client-service-type)
 
              ;; Allow login over serial console.
              (agetty-service (agetty-configuration
                               (tty "ttyS0")
                               (baud-rate "115200")))
 
-             ;; DNS
-             (service knot-service-type
-                      (knot-configuration
-                        (zones (list (knot-zone-configuration
-                                       (domain "guix.gnu.org")
-                                       (master '("bayfront-master"))
-                                       (acl '("notify-allow")))))
-                        (acls (list (knot-acl-configuration
-                                      (id "notify-allow")
-                                      (address (list bayfront-ip4))
-                                      (action '(notify)))))
-                        (remotes (list (knot-remote-configuration
-                                         (id "bayfront-master")
-                                         (address (list bayfront-ip4)))))))
-
-             ;; Monitoring
-             (service zabbix-agent-service-type)
-             (service zabbix-server-service-type
-                      (zabbix-server-configuration
-                       (include-files '("/root/zabbix-pass"))))
-             (service zabbix-front-end-service-type
-                      (zabbix-front-end-configuration
-                       (nginx (list
-                               (nginx-server-configuration
-                                (root #~(string-append #$zabbix-server:front-end "/share/zabbix/php"))
-                                (listen '("127.0.0.1:7878"))
-                                (index '("index.php"))
-                                (locations
-                                 (let ((php-location (nginx-php-location)))
-                                   (list (nginx-location-configuration
-                                          (inherit php-location)
-                                          (body (append (nginx-location-configuration-body php-location)
-                                                        (list "
-fastcgi_param PHP_VALUE \"post_max_size = 16M
-                          max_execution_time = 300\";
-"))))))))))
-                       (db-secret-file "/root/zabbix-front-end-secrets")))
-
-             ;; For the Zabbix database.  It was created by manually
-             ;; following the instructions here:
-             ;; https://www.zabbix.com/documentation/3.0/manual/appendix/install/db_scripts
-             (postgresql-service)
-
              (service ntp-service-type)
 
              ;; Make SSH and HTTP/HTTPS available over Tor.
@@ -210,68 +134,10 @@ fastcgi_param PHP_VALUE \"post_max_size = 16M
              (service static-web-site-service-type
                       (static-web-site-configuration
                        (git-url
-                        "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
+                        "git://pelzflorian.de/guix-artwork.git")
                        (directory "/srv/guix.gnu.org")
                        (build-file "website/.guix.scm")))
 
-             ;; 'wip-i18n' branch of guix.gnu.org.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url
-                        "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
-                       (git-ref '(branch . "wip-i18n"))
-                       (directory "/srv/guix.gnu.org-i18n")
-                       (build-file "website/.guix.scm")
-                       (cache-directory "guix.gnu.org-i18n") ;avoid collision
-                       (environment-variables
-                        '(("GUIX_WEB_SITE_ROOT_PATH" . "/.i18n")))))
-
-             ;; Manual for the latest stable release.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url "https://git.savannah.gnu.org/git/guix.git")
-                       (git-ref '(branch . "version-1.0.1"))
-                       (directory "/srv/guix-manual")
-                       (build-file "doc/build.scm")
-                       (environment-variables
-                         '(("GUIX_MANUAL_VERSION" . "1.0.1")
-                           ("GUIX_WEB_SITE_URL" . "/")))))
-
-             ;; Manual for 'master'.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url "https://git.savannah.gnu.org/git/guix.git")
-                       (directory "/srv/guix-manual-devel")
-
-                       ;; XXX: Use a different cache directory to work around
-                       ;; the fact that (guix git) would use a same-named
-                       ;; checkout directory for 'master' and for the branch
-                       ;; above.  Since both mcron jobs run at the same time,
-                       ;; they would end up using one branch or the other, in
-                       ;; a non-deterministic way.
-                       (cache-directory "guix-master-manual")
-
-                       (build-file "doc/build.scm")
-                       (environment-variables
-                        '(("GUIX_WEB_SITE_URL" . "/")))))
-
-             ;; Cookbook for 'master'.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url "https://git.savannah.gnu.org/git/guix.git")
-                       (directory "/srv/guix-cookbook")
-
-                       ;; XXX: Use a different cache directory (see above).
-                       (cache-directory "guix-cookbook-master")
-
-                       (build-file "doc/build.scm")
-                       (environment-variables
-                        '(("GUIX_MANUAL" . "guix-cookbook")
-                          ("GUIX_WEB_SITE_URL" . "/")))))
-
-             ;; GWL web site.
-             (service gwl-web-service-type)
-
              (frontend-services %sysadmins
                                 #:systems '("x86_64-linux" "i686-linux"
                                             "aarch64-linux")
diff --git a/hydra/modules/sysadmin/services.scm b/hydra/modules/sysadmin/services.scm
index 943df8a..a7c63bc 100644
--- a/hydra/modules/sysadmin/services.scm
+++ b/hydra/modules/sysadmin/services.scm
@@ -90,19 +90,19 @@
 (define* (guix-daemon-config #:key (max-jobs 5) (cores 4))
   (guix-configuration
    ;; Disable substitutes altogether.
-   (use-substitutes? #f)
-   (substitute-urls '())
-   (authorized-keys '())
-
-   ;; We don't want to let builds get stuck for too long, but we still want
-   ;; to allow building, say, Guile 2.2 on armhf-linux, which takes < 3h on
-   ;; an OverDrive 1000.
-   (max-silent-time 3600)
-   (timeout (* 6 3600))
-
-   (log-compression 'gzip)               ;be friendly to 'guix publish' users
-
-   (build-accounts (* 2 max-jobs))
+   ;; (use-substitutes? #f)
+   ;; (substitute-urls '())
+   ;; (authorized-keys '())
+  ;; 
+   ;; ;; We don't want to let builds get stuck for too long, but we still want
+   ;; ;; to allow building, say, Guile 2.2 on armhf-linux, which takes < 3h on
+   ;; ;; an OverDrive 1000.
+   ;; (max-silent-time 3600)
+   ;; (timeout (* 6 3600))
+  ;; 
+   ;; (log-compression 'gzip)               ;be friendly to 'guix publish' users
+  ;; 
+   ;; (build-accounts (* 2 max-jobs))
    (extra-options (list "--max-jobs" (number->string max-jobs)
                         "--cores" (number->string cores)
                         "--cache-failures"
@@ -261,27 +261,27 @@
                   (mcron-configuration
                    (jobs (cons %certbot-job %gc-jobs))))
 
-         firewall-service
-
-         ;; The Web service.
-         (service guix-publish-service-type
-                  (guix-publish-configuration
-                   (port 3000)
-                   (cache "/var/cache/guix/publish")
-                   (ttl nar-ttl)
-                   (compression '(("gzip" 9) ("lzip" 9)))
-                   (workers publish-workers)))
+         ;; firewall-service
+        ;; 
+         ;; ;; The Web service.
+         ;; (service guix-publish-service-type
+         ;;          (guix-publish-configuration
+         ;;           (port 3000)
+         ;;           (cache "/var/cache/guix/publish")
+         ;;           (ttl nar-ttl)
+         ;;           (compression '(("gzip" 9) ("lzip" 9)))
+         ;;           (workers publish-workers)))
 
          %nginx-mime-types
          %nginx-cache-activation
 
-         (service cuirass-service-type
-                  (cuirass-configuration
-                   (interval (* 5 60))
-                   (ttl (quotient nar-ttl 2))
-                   (specifications (cuirass-specs systems))))
-
-         (service openssh-service-type)
+         ;; (service cuirass-service-type
+         ;;          (cuirass-configuration
+         ;;           (interval (* 5 60))
+         ;;           (ttl (quotient nar-ttl 2))
+         ;;           (specifications (cuirass-specs systems))))
+        ;; 
+         ;; (service openssh-service-type)
          (service sysadmin-service-type sysadmins)
 
          (append (if nginx-config-file
@@ -290,9 +290,9 @@
                                      (file nginx-config-file))))
                      '())
                  (modify-services %base-services
-                   (guix-service-type
-                    config => (guix-daemon-config #:max-jobs max-jobs
-                                                  #:cores cores))
+                   ;; (guix-service-type
+                   ;;  config => (guix-daemon-config #:max-jobs max-jobs
+                   ;;                                #:cores cores))
                    (login-service-type
                     config => (login-configuration
                                (inherit config)
diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 2947759..01e3144 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -167,28 +167,6 @@
 PUBLISH-URL."
   (append (publish-locations publish-url)
           (list
-           ;; Cuirass.
-           (nginx-location-configuration
-            (uri "/")
-            (body (list "proxy_pass http://localhost:8081;")))
-           (nginx-location-configuration
-            (uri "~ ^/admin")
-            (body
-             (list "if ($ssl_client_verify != SUCCESS) { return 403; } proxy_pass http://localhost:8081;")))
-
-           (nginx-location-configuration
-            (uri "/static")
-            (body
-             (list
-              "proxy_pass http://localhost:8081;"
-              ;; Let browsers cache this for a while.
-              "expires 10d;"
-              ;; Cache quite aggressively.
-              "proxy_cache static;"
-              "proxy_cache_valid 200 5d;"
-              "proxy_cache_valid any 10m;"
-              "proxy_ignore_client_abort on;")))
-
            (nginx-location-configuration
             (uri "/berlin.guixsd.org-export.pub")
             (body
@@ -485,28 +463,6 @@ PUBLISH-URL."
 (define %berlin-servers
   (list
    ;; Plain HTTP
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("berlin.guixsd.org"
-                   "ci.guix.info"
-                   "ci.guix.gnu.org"))
-    (locations (berlin-locations %publish-url))
-    (raw-content
-     (list
-      "access_log  /var/log/nginx/http.access.log;"
-      "proxy_set_header X-Forwarded-Host $host;"
-      "proxy_set_header X-Forwarded-Port $server_port;"
-      "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("bootstrappable.org"
-                   "www.bootstrappable.org"))
-    (root "/home/rekado/bootstrappable.org")
-    (raw-content
-     (list
-      "access_log /var/log/nginx/bootstrappable.access.log;")))
-
    (nginx-server-configuration
     (listen '("80"))
     (server-name '("guix.gnu.org"))
@@ -514,195 +470,10 @@ PUBLISH-URL."
     (locations guix.gnu.org-locations)
     (raw-content
      (list
-      "access_log /var/log/nginx/guix-info.access.log;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("guix.info"
-                   "www.guix.info"))
-    (locations guix.info-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("issues.guix.info"
-                   "issues.guix.gnu.org"))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration ;certbot
-            (uri "/.well-known")
-            (body (list "root /var/www;")))
-           (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (list
-      "access_log /var/log/nginx/issues-guix-info.access.log;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("workflows.guix.info"
-                   "workflow.guix.info"
-                   "guixwl.org"
-                   "www.guixwl.org"))
-    (root "/home/rekado/gwl/")
-    (locations
-     (list (nginx-location-configuration ;certbot
-            (uri "/.well-known")
-            (body (list "root /var/www;")))
-
-           ;; Pass requests to 'guix workflow --web-interface'.
-           (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:5000;")))))
-    (raw-content
-     (list
-      "access_log /var/log/nginx/workflows-guix-info.access.log;")))
-        
-   ;; HTTPS servers
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("berlin.guixsd.org"
-                   "ci.guix.info"
-                   "ci.guix.gnu.org"))
-    (ssl-certificate (le "berlin.guixsd.org"))
-    (ssl-certificate-key (le "berlin.guixsd.org" 'key))
-    (locations (berlin-locations %publish-url))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log  /var/log/nginx/https.access.log;"
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       ;; For Cuirass admin interface authentication
-       "ssl_client_certificate /etc/ssl-ca/certs/ca.crt;"
-       "ssl_crl /etc/ssl-ca/private/ca.crl;"
-       "ssl_verify_client optional;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("qualif.ci.guix.gnu.org"))
-    (locations (berlin-locations "http://localhost:3003"))
-    (raw-content
-     (append %tls-settings
-             '("access_log  /var/log/nginx/qualif.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("bootstrappable.org"
-                   "www.bootstrappable.org"))
-    (ssl-certificate (le "bootstrappable.org"))
-    (ssl-certificate-key (le "bootstrappable.org" 'key))
-    (root "/home/rekado/bootstrappable.org")
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/bootstrappable.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("guix.info"
-                   "www.guix.info"))
-    (ssl-certificate (le "guix.info"))
-    (ssl-certificate-key (le "guix.info" 'key))
-    (locations guix.info-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("guix.gnu.org"))
-    (ssl-certificate (le "guix.gnu.org"))
-    (ssl-certificate-key (le "guix.gnu.org" 'key))
-    (root "/srv/guix.gnu.org")
-    (locations guix.gnu.org-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("issues.guix.info"))
-    (ssl-certificate (le "issues.guix.info"))
-    (ssl-certificate-key (le "issues.guix.info" 'key))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/issues-guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("issues.guix.gnu.org"))
-    (ssl-certificate (le "issues.guix.gnu.org"))
-    (ssl-certificate-key (le "issues.guix.gnu.org" 'key))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/issues-guix-gnu-org.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("workflows.guix.info"
-                   "workflow.guix.info"
-                   "guixwl.org"
-                   "www.guixwl.org"))
-    (ssl-certificate (le "www.guixwl.org"))
-    (ssl-certificate-key (le "www.guixwl.org" 'key))
-    (root "/home/rekado/gwl/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:5000;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/workflows-guix-info.https.access.log;"))))))
+      "rewrite (.*)/$ $1/index.html;"
+      "access_log /var/log/nginx/guix-info.access.log;"
+      ;; put en first so it is the default:
+      "set_from_accept_language $lang en de;")))))
 
 (define %extra-content
   (list
@@ -766,6 +537,7 @@ PUBLISH-URL."
 
 (define %nginx-configuration
   (nginx-configuration
+   (server-names-hash-bucket-size 64)
    (server-blocks %berlin-servers)
    (extra-content
     (string-join %extra-content "\n"))))
-- 
2.24.0


--kmecfqpfehrjqlbj--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Nov 2019 18:40:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 08 13:40:11 2019
Received: from localhost ([127.0.0.1]:47595 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iT9B5-0005Xg-CT
	for submit <at> debbugs.gnu.org; Fri, 08 Nov 2019 13:40:11 -0500
Received: from sender4-pp-o94.zoho.com ([136.143.188.94]:25477)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <sirgazil@HIDDEN>) id 1iT9B3-0005XW-GC
 for 26302 <at> debbugs.gnu.org; Fri, 08 Nov 2019 13:40:10 -0500
ARC-Seal: i=1; a=rsa-sha256; t=1573238405; cv=none; 
 d=zohomail.com; s=zohoarc; 
 b=BcuNUuv2eZY/u374egipqD84SZKMzx6jpde2I3B+1NT98zf1M2SbUmhrzx7R5QbIdTb6F3KYNttPUWYSGEgjz3DFzbVakVO/cEagx8X8GBSsYX2iQRia89CanOyctp+hObvQGKmtxOiXqwKuMVDIssZaVgPkkH6vwMajrloFtcM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc; t=1573238405;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To;
 bh=wV8ZOilhcDGOk5z3ky7blVEOVaPV+Dc6k0PZiCSNV2E=; 
 b=iLzknosuCZ/MFv0JrIljq/fkaWWdIu5JTy6EQ7PJ7NNeS0a22wovzVvKZtGISAF6yS+YuT7BFuauV3NM7LTC5v7ePmmjgStDxv1UskXmdd3igqag2horDnfj13c0GQWwHkDbJu622N8v+5OP2U8ikZXmYIzG54YBtVSOgpZfdUM=
ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass  header.i=zoho.com;
 spf=pass  smtp.mailfrom=sirgazil@HIDDEN;
 dmarc=pass header.from=<sirgazil@HIDDEN> header.from=<sirgazil@HIDDEN>
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=zapps768; d=zoho.com; 
 h=date:from:to:cc:message-id:in-reply-to:references:subject:mime-version:content-type:user-agent;
 b=MYustczrrdbCH9nSbQZA6O09PikV/2OvQ5qSWe0Oqp00Lb9uLeaxihN6sPDbFJkMbl48NClgrDsi
 rDuhMt+RBdLgOYtGhqsRS8ktpsHAbRvGIKJHLd8rJLHB/dYva7oc  
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1573238405; 
 s=zm2019; d=zoho.com; i=sirgazil@HIDDEN;
 h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding;
 l=927; bh=wV8ZOilhcDGOk5z3ky7blVEOVaPV+Dc6k0PZiCSNV2E=;
 b=ROj0pBK1kpMQvlTXwQeOwKuelmSkc72SDZdhvLHhzq+40x8G4B+GEjS0siGqddxy
 wEVgGIGtNN5sa+9Bpe47Q3I0a2erB6fHCDmPa/V+NdGmA22HSTwE/ogh8EVsdh8JFWp
 7knPZmem+X79csMZityHfGlVLWlLDH1fkwAh14TQ=
Received: from mail.zoho.com by mx.zohomail.com
 with SMTP id 1573238398930187.76302158710803;
 Fri, 8 Nov 2019 10:39:58 -0800 (PST)
Received: from  [179.15.13.185] by mail.zoho.com
 with HTTP;Fri, 8 Nov 2019 10:39:58 -0800 (PST)
Date: Fri, 08 Nov 2019 13:39:58 -0500
From: sirgazil <sirgazil@HIDDEN>
To: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
Message-ID: <16e4c50dfd1.d8cdd5c68419.2294583614489230958@HIDDEN>
In-Reply-To: <20191108171356.ewbc2navzgmxmedy@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191108090216.koews3r74rdeszzy@HIDDEN>
 <16e4b51b930.ad730bc54001.4023639419427743172@HIDDEN>
 <20191108161828.t5g6zua3r7y56n7y@HIDDEN>
 <20191108171356.ewbc2navzgmxmedy@HIDDEN>
Subject: Re: bug#26302: [website] translations
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Priority: Medium
User-Agent: Zoho Mail
X-Mailer: Zoho Mail
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

---- On Fri, 08 Nov 2019 12:13:56 -0500 pelzflorian (Florian Pelz) <pelzflo=
rian@HIDDEN> wrote ----

 > > German is slightly wider than English and Chinese will be slightly=20
 > > smaller.  Hopefully it won=E2=80=99t matter, otherwise the navbar coul=
d be put=20
 > > in a div container with display: flex; or something for spacing=20
 > > between elements.=20
 > >=20
 > =20
 > For example, the navbar could be given a width=20
 > =20
 > <nav class=3D"menu" style=3D"width: 100%;">=20
 > =20
 > and the ul inside could be given display:flex and justify-content=20
 > =20
 > <ul style=3D"display: flex;justify-content: space-between;">=20
 > =20
 > Or not.  Maybe it is good as it is.=20


Or we could wait until there is a visible problem :)

Eventually, it would be good to update the layout-related CSS of the websit=
e to use flex  and grid when appropriate. Maybe for another iteration :)





Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Nov 2019 17:14:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 08 12:14:00 2019
Received: from localhost ([127.0.0.1]:47522 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iT7pf-0003FQ-QI
	for submit <at> debbugs.gnu.org; Fri, 08 Nov 2019 12:14:00 -0500
Received: from pelzflorian.de ([5.45.111.108]:41140 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iT7pe-0003FI-8R
 for 26302 <at> debbugs.gnu.org; Fri, 08 Nov 2019 12:13:59 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id B63B23604DA;
 Fri,  8 Nov 2019 18:13:56 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1573233236;
 bh=/7ZEaYW8us094aZQS4038q9Dbefwz+trbhom5X2JvFQ=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=4MyKAxALDxIMbQEuNEy6owhTmPbM7lFNDx6SETk9UZPPdfcQg/gSNUsBt+UWVKKBB
 qfrg4TS6M3yJFYff8JzUVatc6Ip/UIc5x3FiTHPQcTvbJuKJPF1Rh680pPbj9aLtj2
 kEtULNojqYwp9BmpPoyCqegBh4NXtudqRfdYJk8c=
Date: Fri, 8 Nov 2019 18:13:56 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191108171356.ewbc2navzgmxmedy@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191108090216.koews3r74rdeszzy@HIDDEN>
 <16e4b51b930.ad730bc54001.4023639419427743172@HIDDEN>
 <20191108161828.t5g6zua3r7y56n7y@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20191108161828.t5g6zua3r7y56n7y@HIDDEN>
X-Spam-Score: 2.0 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  On Fri, Nov 08, 2019 at 05:18:28PM +0100,
 pelzflorian (Florian
 Pelz) wrote: > I changed it now, also for the dropdowns. The change is online
 now > that the website was rebuilt. > > Dropdowns are fixed for real now.
 Content analysis details:   (2.0 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 2.0 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
 (only one external relay)
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 1.0 (+)

On Fri, Nov 08, 2019 at 05:18:28PM +0100, pelzflorian (Florian Pelz) wrote:
> I changed it now, also for the dropdowns.  The change is online now
> that the website was rebuilt.
> 
>

Dropdowns are fixed for real now.


> > But now that the width of the menu will vary depending on each
> > language, the whole menu bar will probably have to be redesigned.
> > 
> 
> German is slightly wider than English and Chinese will be slightly
> smaller.  Hopefully it won’t matter, otherwise the navbar could be put
> in a div container with display: flex; or something for spacing
> between elements.
> 

For example, the navbar could be given a width

<nav class="menu" style="width: 100%;">

and the ul inside could be given display:flex and justify-content

<ul style="display: flex;justify-content: space-between;">

Or not.  Maybe it is good as it is.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Nov 2019 16:20:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 08 11:20:26 2019
Received: from localhost ([127.0.0.1]:47498 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iT6zq-0001x1-Ff
	for submit <at> debbugs.gnu.org; Fri, 08 Nov 2019 11:20:26 -0500
Received: from pelzflorian.de ([5.45.111.108]:41090 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iT6zo-0001wt-O1
 for 26302 <at> debbugs.gnu.org; Fri, 08 Nov 2019 11:20:25 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 06EA73604DA;
 Fri,  8 Nov 2019 17:20:24 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1573230024;
 bh=PBCI1KBb1lzaVdXAKDB5MYvktIg0f7mCV8Bu0ynJ0bo=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=t3sQhRQqC0Fdi7sjbO1N8h7EFy6uTFQLWm7/Me+1A1Vj6AdRAiew2H8nmYkLxNUSG
 C3TE7p58lum7hi74fuUZ2jzdEF6iMghcyTFKWLXChE6GBqmjjzt+xJ1t0n7nIDV13y
 u2VNgYS7nU8e0yAASUYMby5yVuRUcb3mFCi2EBDs=
Date: Fri, 8 Nov 2019 17:20:23 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191108162023.3ylapo5qufzm52yi@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191108090216.koews3r74rdeszzy@HIDDEN>
 <16e4b51b930.ad730bc54001.4023639419427743172@HIDDEN>
 <20191108161828.t5g6zua3r7y56n7y@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20191108161828.t5g6zua3r7y56n7y@HIDDEN>
X-Spam-Score: 4.0 (++++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  On Fri, Nov 08, 2019 at 05:18:29PM +0100,
 pelzflorian (Florian
 Pelz) wrote: > I changed it now, also for the dropdowns. Oops, dropdowns
 are not quite right yet. 
 Content analysis details:   (4.0 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 2.0 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
 (only one external relay)
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
 2.0 PDS_TONAME_EQ_TOLOCAL_SHORT Short body with To: name matches
 everything in local email
X-Debbugs-Envelope-To: 26302
Cc: =?utf-8?B?Ikx1ZG92aWMgQ291cnTDqHMi?= <ludo@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 3.0 (+++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  On Fri, Nov 08, 2019 at 05:18:29PM +0100, pelzflorian (Florian
    Pelz) wrote: > I changed it now, also for the dropdowns. Oops, dropdowns
   are not quite right yet. 
 
 Content analysis details:   (3.0 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  2.0 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
  2.0 PDS_TONAME_EQ_TOLOCAL_SHORT Short body with To: name matches
                             everything in local email
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager

On Fri, Nov 08, 2019 at 05:18:29PM +0100, pelzflorian (Florian Pelz) wrote:
> I changed it now, also for the dropdowns.

Oops, dropdowns are not quite right yet.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Nov 2019 16:18:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 08 11:18:33 2019
Received: from localhost ([127.0.0.1]:47494 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iT6y1-0001tq-2w
	for submit <at> debbugs.gnu.org; Fri, 08 Nov 2019 11:18:33 -0500
Received: from pelzflorian.de ([5.45.111.108]:41082 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iT6xy-0001th-Qu
 for 26302 <at> debbugs.gnu.org; Fri, 08 Nov 2019 11:18:31 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 1F63C3604DA;
 Fri,  8 Nov 2019 17:18:29 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1573229909;
 bh=utuuY8sot9UXVh1IFy3iATZiDgo9tO5L7/orN/p4NWU=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=KkqPo6gyc80LP5XWg+dav1PlW5RNCk6j+6/2PtxAwSGn5QzOjwMVb5JihYfWUcKX+
 6BI5l38YQvt1TVEhwh1uxQu4UalJrw4joeWkb4a/IlSzC9hPC0mVsqMXDVkB8DCnEg
 lGo7i3rFQwv8sOR2HcH16iohU3YWBPptorQ1fE+A=
Date: Fri, 8 Nov 2019 17:18:28 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191108161828.t5g6zua3r7y56n7y@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191108090216.koews3r74rdeszzy@HIDDEN>
 <16e4b51b930.ad730bc54001.4023639419427743172@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <16e4b51b930.ad730bc54001.4023639419427743172@HIDDEN>
X-Spam-Score: 2.0 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  On Fri, Nov 08, 2019 at 09:01:17AM -0500, sirgazil wrote:
 > Hi, Florian :) > > ---- On Fri,
 08 Nov 2019 04:02:16 -0500 pelzflorian (Florian
 Pelz) <pelzflorian@HIDDEN> wrote ---- > > > Another [...] 
 Content analysis details:   (2.0 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 2.0 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
 (only one external relay)
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: =?utf-8?B?Ikx1ZG92aWMgQ291cnTDqHMi?= <ludo@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 1.0 (+)

On Fri, Nov 08, 2019 at 09:01:17AM -0500, sirgazil wrote:
> Hi, Florian :)
> 
> ---- On Fri, 08 Nov 2019 04:02:16 -0500 pelzflorian (Florian Pelz) <pelzflorian@HIDDEN> wrote ----
> 
>  > Another thing is that perhaps the CSS margin of the .menu-item:link 
>  > elements in the navbar should be reduced.  What do you think: 
>  >  
>  > https://guix.gnu.org/.i18n/de/ 
>  > https://guix.gnu.org/.i18n/en/ 
> 
> Yes. For now, I think "margin: 0px 2px" would be ok. 
> […]

I changed it now, also for the dropdowns.  The change is online now
that the website was rebuilt.


> But now that the width of the menu will vary depending on each
> language, the whole menu bar will probably have to be redesigned.
> 

German is slightly wider than English and Chinese will be slightly
smaller.  Hopefully it won’t matter, otherwise the navbar could be put
in a div container with display: flex; or something for spacing
between elements.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Nov 2019 14:01:40 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 08 09:01:40 2019
Received: from localhost ([127.0.0.1]:45041 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iT4pY-0000GD-69
	for submit <at> debbugs.gnu.org; Fri, 08 Nov 2019 09:01:40 -0500
Received: from sender4-pp-o94.zoho.com ([136.143.188.94]:25418)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <sirgazil@HIDDEN>) id 1iT4pP-0000Fx-LB
 for 26302 <at> debbugs.gnu.org; Fri, 08 Nov 2019 09:01:34 -0500
ARC-Seal: i=1; a=rsa-sha256; t=1573221684; cv=none; 
 d=zohomail.com; s=zohoarc; 
 b=ImZ3DkRoUcjapgVKMoIaguMAdEAKCBLCo9VGb4RbB/KfBlQ3f/GSjAHg5Q5LHGGm6k5G7WH4OZ9MQEGlUJzeZa94Bc90Kcf40abUuMAPn1++mwejsxG5dt8RStAt6aD6rHRRKUV15On9QfU6FTHk4xDzawf1w9fQD3Uygl+NaDs=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc; t=1573221684;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To;
 bh=97t3qwsRgnDv6FbzPGXIi+ABQbSoEio0ZRezZiuv7SI=; 
 b=hIDvJiKKWoY/G6HQehkxg3dIRcydTgXsKPV7ZRCOA7UOAxyjv1kJjcWiXUMi7smbjzWVRKZGczMps3xTZK26xrviCRVT8MPxGyjcq8QFsyZsm3uzkJuXEbI+xX+lvTD86i2OQvf+HSQBlvGOAB2OGydR52zO8C70J2n+7y28ctU=
ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass  header.i=zoho.com;
 spf=pass  smtp.mailfrom=sirgazil@HIDDEN;
 dmarc=pass header.from=<sirgazil@HIDDEN> header.from=<sirgazil@HIDDEN>
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=zapps768; d=zoho.com; 
 h=date:from:to:cc:message-id:in-reply-to:references:subject:mime-version:content-type:user-agent;
 b=ceGjVe+DStWTIbwqB68Mogckyh2tdjQvy4fwxNdgt64LfeOJlNuMcDX8AbrHjIntB0PTmL1RslER
 m7Xz1SIo6WODYAVuHdWFHF+ygepN4Ot53YEi6sHTdirYYdbvmI1u  
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1573221684; 
 s=zm2019; d=zoho.com; i=sirgazil@HIDDEN;
 h=Date:From:To:Cc:Message-ID:In-Reply-To:References:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding;
 l=854; bh=97t3qwsRgnDv6FbzPGXIi+ABQbSoEio0ZRezZiuv7SI=;
 b=F6CqGTXzF5nZDPWHQSMKtbaqYCxRP30KLtWHwC/ss/DKZDdpUPzHJEoVUkkGqCi3
 MZzM/pByd7IjuFuTDvY4CRKzifc9nCDYas0wQLpckdPX1q8b28Xz9yG1pdT1EpFJlnM
 alM3TxJyOyI1IQpIKVAtCFzwHLucOLyXGOK46Fb8=
Received: from mail.zoho.com by mx.zohomail.com
 with SMTP id 1573221677362731.4940827752899;
 Fri, 8 Nov 2019 06:01:17 -0800 (PST)
Received: from  [179.15.13.185] by mail.zoho.com
 with HTTP;Fri, 8 Nov 2019 06:01:17 -0800 (PST)
Date: Fri, 08 Nov 2019 09:01:17 -0500
From: sirgazil <sirgazil@HIDDEN>
To: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
Message-ID: <16e4b51b930.ad730bc54001.4023639419427743172@HIDDEN>
In-Reply-To: <20191108090216.koews3r74rdeszzy@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
 <20191108090216.koews3r74rdeszzy@HIDDEN>
Subject: Re: bug#26302: [website] translations
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Priority: Medium
User-Agent: Zoho Mail
X-Mailer: Zoho Mail
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: =?UTF-8?Q?=22Ludovic_Court=C3=A8s=22?= <ludo@HIDDEN>,
 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi, Florian :)

---- On Fri, 08 Nov 2019 04:02:16 -0500 pelzflorian (Florian Pelz) <pelzflorian@HIDDEN> wrote ----

 > Another thing is that perhaps the CSS margin of the .menu-item:link 
 > elements in the navbar should be reduced.  What do you think: 
 >  
 > https://guix.gnu.org/.i18n/de/ 
 > https://guix.gnu.org/.i18n/en/ 

Yes. For now, I think "margin: 0px 2px" would be ok. 

However, I noticed that the items with dropdown menus in https://guix.gnu.org/.i18n/de/ don't seem to have horizontal margin, while the rest of the items do. So the space between items is different, which also results in the items with subitems not aligning well with the other menu items in the narrow screen presentation.

But now that the width of the menu will vary depending on each language, the whole menu bar will probably have to be redesigned.





Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Nov 2019 09:02:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 08 04:02:20 2019
Received: from localhost ([127.0.0.1]:44587 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iT09s-00058x-4b
	for submit <at> debbugs.gnu.org; Fri, 08 Nov 2019 04:02:20 -0500
Received: from pelzflorian.de ([5.45.111.108]:40644 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iT09q-00058q-GR
 for 26302 <at> debbugs.gnu.org; Fri, 08 Nov 2019 04:02:19 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 1502C3604F7;
 Fri,  8 Nov 2019 10:02:17 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1573203737;
 bh=d+ZdWoCxHT9+R+TP23mTdOcRnBeQHC25k5wEx2bQYgQ=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=3UTeph1garlWX+ZHWwyko64Vzyc/D9lmixNP7gWzP9U6cnMTbKga66WKJm48JoMrM
 WqZHMcUut+fzW8C+3qFKVtuRDX9gfMcpwUtkUVSPh8sdhOVKia7VHEPhaIj6VoQDqh
 6LYFlArPR0OdgKKz3VbXv/9C8svS6AZcyArzapNQ=
Date: Fri, 8 Nov 2019 10:02:16 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191108090216.koews3r74rdeszzy@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <20191008093719.duvx26l2ods3fg75@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20191008093719.duvx26l2ods3fg75@HIDDEN>
X-Spam-Score: 1.8 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  After Ludo’s reviews I’ve pushed and rebased everything
    again. What is missing is making nginx redirect accesses only to html files
    to their localized version if one exists. This would mean the no [...] 
 
 Content analysis details:   (1.8 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  1.8 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.8 (/)

After Ludo’s reviews I’ve pushed and rebased everything again.  What
is missing is making nginx redirect accesses only to html files to
their localized version if one exists.  This would mean the
non-localized URLs remain valid and their use could be continued.

I would prefer if someone familiar with nginx could help here.

I have not researched enough to know how to redirect index files in
nginx, i.e. https://guix.gnu.org/contribute/ should serve
de/contribute/index.html.

The nginx accept language module can determine if it should redirect
to de or en like this:

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index 2947759..8b83d1e 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -468,6 +468,13 @@ PUBLISH-URL."
     (uri "/guix")
     (body (list "root /var/www;")))
 
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list
+           ;; put en first so it is the default:
+           "set_from_accept_language $lang en de;"
+           "try_files /$lang/$uri $uri =404;")))
+
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
     (body (list "root /var/www;")))))
@@ -767,5 +774,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (load-modules
+    (list
+     ;; We need this module for redirecting users to the localized
+     ;; website of their choice.
+     (file-append nginx-mod-accept-language "\
+/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (extra-content
     (string-join %extra-content "\n"))))


Another thing is that perhaps the CSS margin of the .menu-item:link
elements in the navbar should be reduced.  What do you think:

https://guix.gnu.org/.i18n/de/
https://guix.gnu.org/.i18n/en/

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 7 Nov 2019 20:24:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 07 15:24:13 2019
Received: from localhost ([127.0.0.1]:43956 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iSoKD-0008Bw-5I
	for submit <at> debbugs.gnu.org; Thu, 07 Nov 2019 15:24:13 -0500
Received: from eggs.gnu.org ([209.51.188.92]:52806)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iSoKB-0008Bg-Lr
 for 26302 <at> debbugs.gnu.org; Thu, 07 Nov 2019 15:24:12 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e]:50488)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iSoK6-0005gz-4R; Thu, 07 Nov 2019 15:24:06 -0500
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=38792 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iSoK5-0005YS-GM; Thu, 07 Nov 2019 15:24:05 -0500
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
 <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
 <20191105111112.xfryncx6ut3ggqaj@HIDDEN>
 <87k18d12a7.fsf@HIDDEN>
 <20191106183015.uivozksjlxx4krw5@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 17 Brumaire an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Thu, 07 Nov 2019 21:24:03 +0100
In-Reply-To: <20191106183015.uivozksjlxx4krw5@HIDDEN>
 (pelzflorian@HIDDEN's message of "Wed, 6 Nov 2019 19:30:15
 +0100")
Message-ID: <87lfsrph98.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hello Florian,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> From c9f7b2739392e0d8cf2afa6b2179b2e138c49bc7 Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Wed, 6 Nov 2019 19:28:57 +0100
> Subject: [PATCH] doc: Add clarification on the '--source' build option.
>
> Emphasize that what the '--source' build option downloads is insufficient=
 for
> reproducing the packages.
>
> * doc/guix.texi (Additional Build Options): Explain more.

Alrighty, LGTM!

Thank you,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 6 Nov 2019 18:30:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 06 13:30:18 2019
Received: from localhost ([127.0.0.1]:41277 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iSQ4Q-0001oA-Gh
	for submit <at> debbugs.gnu.org; Wed, 06 Nov 2019 13:30:18 -0500
Received: from pelzflorian.de ([5.45.111.108]:41054 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iSQ4P-0001o0-9J
 for 26302 <at> debbugs.gnu.org; Wed, 06 Nov 2019 13:30:18 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 189683604DA;
 Wed,  6 Nov 2019 19:30:16 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1573065016;
 bh=brPfjOOeRiSJcdQEV2uRSm5Z0RTZ7w/HY+1BLLU2svM=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=J96ZPgI6rdHyTtmDi+3MvCYuNPdJUt3UdhdpktafkUUN8KNRKu/pPeeUZrYYRn0wZ
 IadA+M5akjQbUmLHc0KxWQoAf+ev54Bv8iyhvlkLY1Hpqh+I2mAUTvcfgTTaV+itn4
 j2gxF+7kURMUxP/EWBBUuQw+iO9cHg2925pIMOr4=
Date: Wed, 6 Nov 2019 19:30:15 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191106183015.uivozksjlxx4krw5@HIDDEN>
References: <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
 <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
 <20191105111112.xfryncx6ut3ggqaj@HIDDEN>
 <87k18d12a7.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="pjwnmai5rxuwfeb6"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87k18d12a7.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 1.8 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  On Wed, Nov 06, 2019 at 03:56:48PM +0100, Ludovic Courtès
    wrote: > I don’t feel strongly about it, but to me, this is a discussion
    and thus > not quite in line with the style of this section as a r [...] 
 
 Content analysis details:   (1.8 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  1.8 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: pelzflorian.de]
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.8 (/)


--pjwnmai5rxuwfeb6
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Wed, Nov 06, 2019 at 03:56:48PM +0100, Ludovic Courtès wrote:
> I don’t feel strongly about it, but to me, this is a discussion and thus
> not quite in line with the style of this section as a reference of ‘guix
> build’ options.
> 
> As far as the discussion goes :-), I’d argue that the Corresponding
> Source in the spirit of the GPL is the derivation rather than what
> ‘--sources’ returns, since the Corresponding Source should include
> “build scripts”.  I would argue that only functional package managers
> are able to support such a strong notion of Corresponding Source.
> 
> Long story short: the discussion is not clear-cut and I’m not sure it
> belongs here.  :-)
> 
> Thoughts?
> 
> Thanks,
> Ludo’.

Well said.  You convinced me not to make a recommendation.  Thank you.
I still was surprised about `guix build -S` so I attach a new
proposal.

Regards,
Florian

--pjwnmai5rxuwfeb6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-doc-Add-clarification-on-the-source-build-option.patch"

From c9f7b2739392e0d8cf2afa6b2179b2e138c49bc7 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Wed, 6 Nov 2019 19:28:57 +0100
Subject: [PATCH] doc: Add clarification on the '--source' build option.

Emphasize that what the '--source' build option downloads is insufficient for
reproducing the packages.

* doc/guix.texi (Additional Build Options): Explain more.
---
 doc/guix.texi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 30706d9ddd..58b8e41ab4 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8336,6 +8336,11 @@ The returned source tarball is the result of applying any patches and
 code snippets specified in the package @code{origin} (@pxref{Defining
 Packages}).
 
+Note that @command{guix build -S} compiles the sources only of the
+specified packages.  They do not include the sources of statically
+linked dependencies and by themselves are insufficient for reproducing
+the packages.
+
 @item --sources
 Fetch and return the source of @var{package-or-derivation} and all their
 dependencies, recursively.  This is a handy way to obtain a local copy
-- 
2.23.0


--pjwnmai5rxuwfeb6--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 6 Nov 2019 18:21:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 06 13:21:54 2019
Received: from localhost ([127.0.0.1]:41267 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iSPwI-0001XQ-Fr
	for submit <at> debbugs.gnu.org; Wed, 06 Nov 2019 13:21:54 -0500
Received: from pelzflorian.de ([5.45.111.108]:41038 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iSPwF-0001XF-Op
 for 26302 <at> debbugs.gnu.org; Wed, 06 Nov 2019 13:21:52 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id A5B39360554;
 Wed,  6 Nov 2019 19:21:50 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1573064510;
 bh=7Kzpq5Zg7eoHQ11jbAIgO3G5JHim4RZIGz9i34z8kxE=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=hVSjkOl/DmlCiL7blgagLemhAvxGKLf/hRyRR8GcOBm4y8pBhsMBEzLC5me2zB07r
 qTpuoNDx/RlF1YTyJ6mHdxx/hpucWkYp5/63YryNwbc/4cZjqvp22iPAQI2y4gour2
 sMJj/sIu0sAT/QHXfwrYhYFm3qgUshrsJd3fC6eQ=
Date: Wed, 6 Nov 2019 19:21:50 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191106182149.sf77445jeflgqgca@HIDDEN>
References: <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
 <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
 <878sot2h6d.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <878sot2h6d.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 1.8 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  On Wed, Nov 06, 2019 at 03:49:46PM +0100, Ludovic Courtès
    wrote: > Nitpick: I’d replace “Should be […] For example:” by “This
    should be a > list of file names of loadable modules, as in thi [...] 
 
 Content analysis details:   (1.8 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: pelzflorian.de]
  1.8 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.8 (/)

On Wed, Nov 06, 2019 at 03:49:46PM +0100, Ludovic Courtès wrote:
> Nitpick: I’d replace “Should be […] For example:” by “This should be a
> list of file names of loadable modules, as in this example:”.
> 
> Otherwise LGTM!
> 
> Ludo’.

I agree.  Thank you!  I copied your wording verbatim and will push
the nginx patches tomorrow.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 6 Nov 2019 14:57:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 06 09:57:02 2019
Received: from localhost ([127.0.0.1]:41033 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iSMk1-000098-WA
	for submit <at> debbugs.gnu.org; Wed, 06 Nov 2019 09:57:02 -0500
Received: from eggs.gnu.org ([209.51.188.92]:56309)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iSMjz-00008p-Bz
 for 26302 <at> debbugs.gnu.org; Wed, 06 Nov 2019 09:56:59 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e]:49402)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iSMjs-0007Mo-Ec; Wed, 06 Nov 2019 09:56:52 -0500
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=52882 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iSMjp-0000us-Sf; Wed, 06 Nov 2019 09:56:50 -0500
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
 <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
 <20191105111112.xfryncx6ut3ggqaj@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 16 Brumaire an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Wed, 06 Nov 2019 15:56:48 +0100
In-Reply-To: <20191105111112.xfryncx6ut3ggqaj@HIDDEN>
 (pelzflorian@HIDDEN's message of "Tue, 5 Nov 2019 12:11:12
 +0100")
Message-ID: <87k18d12a7.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> From a5d9180d960d244053bea0d59d6092060fe4c6dd Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Tue, 5 Nov 2019 12:08:54 +0100
> Subject: [PATCH 01/13] doc: Explain more licensing aspects of the '--sour=
ce'
>  build option.
>
> * doc/guix.texi (Additional Build Options): Explain more.
> ---
>  doc/guix.texi | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index da2423b422..d8886fa494 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -8328,6 +8328,13 @@ The returned source tarball is the result of apply=
ing any patches and
>  code snippets specified in the package @code{origin} (@pxref{Defining
>  Packages}).
>=20=20
> +Note that @command{guix build -S} compiles the sources only of the
> +specified packages.  They do not include the sources of statically
> +linked dependencies, dynamically linked dependencies, or any other
> +dependencies.  When distributing complete corresponding sources for
> +license compliance, you may want to play it safe and use the following
> +@code{--sources} option instead.

I don=E2=80=99t feel strongly about it, but to me, this is a discussion and=
 thus
not quite in line with the style of this section as a reference of =E2=80=
=98guix
build=E2=80=99 options.

As far as the discussion goes :-), I=E2=80=99d argue that the Corresponding
Source in the spirit of the GPL is the derivation rather than what
=E2=80=98--sources=E2=80=99 returns, since the Corresponding Source should =
include
=E2=80=9Cbuild scripts=E2=80=9D.  I would argue that only functional packag=
e managers
are able to support such a strong notion of Corresponding Source.

Long story short: the discussion is not clear-cut and I=E2=80=99m not sure =
it
belongs here.  :-)

Thoughts?

Thanks,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 6 Nov 2019 14:49:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 06 09:49:58 2019
Received: from localhost ([127.0.0.1]:39691 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iSMdB-000833-RA
	for submit <at> debbugs.gnu.org; Wed, 06 Nov 2019 09:49:58 -0500
Received: from eggs.gnu.org ([209.51.188.92]:53930)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iSMdA-00082q-4a
 for 26302 <at> debbugs.gnu.org; Wed, 06 Nov 2019 09:49:56 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e]:49258)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iSMd2-000352-2p; Wed, 06 Nov 2019 09:49:48 -0500
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=52880 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iSMd1-0007hV-LR; Wed, 06 Nov 2019 09:49:48 -0500
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
 <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 16 Brumaire an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Wed, 06 Nov 2019 15:49:46 +0100
In-Reply-To: <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
 (pelzflorian@HIDDEN's message of "Tue, 5 Nov 2019 08:31:30
 +0100")
Message-ID: <878sot2h6d.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi!

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> From 04df1e5ee3fd542776b13eb3a59872e1647eb5f8 Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Tue, 5 Nov 2019 08:08:20 +0100
> Subject: [PATCH 03/13] services: Make it possible to include dynamic modu=
les
>  in nginx.
>
> * gnu/services/web.scm (<nginx-configuration>): Add modules field.
> (nginx-configuration-modules): New field accessor.
> (emit-load-module): New procedure.
> (default-nginx-config): Add support for the modules field.
> * doc/guix.texi (NGINX): Document it.

[=E2=80=A6]

> +@item @code{modules} (default: @code{'()})
> +List of nginx dynamic modules to load.  Should be a list of strings or
> +string valued G-expressions.  For example:

Nitpick: I=E2=80=99d replace =E2=80=9CShould be [=E2=80=A6] For example:=E2=
=80=9D by =E2=80=9CThis should be a
list of file names of loadable modules, as in this example:=E2=80=9D.

Otherwise LGTM!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 5 Nov 2019 11:11:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 05 06:11:17 2019
Received: from localhost ([127.0.0.1]:37924 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iRwk1-0008Sm-GZ
	for submit <at> debbugs.gnu.org; Tue, 05 Nov 2019 06:11:17 -0500
Received: from pelzflorian.de ([5.45.111.108]:39042 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iRwjz-0008Sc-Eq
 for 26302 <at> debbugs.gnu.org; Tue, 05 Nov 2019 06:11:16 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id CB13836051E;
 Tue,  5 Nov 2019 12:11:12 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1572952273;
 bh=OVgzddSank8m/1XcDZv3GlTIBKlmaZLnh4DThGqXwUs=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=uMJdqxPoP8T7qjYptHoPNEuiklLmwt/j9VtgThrhdtp/Y/c+CmZ5l7LqI8wPoHlat
 5QRUdRImYE+wdeVIjCGDMYbRD9Ca66ik48Py+lmlNKYo4sQjGoK027k8qNng3NZij0
 BxIf6wSfb18wtX9mfm3XNtkz1o5zuPSnEizxIajY=
Date: Tue, 5 Nov 2019 12:11:12 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191105111112.xfryncx6ut3ggqaj@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
 <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="x66vhsc7qsnxhm5g"
Content-Disposition: inline
In-Reply-To: <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 1.9 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  On Tue, Nov 05, 2019 at 08:31:30AM +0100,
 pelzflorian (Florian
 Pelz) wrote: > +Note that @command{guix build -S} compiles the sources only
 of the > +specified package. Another try,
 I changed s/package/packages/ (attached).
 Content analysis details:   (1.9 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 1.9 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
 (only one external relay)
 0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
 blocked.  See
 http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
 for more information. [URIs: pelzflorian.de]
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.9 (/)


--x66vhsc7qsnxhm5g
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Tue, Nov 05, 2019 at 08:31:30AM +0100, pelzflorian (Florian Pelz) wrote:
> +Note that @command{guix build -S} compiles the sources only of the
> +specified package.

Another try, I changed s/package/packages/ (attached).

Regards,
Florian

--x66vhsc7qsnxhm5g
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-doc-Explain-more-licensing-aspects-of-the-source-bui.patch"

From a5d9180d960d244053bea0d59d6092060fe4c6dd Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Tue, 5 Nov 2019 12:08:54 +0100
Subject: [PATCH 01/13] doc: Explain more licensing aspects of the '--source'
 build option.

* doc/guix.texi (Additional Build Options): Explain more.
---
 doc/guix.texi | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index da2423b422..d8886fa494 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8328,6 +8328,13 @@ The returned source tarball is the result of applying any patches and
 code snippets specified in the package @code{origin} (@pxref{Defining
 Packages}).
 
+Note that @command{guix build -S} compiles the sources only of the
+specified packages.  They do not include the sources of statically
+linked dependencies, dynamically linked dependencies, or any other
+dependencies.  When distributing complete corresponding sources for
+license compliance, you may want to play it safe and use the following
+@code{--sources} option instead.
+
 @item --sources
 Fetch and return the source of @var{package-or-derivation} and all their
 dependencies, recursively.  This is a handy way to obtain a local copy
-- 
2.23.0


--x66vhsc7qsnxhm5g--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 5 Nov 2019 07:31:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 05 02:31:38 2019
Received: from localhost ([127.0.0.1]:37831 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iRtJQ-0007Bo-4Q
	for submit <at> debbugs.gnu.org; Tue, 05 Nov 2019 02:31:38 -0500
Received: from pelzflorian.de ([5.45.111.108]:38792 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iRtJN-0007Be-7h
 for 26302 <at> debbugs.gnu.org; Tue, 05 Nov 2019 02:31:34 -0500
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 5B0ED360574;
 Tue,  5 Nov 2019 08:31:31 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1572939091;
 bh=EN55D/QtXt67FnmhiVfSrPpYmVn2EbWBOR/mXXRAe3s=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=3T/a6/IXWO8Iham4UCb2qV07/oz9ojVPIo9mCVfcZaK9T9SLi4L2vUGf5AS64/+qz
 JHd9Jb7+vQ+hpQO3mTtiAK3egjtsOaPoowymPKCUpJzHRunRtz8QV7nxYmeLcoN6qj
 FiLKo1vXj4Sh0phHtOJBy+aAGVl25DZtPPvbPaj8=
Date: Tue, 5 Nov 2019 08:31:30 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191105073130.j5eft6jgqhkcnqf3@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 <87ftj38spn.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="fmrl3amnpkvjg4md"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87ftj38spn.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 1.9 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  On Mon, Nov 04, 2019 at 06:19:32PM +0100, Ludovic Courtès
    wrote: > "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
    > > On Fri, Nov 01, 2019 at 03:54:42PM +0100, Ludovic Courtès wr [...] 
 
 Content analysis details:   (1.9 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  1.9 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: inria.fr]
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.9 (/)


--fmrl3amnpkvjg4md
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Mon, Nov 04, 2019 at 06:19:32PM +0100, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
> > On Fri, Nov 01, 2019 at 03:54:42PM +0100, Ludovic Courtès wrote:
> >> […]
> >> Perhaps “nginx-accept-language-module”, to match the name of the
> >> upstream repo?
> >> 
> >
> > I agree.  Arch (who have no package for nginx-accept-language-module)
> > change their various nginx module package names to be more consistent,
> > I think, but this is not necessary in Guix, I think.
> 
> For Guix the general rule is to follow upstream (info "(guix) Package
> Naming").
> 

Makes sense.  I agree the general rule is appropriate here.



> > From: Florian Pelz <pelzflorian@HIDDEN>
> > Date: Sat, 2 Nov 2019 13:13:01 +0100
> > Subject: [PATCH 1/3] doc: Add warning on the '--source' build option when
> >  linking statically.
> >
> > * doc/guix.texi (Additional Build Options): Add warning.
> > […]
> > +Note that for statically linked packages, @command{guix build -S} will
> > +@emph{not} return the complete and corresponding sources since these
> > +would include the sources of statically linked dependencies.  In this
> > +case, when distributing sources for license compliance, you may want to
> > +play it safe and use the following @code{--sources} option instead.
> 
> I don’t think this bit is necessary: ‘-S’ is documented to return “the
> source of the package” and that’s exactly what it does; static
> vs. dynamic linking is not a concern at this level, as I see it.
> 
> WDYT?
> 

I guess the meaning of `guix build -S` is not clear enough.  Let me
make an alternative proposal (attached).



> > From: Florian Pelz <pelzflorian@HIDDEN>
> > Date: Sat, 2 Nov 2019 14:05:30 +0100
> > Subject: [PATCH 3/3] services: Make it possible to include dynamic modules in
> >  nginx.
> >
> > * gnu/services/web.scm (<nginx-configuration>): Add modules field.
> > (nginx-configuration-modules): New field accessor.
> > (emit-load-module): New procedure.
> > (default-nginx-config): Add support for the modules field.
> > * doc/guix.texi (NGINX): Document it.
> > […]
> > +@item @code{modules} (default: @code{'()})
> > +List of nginx dynamic modules to load.  Should be a list of strings or
> > +string valued G-expressions.
> 
> Then… how does nginx find the module in question, specifically the
> ‘nginx-accept-language-module’ package?  One has to specify
> ‘nginx-accept-language-module’ as the nginx package to use, is that
> right?  (I had overlooked that before.)
> 
> What about adding an example with the ‘accept-language’ module?
> 

Of course you are right.  I attach a patch with only a changed
doc/guix.texi.  I do not attach again the
nginx-accept-language-module.

Are these proposals OK?  Shall I push the three patches?

Regards,
Florian

--fmrl3amnpkvjg4md
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-doc-Explain-more-licensing-aspects-of-the-source-bui.patch"

From 3bbdd2dc4c983ca8bbf31cd348b64f1d60a51ee5 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Tue, 5 Nov 2019 08:22:04 +0100
Subject: [PATCH 01/13] doc: Explain more licensing aspects of the '--source'
 build option.

* doc/guix.texi (Additional Build Options): Explain more.
---
 doc/guix.texi | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index da2423b422..b4ad9d846a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8328,6 +8328,13 @@ The returned source tarball is the result of applying any patches and
 code snippets specified in the package @code{origin} (@pxref{Defining
 Packages}).
 
+Note that @command{guix build -S} compiles the sources only of the
+specified package.  They do not include the sources of statically linked
+dependencies, dynamically linked dependencies, or any other
+dependencies.  When distributing complete corresponding sources for
+license compliance, you may want to play it safe and use the following
+@code{--sources} option instead.
+
 @item --sources
 Fetch and return the source of @var{package-or-derivation} and all their
 dependencies, recursively.  This is a handy way to obtain a local copy
-- 
2.23.0


--fmrl3amnpkvjg4md
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment; filename="0003-services-Make-it-possible-to-include-dynamic-modules.patch"
Content-Transfer-Encoding: 8bit

From 04df1e5ee3fd542776b13eb3a59872e1647eb5f8 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Tue, 5 Nov 2019 08:08:20 +0100
Subject: [PATCH 03/13] services: Make it possible to include dynamic modules
 in nginx.

* gnu/services/web.scm (<nginx-configuration>): Add modules field.
(nginx-configuration-modules): New field accessor.
(emit-load-module): New procedure.
(default-nginx-config): Add support for the modules field.
* doc/guix.texi (NGINX): Document it.
---
 doc/guix.texi        | 11 +++++++++++
 gnu/services/web.scm |  8 ++++++++
 2 files changed, 19 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index b4ad9d846a..11cdc1ae83 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -19771,6 +19771,17 @@ use the size of the processors cache line.
 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
 Maximum bucket size for the server names hash tables.
 
+@item @code{modules} (default: @code{'()})
+List of nginx dynamic modules to load.  Should be a list of strings or
+string valued G-expressions.  For example:
+
+@lisp
+(modules
+ (list
+  (file-append nginx-accept-language-module "\
+/etc/nginx/modules/ngx_http_accept_language_module.so")))
+@end lisp
+
 @item @code{extra-content} (default: @code{""})
 Extra content for the @code{http} block.  Should be string or a string
 valued G-expression.
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 899be1c168..896d06eb18 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -9,6 +9,7 @@
 ;;; Copyright  2018 Pierre-Antoine Rouby <pierre-antoine.rouby@HIDDEN>
 ;;; Copyright  2017, 2018, 2019 Christopher Baines <mail@HIDDEN>
 ;;; Copyright  2018 Marius Bakke <mbakke@HIDDEN>
+;;; Copyright  2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -95,6 +96,7 @@
             nginx-configuration-upstream-blocks
             nginx-configuration-server-names-hash-bucket-size
             nginx-configuration-server-names-hash-bucket-max-size
+            nginx-configuration-modules
             nginx-configuration-extra-content
             nginx-configuration-file
 
@@ -522,6 +524,7 @@
                                  (default #f))
   (server-names-hash-bucket-max-size nginx-configuration-server-names-hash-bucket-max-size
                                      (default #f))
+  (modules nginx-configuration-modules (default '()))
   (extra-content nginx-configuration-extra-content
                  (default ""))
   (file          nginx-configuration-file         ;#f | string | file-like
@@ -542,6 +545,9 @@ of index files."
         ((? string? str) (list str " ")))
       names))
 
+(define (emit-load-module module)
+  (list "load_module " module ";\n"))
+
 (define emit-nginx-location-config
   (match-lambda
     (($ <nginx-location-configuration> uri body)
@@ -615,12 +621,14 @@ of index files."
                  server-blocks upstream-blocks
                  server-names-hash-bucket-size
                  server-names-hash-bucket-max-size
+                 modules
                  extra-content)
    (apply mixed-text-file "nginx.conf"
           (flatten
            "user nginx nginx;\n"
            "pid " run-directory "/pid;\n"
            "error_log " log-directory "/error.log info;\n"
+           (map emit-load-module modules)
            "http {\n"
            "    client_body_temp_path " run-directory "/client_body_temp;\n"
            "    proxy_temp_path " run-directory "/proxy_temp;\n"
-- 
2.23.0


--fmrl3amnpkvjg4md--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 4 Nov 2019 17:19:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 04 12:19:44 2019
Received: from localhost ([127.0.0.1]:37457 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iRg11-0002wH-IK
	for submit <at> debbugs.gnu.org; Mon, 04 Nov 2019 12:19:44 -0500
Received: from eggs.gnu.org ([209.51.188.92]:51133)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iRg0z-0002w3-D9
 for 26302 <at> debbugs.gnu.org; Mon, 04 Nov 2019 12:19:42 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e]:33945)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iRg0t-0002MK-QJ; Mon, 04 Nov 2019 12:19:35 -0500
Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=42176 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iRg0t-00050B-6P; Mon, 04 Nov 2019 12:19:35 -0500
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
 <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 14 Brumaire an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Mon, 04 Nov 2019 18:19:32 +0100
In-Reply-To: <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
 (pelzflorian@HIDDEN's message of "Sat, 2 Nov 2019 14:15:15
 +0100")
Message-ID: <87ftj38spn.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Fri, Nov 01, 2019 at 03:54:42PM +0100, Ludovic Court=C3=A8s wrote:
>> > +         (modules '((guix build utils)
>> > +                    (ice-9 popen)))
>> > +         (snippet
>> > +          #~(begin
>> > +              ;; the nginx source code is part of the module=E2=80=99=
s source
>> > +              (format #t "decompressing nginx source code~%")
>> > +              (call-with-output-file "nginx.tar"
>> > +                (lambda (out)
>> > +                  (let ((pipe (open-pipe* OPEN_READ
>> > +                                          #+(file-append gzip "/bin/g=
zip") "-cd"
>> > +                                          #$(package-source nginx))))
>> > +                    (dump-port pipe out)
>> > +                    (unless (=3D (status:exit-val (close-pipe pipe)) =
0)
>> > +                      (error "gzip decompress failed")))))
>> > +              (invoke #+(file-append tar "/bin/tar") "xvf" "nginx.tar"
>> > +                      "--strip-components=3D1")
>> > +              (delete-file "nginx.tar")
>>=20
>> I=E2=80=99d suggest doing it in a phase.
>
> This changes many things. :)
>
> With a phase, `guix build -S` would only return the source files of
> nginx-accept-language-module directly but not of statically linked
> nginx.  I have added a further patch to doc/guix.texi warning of `guix
> build -S` not always returning complete and corresponding sources, see
> attachment.
>
> The good thing is that with a phase I no longer get an import cycle
> because I no longer need a reference to the tar package.  So I put
> nginx-accept-language-module inside web.scm now and there is no need
> for a separate module.

Good!

>> > +      (license (delete-duplicates
>> > +                (cons license:bsd-2 ;license of nginx-mod-accept-lang=
uage
>> > +                      (package-license nginx))))))) ;the module=E2=80=
=99s code is linked
>>=20
>> To avoid circular dependencies in top-level references, I suggest
>> copying the license of =E2=80=98nginx=E2=80=99 instead of writing (packa=
ge-license
>> nginx).
>>=20
>
> I believe this is no longer an issue now that
> nginx-accept-language-module is in the same Guile module as nginx, is
> it?

You=E2=80=99re right: it=E2=80=99s no longer an issue.

>> > +++ b/gnu/packages/web-xyz.scm
>> > @@ -0,0 +1,175 @@
>> > +;;; GNU Guix --- Functional package management for GNU
>> > +;;;; TODO should I really add copyright lines for people I copied fro=
m??
>> > +;;; Copyright =C2=A9 2014, 2015 Mark H Weaver <mhw@HIDDEN>
>> > +;;; Copyright =C2=A9 2016 Tobias Geerinckx-Rice <me@HIDDEN>
>> > +;;; Copyright =C2=A9 2017, 2018 Marius Bakke <mbakke@HIDDEN>
>>=20
>> I don=E2=80=99t think you need to add these 3 lines here; the package de=
finition
>> is yours.
>>=20
>
> This does not matter anymore after putting
> nginx-accept-language-module in the same Guile module file as nginx.
>
> In general though: IANAL but I have largely copied nginx=E2=80=99 configu=
re
> phase, so at least Mark would surely have copyright on parts of it.
> However I believe copyright lines have limited legal significance
> anyway and adding these authorship lines in a file not added by Mark
> seems unreasonable.

Agreed.

>> [=E2=80=A6]
>> Perhaps =E2=80=9Cnginx-accept-language-module=E2=80=9D, to match the nam=
e of the
>> upstream repo?
>>=20
>
> I agree.  Arch (who have no package for nginx-accept-language-module)
> change their various nginx module package names to be more consistent,
> I think, but this is not necessary in Guix, I think.

For Guix the general rule is to follow upstream (info "(guix) Package
Naming").

> From b6da504736866bae655e2b4025729345e1ea19b7 Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Sat, 2 Nov 2019 13:13:01 +0100
> Subject: [PATCH 1/3] doc: Add warning on the '--source' build option when
>  linking statically.
>
> * doc/guix.texi (Additional Build Options): Add warning.
> ---
>  doc/guix.texi | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index da2423b422..30b69d8869 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -8328,6 +8328,12 @@ The returned source tarball is the result of apply=
ing any patches and
>  code snippets specified in the package @code{origin} (@pxref{Defining
>  Packages}).
>=20=20
> +Note that for statically linked packages, @command{guix build -S} will
> +@emph{not} return the complete and corresponding sources since these
> +would include the sources of statically linked dependencies.  In this
> +case, when distributing sources for license compliance, you may want to
> +play it safe and use the following @code{--sources} option instead.

I don=E2=80=99t think this bit is necessary: =E2=80=98-S=E2=80=99 is docume=
nted to return =E2=80=9Cthe
source of the package=E2=80=9D and that=E2=80=99s exactly what it does; sta=
tic
vs. dynamic linking is not a concern at this level, as I see it.

WDYT?

> From 21e6064f42defad1e2d35bbf95a4825fec9e4615 Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Sat, 2 Nov 2019 12:43:47 +0100
> Subject: [PATCH 2/3] gnu: Add Nginx Accept Language module.
>
> * gnu/packages/web.scm (nginx-accept-language-module): New public variabl=
e.

LGTM!

Thanks for taking the time to rewrite the snippet as a build phase.

> From 250ae2011ac1c976508136e9f50cb04e6ab5f23c Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Sat, 2 Nov 2019 14:05:30 +0100
> Subject: [PATCH 3/3] services: Make it possible to include dynamic module=
s in
>  nginx.
>
> * gnu/services/web.scm (<nginx-configuration>): Add modules field.
> (nginx-configuration-modules): New field accessor.
> (emit-load-module): New procedure.
> (default-nginx-config): Add support for the modules field.
> * doc/guix.texi (NGINX): Document it.
> ---
>  doc/guix.texi        | 4 ++++
>  gnu/services/web.scm | 8 ++++++++
>  2 files changed, 12 insertions(+)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 30b69d8869..898123da2b 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -19770,6 +19770,10 @@ use the size of the processors cache line.
>  @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
>  Maximum bucket size for the server names hash tables.
>=20=20
> +@item @code{modules} (default: @code{'()})
> +List of nginx dynamic modules to load.  Should be a list of strings or
> +string valued G-expressions.

Then=E2=80=A6 how does nginx find the module in question, specifically the
=E2=80=98nginx-accept-language-module=E2=80=99 package?  One has to specify
=E2=80=98nginx-accept-language-module=E2=80=99 as the nginx package to use,=
 is that
right?  (I had overlooked that before.)

What about adding an example with the =E2=80=98accept-language=E2=80=99 mod=
ule?

Thank you!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 2 Nov 2019 13:15:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Nov 02 09:15:34 2019
Received: from localhost ([127.0.0.1]:58670 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iQtFT-0002s6-Hj
	for submit <at> debbugs.gnu.org; Sat, 02 Nov 2019 09:15:33 -0400
Received: from pelzflorian.de ([5.45.111.108]:34816 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iQtFN-0002rq-FF
 for 26302 <at> debbugs.gnu.org; Sat, 02 Nov 2019 09:15:21 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id D94C13604C5;
 Sat,  2 Nov 2019 14:15:15 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1572700516;
 bh=28gdk2k6qo3UemrCBhdYyBujqQMAidp80SdGdj6ReCM=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=oWJRwfqtr/exia35E1i/AuVIbRtWenywg+ZaHTL48pQlhq9ZXGSSLFfTBd2DbmVU+
 eYVHVGyvffYbqNTI/d+9lWghIfoiLQI0MHHJs+as2dny2JmgXZAg7I1KQanI/DZ4Dg
 14lqY0F+10rpmWnrWAdVQ1xJAnc0BCWc6MI6lmpU=
Date: Sat, 2 Nov 2019 14:15:15 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191102131515.sq6mlvwsfybagsd2@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 <874kznbqa5.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="xhybrlnsnh7vjec3"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <874kznbqa5.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 2.7 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  Thank you for your review! I have attached updated patches.
    I have some questions. I’d like to answer but not in order. First of all,
    On Fri, Nov 01, 2019 at 03:54:42PM +0100, Ludovic Courtès wrote: > > + (modules
    '((guix build utils) > > + (ice-9 popen))) > > + (snippet > > + #~(begin
   > > + ;; the nginx source code is part of the [...] 
 
 Content analysis details:   (2.7 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  2.7 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: netris.org]
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 1.7 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  Thank you for your review! I have attached updated patches.
    I have some questions. I’d like to answer but not in order. First of all,
    On Fri, Nov 01, 2019 at 03:54:42PM +0100, Ludovic Courtès wrote: > > + (modules
    '((guix build utils) > > + (ice-9 popen))) > > + (snippet > > + #~(begin
   > > + ;; the nginx source code is part of the [...] 
 
 Content analysis details:   (1.7 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: lonestar.org]
  2.7 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager


--xhybrlnsnh7vjec3
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

Thank you for your review!  I have attached updated patches.

I have some questions.  I’d like to answer but not in order.  First of
all,

On Fri, Nov 01, 2019 at 03:54:42PM +0100, Ludovic Courtès wrote:
> > +         (modules '((guix build utils)
> > +                    (ice-9 popen)))
> > +         (snippet
> > +          #~(begin
> > +              ;; the nginx source code is part of the module’s source
> > +              (format #t "decompressing nginx source code~%")
> > +              (call-with-output-file "nginx.tar"
> > +                (lambda (out)
> > +                  (let ((pipe (open-pipe* OPEN_READ
> > +                                          #+(file-append gzip "/bin/gzip") "-cd"
> > +                                          #$(package-source nginx))))
> > +                    (dump-port pipe out)
> > +                    (unless (= (status:exit-val (close-pipe pipe)) 0)
> > +                      (error "gzip decompress failed")))))
> > +              (invoke #+(file-append tar "/bin/tar") "xvf" "nginx.tar"
> > +                      "--strip-components=1")
> > +              (delete-file "nginx.tar")
> 
> I’d suggest doing it in a phase.

This changes many things. :)

With a phase, `guix build -S` would only return the source files of
nginx-accept-language-module directly but not of statically linked
nginx.  I have added a further patch to doc/guix.texi warning of `guix
build -S` not always returning complete and corresponding sources, see
attachment.

The good thing is that with a phase I no longer get an import cycle
because I no longer need a reference to the tar package.  So I put
nginx-accept-language-module inside web.scm now and there is no need
for a separate module.


> > +      (license (delete-duplicates
> > +                (cons license:bsd-2 ;license of nginx-mod-accept-language
> > +                      (package-license nginx))))))) ;the module’s code is linked
> 
> To avoid circular dependencies in top-level references, I suggest
> copying the license of ‘nginx’ instead of writing (package-license
> nginx).
> 

I believe this is no longer an issue now that
nginx-accept-language-module is in the same Guile module as nginx, is
it?


> > +++ b/gnu/packages/web-xyz.scm
> > @@ -0,0 +1,175 @@
> > +;;; GNU Guix --- Functional package management for GNU
> > +;;;; TODO should I really add copyright lines for people I copied from??
> > +;;; Copyright © 2014, 2015 Mark H Weaver <mhw@HIDDEN>
> > +;;; Copyright © 2016 Tobias Geerinckx-Rice <me@HIDDEN>
> > +;;; Copyright © 2017, 2018 Marius Bakke <mbakke@HIDDEN>
> 
> I don’t think you need to add these 3 lines here; the package definition
> is yours.
> 

This does not matter anymore after putting
nginx-accept-language-module in the same Guile module file as nginx.

In general though: IANAL but I have largely copied nginx’ configure
phase, so at least Mark would surely have copyright on parts of it.
However I believe copyright lines have limited legal significance
anyway and adding these authorship lines in a file not added by Mark
seems unreasonable.


> […]
> Perhaps “nginx-accept-language-module”, to match the name of the
> upstream repo?
> 

I agree.  Arch (who have no package for nginx-accept-language-module)
change their various nginx module package names to be more consistent,
I think, but this is not necessary in Guix, I think.


On Fri, Nov 01, 2019 at 03:58:43PM +0100, Ludovic Courtès wrote:
> Regarding the build system of nginx modules, we’ll see when
> we have more than one module packaged.  :-)
> 

Good. This module is not typical and writing a build system would be
difficult now.

Regards,
Florian

--xhybrlnsnh7vjec3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-doc-Add-warning-on-the-source-build-option-when-link.patch"

From b6da504736866bae655e2b4025729345e1ea19b7 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sat, 2 Nov 2019 13:13:01 +0100
Subject: [PATCH 1/3] doc: Add warning on the '--source' build option when
 linking statically.

* doc/guix.texi (Additional Build Options): Add warning.
---
 doc/guix.texi | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index da2423b422..30b69d8869 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8328,6 +8328,12 @@ The returned source tarball is the result of applying any patches and
 code snippets specified in the package @code{origin} (@pxref{Defining
 Packages}).
 
+Note that for statically linked packages, @command{guix build -S} will
+@emph{not} return the complete and corresponding sources since these
+would include the sources of statically linked dependencies.  In this
+case, when distributing sources for license compliance, you may want to
+play it safe and use the following @code{--sources} option instead.
+
 @item --sources
 Fetch and return the source of @var{package-or-derivation} and all their
 dependencies, recursively.  This is a handy way to obtain a local copy
-- 
2.23.0


--xhybrlnsnh7vjec3
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="0002-gnu-Add-Nginx-Accept-Language-module.patch"
Content-Transfer-Encoding: 8bit

From 21e6064f42defad1e2d35bbf95a4825fec9e4615 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sat, 2 Nov 2019 12:43:47 +0100
Subject: [PATCH 2/3] gnu: Add Nginx Accept Language module.

* gnu/packages/web.scm (nginx-accept-language-module): New public variable.
---
 gnu/packages/web.scm | 150 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 149 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 45ae63f193..6fcffb3004 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -35,6 +35,7 @@
 ;;; Copyright © 2019 Alex Griffin <a@HIDDEN>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@HIDDEN>
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@HIDDEN>
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -134,7 +135,8 @@
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages vim)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:use-module ((srfi srfi-1) #:select (delete-duplicates)))
 
 (define-public httpd
   (package
@@ -395,6 +397,152 @@ documentation.")
        "This package provides HTML documentation for the nginx web server.")
       (license license:bsd-2))))
 
+(define-public nginx-accept-language-module
+  ;; Upstream has never made a release; use current commit instead.
+  (let ((commit "2f69842f83dac77f7d98b41a2b31b13b87aeaba7")
+        (revision "1"))
+    (package
+      (name "nginx-accept-language-module")
+      (version (git-version "0.0.0" ;upstream has no version number
+                            revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/giom/nginx_accept_language_module.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1hjysrl15kh5233w7apq298cc2bp4q1z5mvaqcka9pdl90m0vhbw"))))
+      (build-system gnu-build-system)
+      (inputs `(("openssl" ,openssl)
+                ("pcre" ,pcre)
+                ("nginx-sources" ,(package-source nginx))
+                ("zlib" ,zlib)))
+      (arguments
+       `(#:tests? #f                      ; no test target
+         #:make-flags (list "modules")
+         #:modules ((guix build utils)
+                    (guix build gnu-build-system)
+                    (ice-9 popen)
+                    (ice-9 regex)
+                    (ice-9 textual-ports))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'unpack-nginx-sources
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               (begin
+                 ;; The nginx source code is part of the module’s source.
+                 (format #t "decompressing nginx source code~%")
+                 (call-with-output-file "nginx.tar"
+                   (lambda (out)
+                     (let* ((gzip (assoc-ref inputs "gzip"))
+                            (nginx-srcs (assoc-ref inputs "nginx-sources"))
+                            (pipe (open-pipe* OPEN_READ
+                                              (string-append gzip "/bin/gzip")
+                                              "-cd"
+                                              nginx-srcs)))
+                       (dump-port pipe out)
+                       (unless (= (status:exit-val (close-pipe pipe)) 0)
+                         (error "gzip decompress failed")))))
+                 (invoke (string-append (assoc-ref inputs "tar") "/bin/tar")
+                         "xvf" "nginx.tar" "--strip-components=1")
+                 (delete-file "nginx.tar")
+                 #t)))
+           (add-after 'unpack 'convert-to-dynamic-module
+             (lambda _
+               (begin
+                 (with-atomic-file-replacement "config"
+                   (lambda (in out)
+                     ;; cf. https://www.nginx.com/resources/wiki/extending/new_config/
+                     (format out "ngx_module_type=HTTP~%")
+                     (format out "ngx_module_name=\
+ngx_http_accept_language_module~%")
+                     (let* ((str (get-string-all in))
+                            (rx (make-regexp
+                                 "NGX_ADDON_SRCS=\"\\$NGX_ADDON_SRCS (.*)\""))
+                            (m (regexp-exec rx str))
+                            (srcs (match:substring m 1)))
+                       (format out (string-append "ngx_module_srcs=\""
+                                                  srcs "\"~%")))
+                     (format out ". auto/module~%")
+                     (format out "ngx_addon_name=$ngx_module_name~%"))))))
+           (add-before 'configure 'patch-/bin/sh
+             (lambda _
+               (substitute* "auto/feature"
+                 (("/bin/sh") (which "sh")))
+               #t))
+           (replace 'configure
+             ;; This phase is largely copied from the nginx package.
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((flags
+                      (list ;; A copy of nginx’ flags follows, otherwise we
+                            ;; get a binary compatibility error.  FIXME: Code
+                            ;; duplication is bad.
+                       (string-append "--prefix=" (assoc-ref outputs "out"))
+                       "--with-http_ssl_module"
+                       "--with-http_v2_module"
+                       "--with-pcre-jit"
+                       "--with-debug"
+                       ;; Even when not cross-building, we pass the
+                       ;; --crossbuild option to avoid customizing for the
+                       ;; kernel version on the build machine.
+                       ,(let ((system "Linux")    ; uname -s
+                              (release "3.2.0")   ; uname -r
+                              ;; uname -m
+                              (machine (match (or (%current-target-system)
+                                                  (%current-system))
+                                         ("x86_64-linux"   "x86_64")
+                                         ("i686-linux"     "i686")
+                                         ("mips64el-linux" "mips64")
+                                         ;; Prevent errors when querying
+                                         ;; this package on unsupported
+                                         ;; platforms, e.g. when running
+                                         ;; "guix package --search="
+                                         (_                "UNSUPPORTED"))))
+                          (string-append "--crossbuild="
+                                         system ":" release ":" machine))
+                       ;; The following are the args decribed on
+                       ;; <https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus>.
+                       ;; Enabling --with-compat here and in the nginx package
+                       ;; would ensure binary compatibility even when using
+                       ;; different configure options from the main nginx
+                       ;; package.  This is not needed for Guix.
+                       ;; "--with-compat"
+                       "--add-dynamic-module=.")))
+                 (setenv "CC" "gcc")
+                 (format #t "environment variable `CC' set to `gcc'~%")
+                 (format #t "configure flags: ~s~%" flags)
+                 (apply invoke "./configure" flags)
+                 #t)))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (modules-dir (string-append out "/etc/nginx/modules"))
+                      (doc-dir (string-append
+                                out "/share/doc/nginx-accept-language-module")))
+                 (mkdir-p modules-dir)
+                 (copy-file "objs/ngx_http_accept_language_module.so"
+                            (string-append
+                             modules-dir "/ngx_http_accept_language_module.so"))
+                 (mkdir-p doc-dir)
+                 (copy-file "README.textile"
+                            (string-append doc-dir "/README.textile"))
+                 #t))))))
+      (home-page
+       "https://www.nginx.com/resources/wiki/modules/accept_language/")
+      (synopsis "Nginx module for parsing the Accept-Language HTTP header")
+      (description
+       "Nginx module that parses the Accept-Language field in HTTP headers and
+chooses the most suitable locale for the user from the list of locales
+supported at your website.")
+      (license (delete-duplicates
+                (cons license:bsd-2 ;license of nginx-accept-language-module
+                      ;; The module’s code is linked statically with nginx,
+                      ;; therefore nginx’ other licenses may also apply to its
+                      ;; binary:
+                      (package-license nginx)))))))
+
 (define-public fcgi
   (package
     (name "fcgi")
-- 
2.23.0


--xhybrlnsnh7vjec3
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment; filename="0003-services-Make-it-possible-to-include-dynamic-modules.patch"
Content-Transfer-Encoding: 8bit

From 250ae2011ac1c976508136e9f50cb04e6ab5f23c Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sat, 2 Nov 2019 14:05:30 +0100
Subject: [PATCH 3/3] services: Make it possible to include dynamic modules in
 nginx.

* gnu/services/web.scm (<nginx-configuration>): Add modules field.
(nginx-configuration-modules): New field accessor.
(emit-load-module): New procedure.
(default-nginx-config): Add support for the modules field.
* doc/guix.texi (NGINX): Document it.
---
 doc/guix.texi        | 4 ++++
 gnu/services/web.scm | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 30b69d8869..898123da2b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -19770,6 +19770,10 @@ use the size of the processors cache line.
 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
 Maximum bucket size for the server names hash tables.
 
+@item @code{modules} (default: @code{'()})
+List of nginx dynamic modules to load.  Should be a list of strings or
+string valued G-expressions.
+
 @item @code{extra-content} (default: @code{""})
 Extra content for the @code{http} block.  Should be string or a string
 valued G-expression.
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 899be1c168..896d06eb18 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -9,6 +9,7 @@
 ;;; Copyright  2018 Pierre-Antoine Rouby <pierre-antoine.rouby@HIDDEN>
 ;;; Copyright  2017, 2018, 2019 Christopher Baines <mail@HIDDEN>
 ;;; Copyright  2018 Marius Bakke <mbakke@HIDDEN>
+;;; Copyright  2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -95,6 +96,7 @@
             nginx-configuration-upstream-blocks
             nginx-configuration-server-names-hash-bucket-size
             nginx-configuration-server-names-hash-bucket-max-size
+            nginx-configuration-modules
             nginx-configuration-extra-content
             nginx-configuration-file
 
@@ -522,6 +524,7 @@
                                  (default #f))
   (server-names-hash-bucket-max-size nginx-configuration-server-names-hash-bucket-max-size
                                      (default #f))
+  (modules nginx-configuration-modules (default '()))
   (extra-content nginx-configuration-extra-content
                  (default ""))
   (file          nginx-configuration-file         ;#f | string | file-like
@@ -542,6 +545,9 @@ of index files."
         ((? string? str) (list str " ")))
       names))
 
+(define (emit-load-module module)
+  (list "load_module " module ";\n"))
+
 (define emit-nginx-location-config
   (match-lambda
     (($ <nginx-location-configuration> uri body)
@@ -615,12 +621,14 @@ of index files."
                  server-blocks upstream-blocks
                  server-names-hash-bucket-size
                  server-names-hash-bucket-max-size
+                 modules
                  extra-content)
    (apply mixed-text-file "nginx.conf"
           (flatten
            "user nginx nginx;\n"
            "pid " run-directory "/pid;\n"
            "error_log " log-directory "/error.log info;\n"
+           (map emit-load-module modules)
            "http {\n"
            "    client_body_temp_path " run-directory "/client_body_temp;\n"
            "    proxy_temp_path " run-directory "/proxy_temp;\n"
-- 
2.23.0


--xhybrlnsnh7vjec3--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 1 Nov 2019 14:59:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 01 10:58:59 2019
Received: from localhost ([127.0.0.1]:56827 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iQYOA-0007OC-IQ
	for submit <at> debbugs.gnu.org; Fri, 01 Nov 2019 10:58:59 -0400
Received: from eggs.gnu.org ([209.51.188.92]:35704)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iQYO7-0007Ny-VV
 for 26302 <at> debbugs.gnu.org; Fri, 01 Nov 2019 10:58:56 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:60005)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iQYO1-0002nA-7U; Fri, 01 Nov 2019 10:58:49 -0400
Received: from [2a01:e0a:1d:7270:6a6c:dc17:fc02:cfda] (port=58762 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iQYNy-0006fd-7U; Fri, 01 Nov 2019 10:58:46 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
 <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
 <20191031201931.pj2uma6tc57u2tjc@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 11 Brumaire an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Fri, 01 Nov 2019 15:58:43 +0100
In-Reply-To: <20191031201931.pj2uma6tc57u2tjc@HIDDEN>
 (pelzflorian@HIDDEN's message of "Thu, 31 Oct 2019 21:19:31
 +0100")
Message-ID: <871rurbq3g.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Tue, Oct 22, 2019 at 02:10:59PM +0200, Ludovic Court=C3=A8s wrote:
>> Sorry that it=E2=80=99s taken this long, but I=E2=80=99m happy to say th=
at the
>> =E2=80=98wip-i18n=E2=80=99 branch of the manual is now visible at:
>>=20
>>   https://guix.gnu.org/.i18n/de/
>>   https://guix.gnu.org/.i18n/en/
>>=20
>
> I have finally rebased wip-i18n, so these URLs display properly now.
> I would like to squash some of my further commits there though.

Neat!

> IMHO the next step could be my above patch which packages
> ngx_http_accept_language_module.  I do not yet know how to redirect
> index files in nginx though.  Long-term, nginx modules should get
> their own build system though, I suppose.

Reviewed!  Regarding the build system of nginx modules, we=E2=80=99ll see w=
hen
we have more than one module packaged.  :-)

Thanks,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 1 Nov 2019 14:54:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 01 10:54:59 2019
Received: from localhost ([127.0.0.1]:56814 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iQYKE-0007Gp-Qk
	for submit <at> debbugs.gnu.org; Fri, 01 Nov 2019 10:54:59 -0400
Received: from eggs.gnu.org ([209.51.188.92]:34683)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iQYKA-0007GZ-7r
 for 26302 <at> debbugs.gnu.org; Fri, 01 Nov 2019 10:54:53 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:59909)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iQYK4-0001J6-Ks; Fri, 01 Nov 2019 10:54:44 -0400
Received: from [2a01:e0a:1d:7270:6a6c:dc17:fc02:cfda] (port=58670 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iQYK4-0002m5-7v; Fri, 01 Nov 2019 10:54:44 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
Date: Fri, 01 Nov 2019 15:54:42 +0100
In-Reply-To: <20191007081502.wog4q4wjptvhmejf@HIDDEN>
 (pelzflorian@HIDDEN's message of "Mon, 7 Oct 2019 10:15:03
 +0200")
Message-ID: <874kznbqa5.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi Florian

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

>>From 9ec69c888b978cb870a5873af8e327541fe4ef7a Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Sun, 6 Oct 2019 20:45:34 +0200
> Subject: [PATCH 1/2] [wip] gnu: Add ngx_http_accept_language_module.
>
> * gnu/packages/web-xyz.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add package.

[...]

> +++ b/gnu/packages/web-xyz.scm
> @@ -0,0 +1,175 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;;; TODO should I really add copyright lines for people I copied from??
> +;;; Copyright =C2=A9 2014, 2015 Mark H Weaver <mhw@HIDDEN>
> +;;; Copyright =C2=A9 2016 Tobias Geerinckx-Rice <me@HIDDEN>
> +;;; Copyright =C2=A9 2017, 2018 Marius Bakke <mbakke@HIDDEN>

I don=E2=80=99t think you need to add these 3 lines here; the package defin=
ition
is yours.

> +(define-public nginx-mod-accept-language
> +  (let ((commit "2f69842f83dac77f7d98b41a2b31b13b87aeaba7")
> +        (revision "1"))

Is there no upstream version?  If that=E2=80=99s the case, that=E2=80=99s f=
ine, but
please add a comment explaining it.

> +    (package
> +      (name "nginx-mod-accept-language")

Perhaps =E2=80=9Cnginx-accept-language-module=E2=80=9D, to match the name o=
f the
upstream repo?

> +         (modules '((guix build utils)
> +                    (ice-9 popen)))
> +         (snippet
> +          #~(begin
> +              ;; the nginx source code is part of the module=E2=80=99s s=
ource
> +              (format #t "decompressing nginx source code~%")
> +              (call-with-output-file "nginx.tar"
> +                (lambda (out)
> +                  (let ((pipe (open-pipe* OPEN_READ
> +                                          #+(file-append gzip "/bin/gzip=
") "-cd"
> +                                          #$(package-source nginx))))
> +                    (dump-port pipe out)
> +                    (unless (=3D (status:exit-val (close-pipe pipe)) 0)
> +                      (error "gzip decompress failed")))))
> +              (invoke #+(file-append tar "/bin/tar") "xvf" "nginx.tar"
> +                      "--strip-components=3D1")
> +              (delete-file "nginx.tar")

I=E2=80=99d suggest doing it in a phase.

> +      (license (delete-duplicates
> +                (cons license:bsd-2 ;license of nginx-mod-accept-language
> +                      (package-license nginx))))))) ;the module=E2=80=99=
s code is linked

To avoid circular dependencies in top-level references, I suggest
copying the license of =E2=80=98nginx=E2=80=99 instead of writing (package-=
license
nginx).

> +            nginx-configuration-load-modules
>              nginx-configuration-extra-content
>              nginx-configuration-file
>=20=20
> @@ -522,6 +524,7 @@
>                                   (default #f))
>    (server-names-hash-bucket-max-size nginx-configuration-server-names-ha=
sh-bucket-max-size
>                                       (default #f))
> +  (load-modules nginx-configuration-load-modules (default '()))

What about =E2=80=9Cloaded-modules=E2=80=9D, =E2=80=9Cloadable-modules=E2=
=80=9D, or simply =E2=80=9Cmodules=E2=80=9D?
=E2=80=9Cload-modules=E2=80=9D sounds imperative whereas the rest of the co=
nfig is
declarative.

Apart from that it LGTM.

>>From ea5edd15586722b3557912e81171e69f7be339fa Mon Sep 17 00:00:00 2001
> From: Florian Pelz <pelzflorian@HIDDEN>
> Date: Mon, 7 Oct 2019 07:58:30 +0200
> Subject: [PATCH] berlin: Redirect to localized website depending on
>  Accept-Language header.
>
> * hydra/nginx/berlin.scm (guix.gnu.org-locations): Redirect html URLs.
> (%nginx-configuration): Load required nginx dynamic module.

LGTM, but I guess we=E2=80=99ll commit it when we=E2=80=99re ready to switc=
h to the new
web site.

Thanks!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 31 Oct 2019 20:19:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Oct 31 16:19:42 2019
Received: from localhost ([127.0.0.1]:54353 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iQGuv-0001JC-Ed
	for submit <at> debbugs.gnu.org; Thu, 31 Oct 2019 16:19:37 -0400
Received: from pelzflorian.de ([5.45.111.108]:60670 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iQGur-0001J2-Ur
 for 26302 <at> debbugs.gnu.org; Thu, 31 Oct 2019 16:19:34 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 985023604C5;
 Thu, 31 Oct 2019 21:19:32 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1572553172;
 bh=pGDMj/66jif/1r4SdbTiRyuSDWwYIzgJBZQaqoyyvH0=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Aq2pmBaIDsYObXYGZ8CYcyaReQtBz4vuwjWNJMCbyhqRCvpc8QvdDXl+wEeXnIDSG
 p5mW20eAE4RL/xwMiGQHBC5dk6jvWT01er/uEC3rTNk3cdHN4QcXyooV1YJBJU0Z6+
 uDfary+ZUhzH5VkWBMDy8rHqZQsBM5yGbPKQmcaY=
Date: Thu, 31 Oct 2019 21:19:31 +0100
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191031201931.pj2uma6tc57u2tjc@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <8760e8l3bd.fsf@HIDDEN>
 <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
 <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 2.7 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  On Tue, Oct 22, 2019 at 02:10:59PM +0200, Ludovic Courtès
    wrote: > Sorry that it’s taken this long, but I’m happy to say that the
    > ‘wip-i18n’ branch of the manual is now visible at: > > http [...] 
 
 Content analysis details:   (2.7 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: gnu.org]
  2.7 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 1.7 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  On Tue, Oct 22, 2019 at 02:10:59PM +0200, Ludovic Courtès
    wrote: > Sorry that it’s taken this long, but I’m happy to say that the
    > ‘wip-i18n’ branch of the manual is now visible at: > > http [...] 
 
 Content analysis details:   (1.7 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                             blocked.  See
                             http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                              for more information.
                             [URIs: gnu.org]
  2.7 DOS_RCVD_IP_TWICE_B    Received from the same IP twice in a row
                             (only one external relay)
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager

On Tue, Oct 22, 2019 at 02:10:59PM +0200, Ludovic Courtès wrote:
> Sorry that it’s taken this long, but I’m happy to say that the
> ‘wip-i18n’ branch of the manual is now visible at:
> 
>   https://guix.gnu.org/.i18n/de/
>   https://guix.gnu.org/.i18n/en/
> 

I have finally rebased wip-i18n, so these URLs display properly now.
I would like to squash some of my further commits there though.


On Tue, Oct 22, 2019 at 02:28:40PM +0200, pelzflorian (Florian Pelz) wrote:
> On Tue, Oct 22, 2019 at 02:10:59PM +0200, Ludovic Courtès wrote:
> > We’ll need the nginx magic to honor ‘Accept-Language’ and such; I think
> > you submitted something that I may have overlooked, don’t hesitate to
> > refresh my mind.  :-)
> >
> > Anyway, we have a good starting point, and perhaps we’ll be able to
> > switch quickly; what else do we need?
> > 
> > 
> 
> 
> I would be happy if you could review my Guix patches at
> 
> https://lists.gnu.org/archive/html/bug-guix/2019-10/msg00068.html
> 
> After that I also sent maintenance patches, but redirection only works
> for URLs ending in .html right now…
> 

IMHO the next step could be my above patch which packages
ngx_http_accept_language_module.  I do not yet know how to redirect
index files in nginx though.  Long-term, nginx modules should get
their own build system though, I suppose.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 23 Oct 2019 14:41:51 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Oct 23 10:41:51 2019
Received: from localhost ([127.0.0.1]:34778 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iNHpe-0001Nl-Mz
	for submit <at> debbugs.gnu.org; Wed, 23 Oct 2019 10:41:50 -0400
Received: from pelzflorian.de ([5.45.111.108]:49206 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iNHpc-0001Nb-Gi
 for 26302 <at> debbugs.gnu.org; Wed, 23 Oct 2019 10:41:49 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 7DAAF3604C5;
 Wed, 23 Oct 2019 16:41:47 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1571841707;
 bh=2q7zBqrcjqZgJRvpJ6xII+MG4d0DX/CsaMG5GVOBQ+o=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=y+e5tbTsHIMb4dWFjbdJ8hCsQgZFuMjSmF4p/HiQtkyneDqgNhlFAX7RQAUKH4JWz
 S37/w46BVlNfJsuFlTuyCAPXOYBh2M7Nqia/7esN6RRt3/09o2FIwix+EY5o3oq3ZQ
 7qx0ynXCEnV5alYE9ZlyX/FEI7wY8wa9k84k2EHg=
Date: Wed, 23 Oct 2019 16:41:47 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191023144147.u4tnqbtrsbe5mfg4@HIDDEN>
References: <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
 <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
 <20191022124128.zi4siz76kdluxr5u@HIDDEN>
 <87imoftum9.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87imoftum9.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Oct 23, 2019 at 04:16:30PM +0200, Ludovic Courtès wrote:
> > Also it appears I broke URLs to the manual.
> 
> Which URLs specifically?
> 

Only the hyperlinks to the manual in .i18n.  Sorry for being
imprecise.  Nothing outside is broken.

> BTW, feel free to rebase ‘wip-i18n’ and to fix issues you stumble upon
> in that branch.  With this setup we should be able to see the changes
> on-line automatically, so it’s a great way to get the ball rolling!
> 

Will do tomorrow.  Then I will check why the stylesheet URLs are
wrong.  Thank you for this setup.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 23 Oct 2019 14:16:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Oct 23 10:16:42 2019
Received: from localhost ([127.0.0.1]:34752 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iNHRJ-0000iL-CB
	for submit <at> debbugs.gnu.org; Wed, 23 Oct 2019 10:16:42 -0400
Received: from eggs.gnu.org ([209.51.188.92]:45552)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iNHRH-0000i8-DQ
 for 26302 <at> debbugs.gnu.org; Wed, 23 Oct 2019 10:16:39 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:52793)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iNHRC-00028a-7Z; Wed, 23 Oct 2019 10:16:34 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=56034 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iNHRB-0006Ol-Ky; Wed, 23 Oct 2019 10:16:33 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
 <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
 <20191022124128.zi4siz76kdluxr5u@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: 2 Brumaire an 228 de la =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Wed, 23 Oct 2019 16:16:30 +0200
In-Reply-To: <20191022124128.zi4siz76kdluxr5u@HIDDEN>
 (pelzflorian@HIDDEN's message of "Tue, 22 Oct 2019 14:41:28
 +0200")
Message-ID: <87imoftum9.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Tue, Oct 22, 2019 at 02:28:40PM +0200, pelzflorian (Florian Pelz) wrot=
e:
>> The CSS is not loaded from the .i18n subdirectory, it seems.
>>=20
>
> I suppose your fix at
>
> https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/commit/?id=3D0d62=
7303680ef21efd63fba0728e39afc08d67eb
>
> would address it had I rebased.

I rebased some time ago and I think this fix is included (I added it
specifically for this purpose).

> Also it appears I broke URLs to the manual.

Which URLs specifically?

BTW, feel free to rebase =E2=80=98wip-i18n=E2=80=99 and to fix issues you s=
tumble upon
in that branch.  With this setup we should be able to see the changes
on-line automatically, so it=E2=80=99s a great way to get the ball rolling!

Thanks,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 22 Oct 2019 13:01:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Oct 22 09:01:23 2019
Received: from localhost ([127.0.0.1]:58360 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iMtmq-0006jW-4s
	for submit <at> debbugs.gnu.org; Tue, 22 Oct 2019 09:01:22 -0400
Received: from pelzflorian.de ([5.45.111.108]:47564 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iMtmo-0006jO-K3
 for 26302 <at> debbugs.gnu.org; Tue, 22 Oct 2019 09:01:19 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 6D5DD3604C5;
 Tue, 22 Oct 2019 15:01:17 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1571749277;
 bh=K7hWYp94++kBsp3WbH5wE+lPogGEQjN6o6JcY8G7qi8=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=AnburbofMGvrHGOKeVtjj/bxxNKlqtT7NVQ08unR+NMfFFW6JRgL4J/0vsjMrms4A
 gHkTgDxosuphJ+3im0bm5ZaELE+5kCsUK6iPrinmQpMyCLLowdfDn6LSTxXFwD0hnX
 +rqLIw+tvVwbEsWBeiSEBpCdPw2t9icqmcefdXvc=
Date: Tue, 22 Oct 2019 15:01:17 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191022130116.avmtflgnlcoxryt2@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <8760e8l3bd.fsf@HIDDEN>
 <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
 <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Tue, Oct 22, 2019 at 02:28:40PM +0200, pelzflorian (Florian Pelz) wrote:
> > Whenever you push to that branch, the web site should be automatically
> > updated within an hour.
> > 
> 
> I will rebase wip-i18n later this week and when the documentation
> videos are decided.
> 

Also it appears I broke URLs to the manual.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 22 Oct 2019 12:41:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Oct 22 08:41:34 2019
Received: from localhost ([127.0.0.1]:58350 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iMtTf-0006F7-Ak
	for submit <at> debbugs.gnu.org; Tue, 22 Oct 2019 08:41:33 -0400
Received: from pelzflorian.de ([5.45.111.108]:47518 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iMtTe-0006Ez-2j
 for 26302 <at> debbugs.gnu.org; Tue, 22 Oct 2019 08:41:30 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id EF2763604C5;
 Tue, 22 Oct 2019 14:41:28 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1571748089;
 bh=9RQn17iJnfYdzMl0c6MuYO/9RssHg+bqCzpKOZc19GA=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=3sb7me1iXH5JIDWrnx5bVm6Bhxp95wB+9IaWWoeFxWv9stEIdBgAtfG74p3jk847s
 tiDVEtdlzvQbqDimRvF0R9ERVNW8TLRng3O7dl7OqhTonH89FzkLXY0nwAbPDrOqAu
 AIbEUhb9XjZCa2p8CxNy9gSJUpfvoBpMZlfoxu3E=
Date: Tue, 22 Oct 2019 14:41:28 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191022124128.zi4siz76kdluxr5u@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <8760e8l3bd.fsf@HIDDEN>
 <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
 <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: sirgazil <sirgazil@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Tue, Oct 22, 2019 at 02:28:40PM +0200, pelzflorian (Florian Pelz) wrote:
> The CSS is not loaded from the .i18n subdirectory, it seems.
> 

I suppose your fix at

https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/commit/?id=0d627303680ef21efd63fba0728e39afc08d67eb

would address it had I rebased.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 22 Oct 2019 12:28:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Oct 22 08:28:44 2019
Received: from localhost ([127.0.0.1]:58328 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iMtHH-0005uC-Rx
	for submit <at> debbugs.gnu.org; Tue, 22 Oct 2019 08:28:44 -0400
Received: from pelzflorian.de ([5.45.111.108]:47496 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iMtHF-0005u4-KX
 for 26302 <at> debbugs.gnu.org; Tue, 22 Oct 2019 08:28:42 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 501FE3604C5;
 Tue, 22 Oct 2019 14:28:40 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1571747320;
 bh=TkXwUw5B3M9ADK0lKySXGqpz68O1kD8ZS7pN8ErUmuU=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=b/KNNCZWpm9dPNMKxNeAxZ1Mcfe0JIcQQu7Tqvgd2fzN67QS4KVUtB4Hz/sQ4dXvy
 J8tOBKGtKuj9IOkBHUGdVn+ilVKidoJu/U7Mzu6jpUWsCDjeKoNdN7ecNK+939o1yU
 XamKlG++FN5PmhBgQd0aXq0pB8TbC9yP18JwEJiY=
Date: Tue, 22 Oct 2019 14:28:40 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191022122840.xwrrfvqm6t7uby6s@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <8760e8l3bd.fsf@HIDDEN>
 <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN> <87a79t56b0.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87a79t56b0.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Julien Lepiller <julien@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Tue, Oct 22, 2019 at 02:10:59PM +0200, Ludovic Courtès wrote:
> Sorry that it’s taken this long, but I’m happy to say that the
> ‘wip-i18n’ branch of the manual is now visible at:
> 
>   https://guix.gnu.org/.i18n/de/
>   https://guix.gnu.org/.i18n/en/
> 

Thank you. :)


> Whenever you push to that branch, the web site should be automatically
> updated within an hour.
> 

I will rebase wip-i18n later this week and when the documentation
videos are decided.



> In IceCat the navigation bar at the top with “radio buttons” gets
> incorrectly displayed for some reason.
>

The CSS is not loaded from the .i18n subdirectory, it seems.


> We’ll need the nginx magic to honor ‘Accept-Language’ and such; I think
> you submitted something that I may have overlooked, don’t hesitate to
> refresh my mind.  :-)
>
> Anyway, we have a good starting point, and perhaps we’ll be able to
> switch quickly; what else do we need?
> 
> 


I would be happy if you could review my Guix patches at

https://lists.gnu.org/archive/html/bug-guix/2019-10/msg00068.html

After that I also sent maintenance patches, but redirection only works
for URLs ending in .html right now…


Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 22 Oct 2019 12:11:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Oct 22 08:11:10 2019
Received: from localhost ([127.0.0.1]:58320 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iMt0I-0005Uf-8g
	for submit <at> debbugs.gnu.org; Tue, 22 Oct 2019 08:11:10 -0400
Received: from eggs.gnu.org ([209.51.188.92]:41623)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iMt0G-0005UQ-AC
 for 26302 <at> debbugs.gnu.org; Tue, 22 Oct 2019 08:11:08 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:55258)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iMt0A-0003YU-IC; Tue, 22 Oct 2019 08:11:02 -0400
Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=39272 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iMt0A-0007uF-1k; Tue, 22 Oct 2019 08:11:02 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN>
Date: Tue, 22 Oct 2019 14:10:59 +0200
In-Reply-To: <87muf033pp.fsf@HIDDEN> ("Ludovic
 \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\=
 \=\?utf-8\?Q\?s\?\= message of "Thu, 19 Sep 2019 13:50:10 +0200")
Message-ID: <87a79t56b0.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Julien Lepiller <julien@HIDDEN>, sirgazil <sirgazil@HIDDEN>,
 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hello Florian and all!

(Cc: sirgazil + Julien.)

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

> I think you can go ahead and push this series to a branch, say
> =E2=80=98wip-i18n=E2=80=99 (the =E2=80=98wip-=E2=80=99 prefix meaning tha=
t you reserve the right to
> rebase the branch as you will.)
>
> We can then maybe set up a =E2=80=98static-web-site=E2=80=99 service on b=
erlin, with
> appropriate nginx rules, to build and publish the manual at a separate
> URL so we can all test it.  See hydra/berlin.scm in maintenance.git.

Sorry that it=E2=80=99s taken this long, but I=E2=80=99m happy to say that =
the
=E2=80=98wip-i18n=E2=80=99 branch of the manual is now visible at:

  https://guix.gnu.org/.i18n/de/
  https://guix.gnu.org/.i18n/en/

Whenever you push to that branch, the web site should be automatically
updated within an hour.

In IceCat the navigation bar at the top with =E2=80=9Cradio buttons=E2=80=
=9D gets
incorrectly displayed for some reason.

We=E2=80=99ll need the nginx magic to honor =E2=80=98Accept-Language=E2=80=
=99 and such; I think
you submitted something that I may have overlooked, don=E2=80=99t hesitate =
to
refresh my mind.  :-)

Anyway, we have a good starting point, and perhaps we=E2=80=99ll be able to
switch quickly; what else do we need?


For the record, the changes to the config of berlin.guix.gnu.org to make
it possible were:

  https://git.savannah.gnu.org/cgit/guix/maintenance.git/commit/?id=3De86c6=
86b607a0f772ae004db021181607ba805ee

Thanks,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 8 Oct 2019 09:37:35 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Oct 08 05:37:35 2019
Received: from localhost ([127.0.0.1]:49590 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iHlvq-0002zH-A9
	for submit <at> debbugs.gnu.org; Tue, 08 Oct 2019 05:37:35 -0400
Received: from pelzflorian.de ([5.45.111.108]:46648 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iHlvm-0002z6-2e
 for 26302 <at> debbugs.gnu.org; Tue, 08 Oct 2019 05:37:24 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 8352E3602A4;
 Tue,  8 Oct 2019 11:37:20 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1570527440;
 bh=tH4w2p0v8eqazGUWVQ5OZ02rM9vrHJelG2MTR3w2M8A=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=ODmEPa7pOMXJTrwDJFT9TR0Rfl63Tr4tCwmt0s0a+sfoxQ+qL5IfR++FbXimK2330
 p/c4vZcTNWBNe1ELQUybdw82FaaZsudfbpOJarq5/9jAFWEcRBLxgEtEPuIxaN+qdq
 /Mmh3qmtVt5D65y516ho5NrooEhkPB9oCG4BxZow=
Date: Tue, 8 Oct 2019 11:37:19 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191008093719.duvx26l2ods3fg75@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
 <20191007081502.wog4q4wjptvhmejf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="t5yszdt4gakmziuy"
Content-Disposition: inline
In-Reply-To: <20191007081502.wog4q4wjptvhmejf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--t5yszdt4gakmziuy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Mon, Oct 07, 2019 at 10:15:03AM +0200, pelzflorian (Florian Pelz) wrote:
> (Redirects of
> non-html URLs are wrong and nginx does not run with this config,
> perhaps I should use rewrite instead of try_files.  I can try later
> today.)
>

I changed the patch and while nginx loads, redirects for files without
html suffix still fail.  I will stop and wait for smarter people with
more nginx experience.  Attached is the current patch and changes I
make to berlin for testing in a local VM using

GUILE_LOAD_PATH=$(readlink -f ~/git/maintenance/hydra/modules):$GUILE_LOAD_PATH guix system vm-image --image-size=14G berlin.scm --fallback

Regards,
Florian

--t5yszdt4gakmziuy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-berlin-Redirect-to-localized-website-depending-on-Ac.patch"

From ef1d268cd75219c18ef098389a8ea5ef460ee542 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Tue, 8 Oct 2019 08:30:59 +0200
Subject: [PATCH] berlin: Redirect to localized website depending on
 Accept-Language header.

* hydra/nginx/berlin.scm (guix.gnu.org-locations): Redirect html URLs.
(%nginx-configuration): Load required nginx dynamic module.
---
 hydra/nginx/berlin.scm | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index df90873..c716103 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -1,6 +1,7 @@
 ;; Nginx configuration for ci.guix.info
 
-(use-modules (gnu services web))
+(use-modules (gnu packages web-xyz)
+             (gnu services web))
 
 ;; TODO: these settings cannot currently expressed with Guix:
 
@@ -462,6 +463,16 @@ PUBLISH-URL."
    (nginx-location-configuration
     (uri "~ \\.pdf$")                             ;*.pdf at the top level
     (body (list "root /srv/guix-pdfs;")))
+   (nginx-location-configuration
+    (uri "~ (.*)/$")
+    (body (list
+           "try_files $1/index.html =404;")))
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list
+           ;; put en first so it is the default:
+           "set_from_accept_language $lang en de;"
+           "try_files /$lang/$uri $uri =404;")))
 
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
@@ -758,5 +769,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (load-modules
+    (list
+     ;; We need this module for redirecting users to the localized
+     ;; website of their choice.
+     (file-append nginx-mod-accept-language "\
+/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (extra-content
     (string-join %extra-content "\n"))))
-- 
2.23.0


--t5yszdt4gakmziuy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="test-berlin-vm.patch"

diff --git a/hydra/berlin.scm b/hydra/berlin.scm
index 172c9cd..d965770 100644
--- a/hydra/berlin.scm
+++ b/hydra/berlin.scm
@@ -90,29 +90,29 @@ Happy hacking!\n"))
                  ;; The root file system resides on just a single
                  ;; disk, no RAID :-/
                  (file-system
-                   (device (file-system-label "my-root"))
+                   (device "/dev/sda");(file-system-label "my-root"))
                    (mount-point "/")
                    (type "ext4"))
-                 ;; This is a large external storage array
-                 ;; connected via 2 HBA cards.  We only mount it
-                 ;; through one of the HBA cards.  We would need
-                 ;; to use multipathd otherwise.
-                 (file-system
-                   (device (uuid "a6455b66-59d2-40bd-bddb-0c572bb62a2f"))
-                   (mount-point "/gnu")
-                   (type "ext4"))
-                 ;; Bind mount cache to large external storage.
-                 (file-system
-                   (device "/gnu/cache")
-                   (mount-point "/var/cache")
-                   (flags '(bind-mount))
-                   (type "none"))
-                 ;; Access root file system without bind mounts.
-                 (file-system
-                   (device "/")
-                   (mount-point "/mnt/root-fs")
-                   (flags '(bind-mount))
-                   (type "none"))
+                 ;; ;; This is a large external storage array
+                 ;; ;; connected via 2 HBA cards.  We only mount it
+                 ;; ;; through one of the HBA cards.  We would need
+                 ;; ;; to use multipathd otherwise.
+                 ;; (file-system
+                 ;;   (device (uuid "a6455b66-59d2-40bd-bddb-0c572bb62a2f"))
+                 ;;   (mount-point "/gnu")
+                 ;;   (type "ext4"))
+                 ;; ;; Bind mount cache to large external storage.
+                 ;; (file-system
+                 ;;   (device "/gnu/cache")
+                 ;;   (mount-point "/var/cache")
+                 ;;   (flags '(bind-mount))
+                 ;;   (type "none"))
+                 ;; ;; Access root file system without bind mounts.
+                 ;; (file-system
+                 ;;   (device "/")
+                 ;;   (mount-point "/mnt/root-fs")
+                 ;;   (flags '(bind-mount))
+                 ;;   (type "none"))
                  %base-file-systems))
 
   ;; Local admin account for MDC maintenance.
@@ -134,129 +134,118 @@ Happy hacking!\n"))
   (services (cons*
              ;; Connection to the DMZ for public access
              ;; This is a 1G port only
-             (static-networking-service "eno1"
-                                        "141.80.181.41"
-                                        #:netmask "255.255.255.0"
-                                        #:gateway "141.80.181.1")
-             ;; This is a 10G port.
-             (static-networking-service "enp129s0f0"
-                                        "141.80.181.40"
-                                        #:netmask "255.255.255.0")
-             ;; Connection to build nodes
-             (static-networking-service "eno3"
-                                        "141.80.167.131"
-                                        #:netmask "255.255.255.192")
-
-             ;; Allow login over serial console.
-             (agetty-service (agetty-configuration
-                              (tty "ttyS0")
-                              (baud-rate "115200")))
-
-             ;; DNS
-             (service knot-service-type
-                      (knot-configuration
-                        (zones (list (knot-zone-configuration
-                                       (domain "guix.gnu.org")
-                                       (master '("bayfront-master"))
-                                       (acl '("notify-allow")))))
-                        (acls (list (knot-acl-configuration
-                                      (id "notify-allow")
-                                      (address (list bayfront-ip4))
-                                      (action '(notify)))))
-                        (remotes (list (knot-remote-configuration
-                                         (id "bayfront-master")
-                                         (address (list bayfront-ip4)))))))
-
-             ;; Monitoring
-             (service zabbix-agent-service-type)
-             (service zabbix-server-service-type
-                      (zabbix-server-configuration
-                       (include-files '("/root/zabbix-pass"))))
-             (service zabbix-front-end-service-type
-                      (zabbix-front-end-configuration
-                       (nginx (list
-                               (nginx-server-configuration
-                                (root #~(string-append #$zabbix-server:front-end "/share/zabbix/php"))
-                                (listen '("127.0.0.1:7878"))
-                                (index '("index.php"))
-                                (locations
-                                 (let ((php-location (nginx-php-location)))
-                                   (list (nginx-location-configuration
-                                          (inherit php-location)
-                                          (body (append (nginx-location-configuration-body php-location)
-                                                        (list "
-fastcgi_param PHP_VALUE \"post_max_size = 16M
-                          max_execution_time = 300\";
-"))))))))))
-                       (db-secret-file "/root/zabbix-front-end-secrets")))
-
-             ;; For the Zabbix database.  It was created by manually
-             ;; following the instructions here:
-             ;; https://www.zabbix.com/documentation/3.0/manual/appendix/install/db_scripts
-             (postgresql-service)
+             (service dhcp-client-service-type)
+;; 
+;;              ;; Allow login over serial console.
+;;              (agetty-service (agetty-configuration
+;;                               (tty "ttyS0")
+;;                               (baud-rate "115200")))
+;; 
+;;              ;; DNS
+;;              (service knot-service-type
+;;                       (knot-configuration
+;;                         (zones (list (knot-zone-configuration
+;;                                        (domain "guix.gnu.org")
+;;                                        (master '("bayfront-master"))
+;;                                        (acl '("notify-allow")))))
+;;                         (acls (list (knot-acl-configuration
+;;                                       (id "notify-allow")
+;;                                       (address (list bayfront-ip4))
+;;                                       (action '(notify)))))
+;;                         (remotes (list (knot-remote-configuration
+;;                                          (id "bayfront-master")
+;;                                          (address (list bayfront-ip4)))))))
+;; 
+;;              ;; Monitoring
+;;              (service zabbix-agent-service-type)
+;;              (service zabbix-server-service-type
+;;                       (zabbix-server-configuration
+;;                        (include-files '("/root/zabbix-pass"))))
+;;              (service zabbix-front-end-service-type
+;;                       (zabbix-front-end-configuration
+;;                        (nginx (list
+;;                                (nginx-server-configuration
+;;                                 (root #~(string-append #$zabbix-server:front-end "/share/zabbix/php"))
+;;                                 (listen '("127.0.0.1:7878"))
+;;                                 (index '("index.php"))
+;;                                 (locations
+;;                                  (let ((php-location (nginx-php-location)))
+;;                                    (list (nginx-location-configuration
+;;                                           (inherit php-location)
+;;                                           (body (append (nginx-location-configuration-body php-location)
+;;                                                         (list "
+;; fastcgi_param PHP_VALUE \"post_max_size = 16M
+;;                           max_execution_time = 300\";
+;; "))))))))))
+;;                        (db-secret-file "/root/zabbix-front-end-secrets")))
+;; 
+;;              ;; For the Zabbix database.  It was created by manually
+;;              ;; following the instructions here:
+;;              ;; https://www.zabbix.com/documentation/3.0/manual/appendix/install/db_scripts
+;;              (postgresql-service)
 
              (service ntp-service-type)
 
-             ;; Make SSH and HTTP/HTTPS available over Tor.
-             (tor-hidden-service "http"
-                                 '((22 "127.0.0.1:22")
-                                   (80 "127.0.0.1:80")
-                                   (443 "127.0.0.1:443")))
-             (service tor-service-type)
-
+             ;; ;; Make SSH and HTTP/HTTPS available over Tor.
+             ;; (tor-hidden-service "http"
+             ;;                     '((22 "127.0.0.1:22")
+             ;;                       (80 "127.0.0.1:80")
+             ;;                       (443 "127.0.0.1:443")))
+             ;; (service tor-service-type)
+            ;; 
              (service nginx-service-type %nginx-configuration)
 
              ;; Runnning guix.gnu.org.
              (service static-web-site-service-type
                       (static-web-site-configuration
                        (git-url
-                        "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
+                        "git://pelzflorian.de/guix-artwork.git")
                        (directory "/srv/guix.gnu.org")
                        (build-file "website/.guix.scm")))
 
-             ;; 'wip-i18n' branch of guix.gnu.org.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url
-                        "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
-                       (git-ref '(branch . "wip-i18n"))
-                       (directory "/srv/guix.gnu.org-i18n")
-                       (build-file "website/.guix.scm")
-                       (cache-directory "guix.gnu.org-i18n") ;avoid collision
-                       (environment-variables
-                        '(("GUIX_WEB_SITE_ROOT_PATH" . "/.i18n")))))
-
-             ;; Manual for the latest stable release.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url "https://git.savannah.gnu.org/git/guix.git")
-                       (git-ref '(branch . "version-1.0.1"))
-                       (directory "/srv/guix-manual")
-                       (build-file "doc/build.scm")
-                       (environment-variables
-                         '(("GUIX_MANUAL_VERSION" . "1.0.1")
-                           ("GUIX_WEB_SITE_URL" . "/")))))
-
-             ;; Manual for 'master'.
-             (service static-web-site-service-type
-                      (static-web-site-configuration
-                       (git-url "https://git.savannah.gnu.org/git/guix.git")
-                       (directory "/srv/guix-manual-devel")
-
-                       ;; XXX: Use a different cache directory to work around
-                       ;; the fact that (guix git) would use a same-named
-                       ;; checkout directory for 'master' and for the branch
-                       ;; above.  Since both mcron jobs run at the same time,
-                       ;; they would end up using one branch or the other, in
-                       ;; a non-deterministic way.
-                       (cache-directory "guix-master-manual")
-
-                       (build-file "doc/build.scm")
-                       (environment-variables
-                        '(("GUIX_WEB_SITE_URL" . "/")))))
-
-             ;; GWL web site.
-             (service gwl-web-service-type)
+             ;; ;; 'wip-i18n' branch of guix.gnu.org.
+             ;; (service static-web-site-service-type
+             ;;          (static-web-site-configuration
+             ;;           (git-url
+             ;;            "https://git.savannah.gnu.org/git/guix/guix-artwork.git")
+             ;;           (git-ref '(branch . "wip-i18n"))
+             ;;           (directory "/srv/guix.gnu.org-i18n")
+             ;;           (build-file "website/.guix.scm")
+             ;;           (cache-directory "guix.gnu.org-i18n") ;avoid collision
+             ;;           (environment-variables
+             ;;            '(("GUIX_WEB_SITE_ROOT_PATH" . "/.i18n")))))
+            ;; 
+             ;; ;; Manual for the latest stable release.
+             ;; (service static-web-site-service-type
+             ;;          (static-web-site-configuration
+             ;;           (git-url "https://git.savannah.gnu.org/git/guix.git")
+             ;;           (git-ref '(branch . "version-1.0.1"))
+             ;;           (directory "/srv/guix-manual")
+             ;;           (build-file "doc/build.scm")
+             ;;           (environment-variables
+             ;;             '(("GUIX_MANUAL_VERSION" . "1.0.1")
+             ;;               ("GUIX_WEB_SITE_URL" . "/")))))
+            ;; 
+             ;; ;; Manual for 'master'.
+             ;; (service static-web-site-service-type
+             ;;          (static-web-site-configuration
+             ;;           (git-url "https://git.savannah.gnu.org/git/guix.git")
+             ;;           (directory "/srv/guix-manual-devel")
+            ;; 
+             ;;           ;; XXX: Use a different cache directory to work around
+             ;;           ;; the fact that (guix git) would use a same-named
+             ;;           ;; checkout directory for 'master' and for the branch
+             ;;           ;; above.  Since both mcron jobs run at the same time,
+             ;;           ;; they would end up using one branch or the other, in
+             ;;           ;; a non-deterministic way.
+             ;;           (cache-directory "guix-master-manual")
+            ;; 
+             ;;           (build-file "doc/build.scm")
+             ;;           (environment-variables
+             ;;            '(("GUIX_WEB_SITE_URL" . "/")))))
+            ;; 
+             ;; ;; GWL web site.
+             ;; (service gwl-web-service-type)
 
              (frontend-services %sysadmins
                                 #:systems '("x86_64-linux" "i686-linux"
diff --git a/hydra/modules/sysadmin/services.scm b/hydra/modules/sysadmin/services.scm
index 943df8a..a7c63bc 100644
--- a/hydra/modules/sysadmin/services.scm
+++ b/hydra/modules/sysadmin/services.scm
@@ -90,19 +90,19 @@
 (define* (guix-daemon-config #:key (max-jobs 5) (cores 4))
   (guix-configuration
    ;; Disable substitutes altogether.
-   (use-substitutes? #f)
-   (substitute-urls '())
-   (authorized-keys '())
-
-   ;; We don't want to let builds get stuck for too long, but we still want
-   ;; to allow building, say, Guile 2.2 on armhf-linux, which takes < 3h on
-   ;; an OverDrive 1000.
-   (max-silent-time 3600)
-   (timeout (* 6 3600))
-
-   (log-compression 'gzip)               ;be friendly to 'guix publish' users
-
-   (build-accounts (* 2 max-jobs))
+   ;; (use-substitutes? #f)
+   ;; (substitute-urls '())
+   ;; (authorized-keys '())
+  ;; 
+   ;; ;; We don't want to let builds get stuck for too long, but we still want
+   ;; ;; to allow building, say, Guile 2.2 on armhf-linux, which takes < 3h on
+   ;; ;; an OverDrive 1000.
+   ;; (max-silent-time 3600)
+   ;; (timeout (* 6 3600))
+  ;; 
+   ;; (log-compression 'gzip)               ;be friendly to 'guix publish' users
+  ;; 
+   ;; (build-accounts (* 2 max-jobs))
    (extra-options (list "--max-jobs" (number->string max-jobs)
                         "--cores" (number->string cores)
                         "--cache-failures"
@@ -261,27 +261,27 @@
                   (mcron-configuration
                    (jobs (cons %certbot-job %gc-jobs))))
 
-         firewall-service
-
-         ;; The Web service.
-         (service guix-publish-service-type
-                  (guix-publish-configuration
-                   (port 3000)
-                   (cache "/var/cache/guix/publish")
-                   (ttl nar-ttl)
-                   (compression '(("gzip" 9) ("lzip" 9)))
-                   (workers publish-workers)))
+         ;; firewall-service
+        ;; 
+         ;; ;; The Web service.
+         ;; (service guix-publish-service-type
+         ;;          (guix-publish-configuration
+         ;;           (port 3000)
+         ;;           (cache "/var/cache/guix/publish")
+         ;;           (ttl nar-ttl)
+         ;;           (compression '(("gzip" 9) ("lzip" 9)))
+         ;;           (workers publish-workers)))
 
          %nginx-mime-types
          %nginx-cache-activation
 
-         (service cuirass-service-type
-                  (cuirass-configuration
-                   (interval (* 5 60))
-                   (ttl (quotient nar-ttl 2))
-                   (specifications (cuirass-specs systems))))
-
-         (service openssh-service-type)
+         ;; (service cuirass-service-type
+         ;;          (cuirass-configuration
+         ;;           (interval (* 5 60))
+         ;;           (ttl (quotient nar-ttl 2))
+         ;;           (specifications (cuirass-specs systems))))
+        ;; 
+         ;; (service openssh-service-type)
          (service sysadmin-service-type sysadmins)
 
          (append (if nginx-config-file
@@ -290,9 +290,9 @@
                                      (file nginx-config-file))))
                      '())
                  (modify-services %base-services
-                   (guix-service-type
-                    config => (guix-daemon-config #:max-jobs max-jobs
-                                                  #:cores cores))
+                   ;; (guix-service-type
+                   ;;  config => (guix-daemon-config #:max-jobs max-jobs
+                   ;;                                #:cores cores))
                    (login-service-type
                     config => (login-configuration
                                (inherit config)
diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index c716103..fa2d13b 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -491,27 +491,27 @@ PUBLISH-URL."
 (define %berlin-servers
   (list
    ;; Plain HTTP
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("berlin.guixsd.org"
-                   "ci.guix.info"
-                   "ci.guix.gnu.org"))
-    (locations (berlin-locations %publish-url))
-    (raw-content
-     (list
-      "access_log  /var/log/nginx/http.access.log;"
-      "proxy_set_header X-Forwarded-Host $host;"
-      "proxy_set_header X-Forwarded-Port $server_port;"
-      "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("bootstrappable.org"
-                   "www.bootstrappable.org"))
-    (root "/home/rekado/bootstrappable.org")
-    (raw-content
-     (list
-      "access_log /var/log/nginx/bootstrappable.access.log;")))
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("berlin.guixsd.org"
+   ;;                 "ci.guix.info"
+   ;;                 "ci.guix.gnu.org"))
+   ;;  (locations (berlin-locations %publish-url))
+   ;;  (raw-content
+   ;;   (list
+   ;;    "access_log  /var/log/nginx/http.access.log;"
+   ;;    "proxy_set_header X-Forwarded-Host $host;"
+   ;;    "proxy_set_header X-Forwarded-Port $server_port;"
+   ;;    "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;")))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("bootstrappable.org"
+   ;;                 "www.bootstrappable.org"))
+   ;;  (root "/home/rekado/bootstrappable.org")
+   ;;  (raw-content
+   ;;   (list
+   ;;    "access_log /var/log/nginx/bootstrappable.access.log;")))
 
    (nginx-server-configuration
     (listen '("80"))
@@ -522,192 +522,194 @@ PUBLISH-URL."
      (list
       "access_log /var/log/nginx/guix-info.access.log;")))
 
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("guix.info"
-                   "www.guix.info"))
-    (locations guix.info-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("issues.guix.info"
-                   "issues.guix.gnu.org"))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration ;certbot
-            (uri "/.well-known")
-            (body (list "root /var/www;")))
-           (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (list
-      "access_log /var/log/nginx/issues-guix-info.access.log;")))
-
-   (nginx-server-configuration
-    (listen '("80"))
-    (server-name '("workflows.guix.info"
-                   "workflow.guix.info"
-                   "guixwl.org"
-                   "www.guixwl.org"))
-    (root "/home/rekado/gwl/")
-    (locations
-     (list (nginx-location-configuration ;certbot
-            (uri "/.well-known")
-            (body (list "root /var/www;")))
-
-           ;; Pass requests to 'guix workflow --web-interface'.
-           (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:5000;")))))
-    (raw-content
-     (list
-      "access_log /var/log/nginx/workflows-guix-info.access.log;")))
-        
-   ;; HTTPS servers
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("berlin.guixsd.org"
-                   "ci.guix.info"
-                   "ci.guix.gnu.org"))
-    (ssl-certificate (le "berlin.guixsd.org"))
-    (ssl-certificate-key (le "berlin.guixsd.org" 'key))
-    (locations (berlin-locations %publish-url))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log  /var/log/nginx/https.access.log;"
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("qualif.ci.guix.gnu.org"))
-    (locations (berlin-locations "http://localhost:3003"))
-    (raw-content
-     (append %tls-settings
-             '("access_log  /var/log/nginx/qualif.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("bootstrappable.org"
-                   "www.bootstrappable.org"))
-    (ssl-certificate (le "bootstrappable.org"))
-    (ssl-certificate-key (le "bootstrappable.org" 'key))
-    (root "/home/rekado/bootstrappable.org")
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/bootstrappable.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("guix.info"
-                   "www.guix.info"))
-    (ssl-certificate (le "guix.info"))
-    (ssl-certificate-key (le "guix.info" 'key))
-    (locations guix.info-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("guix.gnu.org"))
-    (ssl-certificate (le "guix.gnu.org"))
-    (ssl-certificate-key (le "guix.gnu.org" 'key))
-    (root "/srv/guix.gnu.org")
-    (locations guix.gnu.org-locations)
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("issues.guix.info"))
-    (ssl-certificate (le "issues.guix.info"))
-    (ssl-certificate-key (le "issues.guix.info" 'key))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/issues-guix-info.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("issues.guix.gnu.org"))
-    (ssl-certificate (le "issues.guix.gnu.org"))
-    (ssl-certificate-key (le "issues.guix.gnu.org" 'key))
-    (root "/home/rekado/mumi/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:1234;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/issues-guix-gnu-org.https.access.log;"))))
-
-   (nginx-server-configuration
-    (listen '("443 ssl"))
-    (server-name '("workflows.guix.info"
-                   "workflow.guix.info"
-                   "guixwl.org"
-                   "www.guixwl.org"))
-    (ssl-certificate (le "www.guixwl.org"))
-    (ssl-certificate-key (le "www.guixwl.org" 'key))
-    (root "/home/rekado/gwl/")
-    (locations
-     (list (nginx-location-configuration
-            (uri "/")
-            (body '("proxy_pass http://localhost:5000;")))))
-    (raw-content
-     (append
-      %tls-settings
-      (list
-       "proxy_set_header X-Forwarded-Host $host;"
-       "proxy_set_header X-Forwarded-Port $server_port;"
-       "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
-       "proxy_connect_timeout       600;"
-       "proxy_send_timeout          600;"
-       "proxy_read_timeout          600;"
-       "send_timeout                600;"
-       "access_log /var/log/nginx/workflows-guix-info.https.access.log;"))))))
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("guix.info"
+   ;;                 "www.guix.info"))
+   ;;  (locations guix.info-locations)
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "access_log /var/log/nginx/guix-info.https.access.log;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("issues.guix.info"
+   ;;                 "issues.guix.gnu.org"))
+   ;;  (root "/home/rekado/mumi/")
+   ;;  (locations
+   ;;   (list (nginx-location-configuration ;certbot
+   ;;          (uri "/.well-known")
+   ;;          (body (list "root /var/www;")))
+   ;;         (nginx-location-configuration
+   ;;          (uri "/")
+   ;;          (body '("proxy_pass http://localhost:1234;")))))
+   ;;  (raw-content
+   ;;   (list
+   ;;    "access_log /var/log/nginx/issues-guix-info.access.log;")))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("workflows.guix.info"
+   ;;                 "workflow.guix.info"
+   ;;                 "guixwl.org"
+   ;;                 "www.guixwl.org"))
+   ;;  (root "/home/rekado/gwl/")
+   ;;  (locations
+   ;;   (list (nginx-location-configuration ;certbot
+   ;;          (uri "/.well-known")
+   ;;          (body (list "root /var/www;")))
+  ;; 
+   ;;         ;; Pass requests to 'guix workflow --web-interface'.
+   ;;         (nginx-location-configuration
+   ;;          (uri "/")
+   ;;          (body '("proxy_pass http://localhost:5000;")))))
+   ;;  (raw-content
+   ;;   (list
+   ;;    "access_log /var/log/nginx/workflows-guix-info.access.log;")))
+   ;;      
+   ;; ;; HTTPS servers
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("berlin.guixsd.org"
+   ;;                 "ci.guix.info"
+   ;;                 "ci.guix.gnu.org"))
+   ;;  ;;(ssl-certificate (le "berlin.guixsd.org"))
+   ;;  ;;(ssl-certificate-key (le "berlin.guixsd.org" 'key))
+   ;;  (locations (berlin-locations %publish-url))
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "access_log  /var/log/nginx/https.access.log;"
+   ;;     "proxy_set_header X-Forwarded-Host $host;"
+   ;;     "proxy_set_header X-Forwarded-Port $server_port;"
+   ;;     "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("qualif.ci.guix.gnu.org"))
+   ;;  (locations (berlin-locations "http://localhost:3003"))
+   ;;  (raw-content
+   ;;   (append %tls-settings
+   ;;           '("access_log  /var/log/nginx/qualif.access.log;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("bootstrappable.org"
+   ;;                 "www.bootstrappable.org"))
+   ;;  ;;(ssl-certificate (le "bootstrappable.org"))
+   ;;  ;;(ssl-certificate-key (le "bootstrappable.org" 'key))
+   ;;  (root "/home/rekado/bootstrappable.org")
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "access_log /var/log/nginx/bootstrappable.https.access.log;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("guix.info"
+   ;;                 "www.guix.info"))
+   ;;  ;;(ssl-certificate (le "guix.info"))
+   ;;  ;;(ssl-certificate-key (le "guix.info" 'key))
+   ;;  (locations guix.info-locations)
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "access_log /var/log/nginx/guix-info.https.access.log;"))))
+
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("guix.gnu.org"))
+   ;;  ;;(ssl-certificate (le "guix.gnu.org"))
+   ;;  ;;(ssl-certificate-key (le "guix.gnu.org" 'key))
+   ;;  (root "/srv/guix.gnu.org")
+   ;;  (locations guix.gnu.org-locations)
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "access_log /var/log/nginx/guix-gnu-org.https.access.log;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("issues.guix.info"))
+   ;;  ;;(ssl-certificate (le "issues.guix.info"))
+   ;;  ;;(ssl-certificate-key (le "issues.guix.info" 'key))
+   ;;  (root "/home/rekado/mumi/")
+   ;;  (locations
+   ;;   (list (nginx-location-configuration
+   ;;          (uri "/")
+   ;;          (body '("proxy_pass http://localhost:1234;")))))
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "proxy_set_header X-Forwarded-Host $host;"
+   ;;     "proxy_set_header X-Forwarded-Port $server_port;"
+   ;;     "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
+   ;;     "proxy_connect_timeout       600;"
+   ;;     "proxy_send_timeout          600;"
+   ;;     "proxy_read_timeout          600;"
+   ;;     "send_timeout                600;"
+   ;;     "access_log /var/log/nginx/issues-guix-info.https.access.log;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("issues.guix.gnu.org"))
+   ;;  ;;(ssl-certificate (le "issues.guix.gnu.org"))
+   ;;  ;;(ssl-certificate-key (le "issues.guix.gnu.org" 'key))
+   ;;  (root "/home/rekado/mumi/")
+   ;;  (locations
+   ;;   (list (nginx-location-configuration
+   ;;          (uri "/")
+   ;;          (body '("proxy_pass http://localhost:1234;")))))
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "proxy_set_header X-Forwarded-Host $host;"
+   ;;     "proxy_set_header X-Forwarded-Port $server_port;"
+   ;;     "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
+   ;;     "proxy_connect_timeout       600;"
+   ;;     "proxy_send_timeout          600;"
+   ;;     "proxy_read_timeout          600;"
+   ;;     "send_timeout                600;"
+   ;;     "access_log /var/log/nginx/issues-guix-gnu-org.https.access.log;"))))
+  ;; 
+   ;; (nginx-server-configuration
+   ;;  (listen '("80"))
+   ;;  (server-name '("workflows.guix.info"
+   ;;                 "workflow.guix.info"
+   ;;                 "guixwl.org"
+   ;;                 "www.guixwl.org"))
+   ;;  ;;(ssl-certificate (le "www.guixwl.org"))
+   ;;  ;;(ssl-certificate-key (le "www.guixwl.org" 'key))
+   ;;  (root "/home/rekado/gwl/")
+   ;;  (locations
+   ;;   (list (nginx-location-configuration
+   ;;          (uri "/")
+   ;;          (body '("proxy_pass http://localhost:5000;")))))
+   ;;  (raw-content
+   ;;   (append
+   ;;    %tls-settings
+   ;;    (list
+   ;;     "proxy_set_header X-Forwarded-Host $host;"
+   ;;     "proxy_set_header X-Forwarded-Port $server_port;"
+   ;;     "proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;"
+   ;;     "proxy_connect_timeout       600;"
+   ;;     "proxy_send_timeout          600;"
+   ;;     "proxy_read_timeout          600;"
+   ;;     "send_timeout                600;"
+   ;;     "access_log /var/log/nginx/workflows-guix-info.https.access.log;"))))))
+   ))
 
 (define %extra-content
   (list
+      "server_names_hash_bucket_size  64;" ;hack does not belong here
    "default_type  application/octet-stream;"
    "sendfile        on;"
 

--t5yszdt4gakmziuy--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 7 Oct 2019 08:15:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Oct 07 04:15:17 2019
Received: from localhost ([127.0.0.1]:47344 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iHOAe-0007pF-F1
	for submit <at> debbugs.gnu.org; Mon, 07 Oct 2019 04:15:17 -0400
Received: from pelzflorian.de ([5.45.111.108]:45088 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iHOAb-0007p4-BH
 for 26302 <at> debbugs.gnu.org; Mon, 07 Oct 2019 04:15:07 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 962993602A4;
 Mon,  7 Oct 2019 10:15:03 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1570436103;
 bh=n3emTI3HGmhddHMPUNrRkRQTTrWUWf0bE6eDQt0rYpU=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=U3+/bmy1ZNo7WNfNBt5kHNrlRirzhWB9hpWIj2xZgYDS+poLxuin7q8sCUavZ22Oe
 WPpYcm6o7ULRgHaNMptmMe4+KWo4TaCcl9zrGUASJuvkXkj24FZtuOlQMKS/A5Bo4K
 MX5zC6uon4uxk42v26SCIxPnkxvWC0fZxvbWcSJo=
Date: Mon, 7 Oct 2019 10:15:03 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>,
 Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20191007081502.wog4q4wjptvhmejf@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="sdu57zujk3qaqzhp"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--sdu57zujk3qaqzhp
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Sun, Sep 15, 2019 at 10:18:20PM +0200, pelzflorian (Florian Pelz) wrote:
> What’s missing is code for adding the nginx plugin
> 
> https://www.nginx.com/resources/wiki/modules/accept_language/
> 
> to Guix so it can be used on berlin.scm.  It seems to offer all that
> is required for redirecting existing URLs.
> 

Please review the attached patch to Guix that adds
nginx-mod-accept-language.  (This is not the upstream name; various
nginx modules use no consistent naming scheme for nginx modules.)  I
have put it in a separate module from (gnu packages web) due to an
import cycle with tar/(gnu packages base).  The second patch allows
using dynamic modules with the nginx service.

Using these patches, the attached slightly wrong patch to
guix/maintenance.git is meant to make the web server default to
serving the language configured in the browser when no language code
is specified in the URL, so old URLs remain functional.  (Redirects of
non-html URLs are wrong and nginx does not run with this config,
perhaps I should use rewrite instead of try_files.  I can try later
today.)

Nonetheless, href links on the website point to the localized pages on
purpose so if someone changes the language the change remains in
effect when following a link.

Some people on the internet (I forgot who) preferred having a cookie
store the preferred language.  That would make it possible to continue
using the old URLs in href links on the website.  However, I am not
sure how it would affect SEO.

On Thu, Sep 19, 2019 at 01:50:10PM +0200, Ludovic Courtès wrote:
> We can then maybe set up a ‘static-web-site’ service on berlin, with
> appropriate nginx rules, to build and publish the manual at a separate
> URL so we can all test it.  See hydra/berlin.scm in maintenance.git.
> 

I see you @Ludo added such a service, but I cannot reach it.  Perhaps
I am using the wrong URL.


Regards,
Florian

--sdu57zujk3qaqzhp
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="0001-wip-gnu-Add-ngx_http_accept_language_module.patch"
Content-Transfer-Encoding: 8bit

From 9ec69c888b978cb870a5873af8e327541fe4ef7a Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sun, 6 Oct 2019 20:45:34 +0200
Subject: [PATCH 1/2] [wip] gnu: Add ngx_http_accept_language_module.

* gnu/packages/web-xyz.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add package.
---
 gnu/local.mk             |   1 +
 gnu/packages/web-xyz.scm | 175 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 176 insertions(+)
 create mode 100644 gnu/packages/web-xyz.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index 54ae09f619..96a6c0087a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -497,6 +497,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/wdiff.scm			\
   %D%/packages/web.scm				\
   %D%/packages/web-browsers.scm			\
+  %D%/packages/web-xyz.scm			\
   %D%/packages/webkit.scm			\
   %D%/packages/wget.scm				\
   %D%/packages/wicd.scm				\
diff --git a/gnu/packages/web-xyz.scm b/gnu/packages/web-xyz.scm
new file mode 100644
index 0000000000..61e7f847a7
--- /dev/null
+++ b/gnu/packages/web-xyz.scm
@@ -0,0 +1,175 @@
+;;; GNU Guix --- Functional package management for GNU
+;;;; TODO should I really add copyright lines for people I copied from??
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@HIDDEN>
+;;; Copyright © 2016 Tobias Geerinckx-Rice <me@HIDDEN>
+;;; Copyright © 2017, 2018 Marius Bakke <mbakke@HIDDEN>
+
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
+;;;
+;;; 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/>.
+
+(define-module (gnu packages web-xyz)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web)
+  #:use-module (ice-9 match)
+  #:use-module ((srfi srfi-1) #:select (delete-duplicates)))
+
+(define-public nginx-mod-accept-language
+  (let ((commit "2f69842f83dac77f7d98b41a2b31b13b87aeaba7")
+        (revision "1"))
+    (package
+      (name "nginx-mod-accept-language")
+      (version (git-version "0.0.0" ;upstream has no version number
+                            revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/giom/nginx_accept_language_module.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1hjysrl15kh5233w7apq298cc2bp4q1z5mvaqcka9pdl90m0vhbw"))
+         (modules '((guix build utils)
+                    (ice-9 popen)))
+         (snippet
+          #~(begin
+              ;; the nginx source code is part of the module’s source
+              (format #t "decompressing nginx source code~%")
+              (call-with-output-file "nginx.tar"
+                (lambda (out)
+                  (let ((pipe (open-pipe* OPEN_READ
+                                          #+(file-append gzip "/bin/gzip") "-cd"
+                                          #$(package-source nginx))))
+                    (dump-port pipe out)
+                    (unless (= (status:exit-val (close-pipe pipe)) 0)
+                      (error "gzip decompress failed")))))
+              (invoke #+(file-append tar "/bin/tar") "xvf" "nginx.tar"
+                      "--strip-components=1")
+              (delete-file "nginx.tar")
+              #t))))
+      (build-system gnu-build-system)
+      (inputs `(("openssl" ,openssl)
+                ("pcre" ,pcre)
+                ("zlib" ,zlib)))
+      (arguments
+       `(#:tests? #f                      ; no test target
+         #:make-flags (list "modules")
+         #:modules ((guix build utils)
+                    (guix build gnu-build-system)
+                    (ice-9 regex)
+                    (ice-9 textual-ports))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'convert-to-dynamic-module
+             (lambda _
+               (begin
+                 (with-atomic-file-replacement "config"
+                   (lambda (in out)
+                     ;; cf. https://www.nginx.com/resources/wiki/extending/new_config/
+                     (format out "ngx_module_type=HTTP~%")
+                     (format out "ngx_module_name=\
+ngx_http_accept_language_module~%")
+                     (let* ((str (get-string-all in))
+                            (rx (make-regexp
+                                 "NGX_ADDON_SRCS=\"\\$NGX_ADDON_SRCS (.*)\""))
+                            (m (regexp-exec rx str))
+                            (srcs (match:substring m 1)))
+                       (format out (string-append "ngx_module_srcs=\""
+                                                  srcs "\"~%")))
+                     (format out ". auto/module~%")
+                     (format out "ngx_addon_name=$ngx_module_name~%"))))))
+           (add-before 'configure 'patch-/bin/sh
+             (lambda _
+               (substitute* "auto/feature"
+                 (("/bin/sh") (which "sh")))
+               #t))
+           (replace 'configure
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((flags
+                      (list ;; A copy of nginx’ flags follows, otherwise we
+                            ;; get a binary compatibility error.  FIXME: Code
+                            ;; duplication is bad.
+                       (string-append "--prefix=" (assoc-ref outputs "out"))
+                       "--with-http_ssl_module"
+                       "--with-http_v2_module"
+                       "--with-pcre-jit"
+                       "--with-debug"
+                       ;; Even when not cross-building, we pass the
+                       ;; --crossbuild option to avoid customizing for the
+                       ;; kernel version on the build machine.
+                       ,(let ((system "Linux")    ; uname -s
+                              (release "3.2.0")   ; uname -r
+                              ;; uname -m
+                              (machine (match (or (%current-target-system)
+                                                  (%current-system))
+                                         ("x86_64-linux"   "x86_64")
+                                         ("i686-linux"     "i686")
+                                         ("mips64el-linux" "mips64")
+                                         ;; Prevent errors when querying
+                                         ;; this package on unsupported
+                                         ;; platforms, e.g. when running
+                                         ;; "guix package --search="
+                                         (_                "UNSUPPORTED"))))
+                          (string-append "--crossbuild="
+                                         system ":" release ":" machine))
+                       ;; The following are the args decribed on
+                       ;; <https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus>.
+                       ;; Enabling --with-compat here and in the nginx package
+                       ;; would ensure binary compatibility even when using
+                       ;; different configure options from the main nginx
+                       ;; package.  This is not needed for Guix.
+                       ;; "--with-compat"
+                       "--add-dynamic-module=.")))
+                 (setenv "CC" "gcc")
+                 (format #t "environment variable `CC' set to `gcc'~%")
+                 (format #t "configure flags: ~s~%" flags)
+                 (apply invoke "./configure" flags)
+                 #t)))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (modules-dir (string-append out "/etc/nginx/modules"))
+                      (doc-dir (string-append
+                                out "/share/doc/nginx-mod-accept-language")))
+                 (mkdir-p modules-dir)
+                 (copy-file "objs/ngx_http_accept_language_module.so"
+                            (string-append
+                             modules-dir "/ngx_http_accept_language_module.so"))
+                 (mkdir-p doc-dir)
+                 (copy-file "README.textile"
+                            (string-append doc-dir "/README.textile"))
+                 #t))))))
+      (home-page
+       "https://www.nginx.com/resources/wiki/modules/accept_language/")
+      (synopsis "Nginx module for parsing the Accept-Language HTTP header")
+      (description
+       "Nginx module that parses the Accept-Language field in HTTP headers and
+chooses the most suitable locale for the user from the list of locales
+supported at your website.")
+      (license (delete-duplicates
+                (cons license:bsd-2 ;license of nginx-mod-accept-language
+                      (package-license nginx))))))) ;the module’s code is linked
+                                        ;statically with nginx, therefore
+                                        ;nginx’ licenses apply to its binary
-- 
2.23.0


--sdu57zujk3qaqzhp
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment; filename="0002-services-Make-it-possible-to-include-dynamic-modules.patch"
Content-Transfer-Encoding: 8bit

From 7747a416feae7139c2b2661ffeb37f2eb03eb2f9 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sun, 6 Oct 2019 15:31:23 +0200
Subject: [PATCH 2/2] services: Make it possible to include dynamic modules in
 nginx.

* gnu/services/web.scm (<nginx-configuration>): Add load-modules field.
(nginx-configuration-load-modules): New field accessor.
(emit-load-module): New procedure.
(default-nginx-config): Add support for the load-modules field.
* doc/guix.texi (NGINX): Document it.
---
 doc/guix.texi        | 4 ++++
 gnu/services/web.scm | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 42d2d77ae6..5c39e26155 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -19718,6 +19718,10 @@ use the size of the processors cache line.
 @item @code{server-names-hash-bucket-max-size} (default: @code{#f})
 Maximum bucket size for the server names hash tables.
 
+@item @code{load-modules} (default: @code{'()})
+List of nginx dynamic modules to load.  Should be a list of strings or
+string valued G-expressions.
+
 @item @code{extra-content} (default: @code{""})
 Extra content for the @code{http} block.  Should be string or a string
 valued G-expression.
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 899be1c168..a68f0235b7 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -9,6 +9,7 @@
 ;;; Copyright  2018 Pierre-Antoine Rouby <pierre-antoine.rouby@HIDDEN>
 ;;; Copyright  2017, 2018, 2019 Christopher Baines <mail@HIDDEN>
 ;;; Copyright  2018 Marius Bakke <mbakke@HIDDEN>
+;;; Copyright  2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -95,6 +96,7 @@
             nginx-configuration-upstream-blocks
             nginx-configuration-server-names-hash-bucket-size
             nginx-configuration-server-names-hash-bucket-max-size
+            nginx-configuration-load-modules
             nginx-configuration-extra-content
             nginx-configuration-file
 
@@ -522,6 +524,7 @@
                                  (default #f))
   (server-names-hash-bucket-max-size nginx-configuration-server-names-hash-bucket-max-size
                                      (default #f))
+  (load-modules nginx-configuration-load-modules (default '()))
   (extra-content nginx-configuration-extra-content
                  (default ""))
   (file          nginx-configuration-file         ;#f | string | file-like
@@ -542,6 +545,9 @@ of index files."
         ((? string? str) (list str " ")))
       names))
 
+(define (emit-load-module module)
+  (list "load_module " module ";\n"))
+
 (define emit-nginx-location-config
   (match-lambda
     (($ <nginx-location-configuration> uri body)
@@ -615,12 +621,14 @@ of index files."
                  server-blocks upstream-blocks
                  server-names-hash-bucket-size
                  server-names-hash-bucket-max-size
+                 load-modules
                  extra-content)
    (apply mixed-text-file "nginx.conf"
           (flatten
            "user nginx nginx;\n"
            "pid " run-directory "/pid;\n"
            "error_log " log-directory "/error.log info;\n"
+           (map emit-load-module load-modules)
            "http {\n"
            "    client_body_temp_path " run-directory "/client_body_temp;\n"
            "    proxy_temp_path " run-directory "/proxy_temp;\n"
-- 
2.23.0


--sdu57zujk3qaqzhp
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-berlin-Redirect-to-localized-website-depending-on-Ac.patch"

From ea5edd15586722b3557912e81171e69f7be339fa Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Mon, 7 Oct 2019 07:58:30 +0200
Subject: [PATCH] berlin: Redirect to localized website depending on
 Accept-Language header.

* hydra/nginx/berlin.scm (guix.gnu.org-locations): Redirect html URLs.
(%nginx-configuration): Load required nginx dynamic module.
---
 hydra/nginx/berlin.scm | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/hydra/nginx/berlin.scm b/hydra/nginx/berlin.scm
index df90873..9085183 100644
--- a/hydra/nginx/berlin.scm
+++ b/hydra/nginx/berlin.scm
@@ -1,6 +1,7 @@
 ;; Nginx configuration for ci.guix.info
 
-(use-modules (gnu services web))
+(use-modules (gnu packages web-xyz)
+             (gnu services web))
 
 ;; TODO: these settings cannot currently expressed with Guix:
 
@@ -462,6 +463,16 @@ PUBLISH-URL."
    (nginx-location-configuration
     (uri "~ \\.pdf$")                             ;*.pdf at the top level
     (body (list "root /srv/guix-pdfs;")))
+   (nginx-location-configuration
+    (uri "~ (.*)/$")
+    (body (list
+           "try_files $1/index.html;")))
+   (nginx-location-configuration
+    (uri "~ (.html|.htm)$")
+    (body (list
+           ;; put en first so it is the default:
+           "set_from_accept_language $lang en de;"
+           "try_files /$lang/$uri $uri =404;")))
 
    (nginx-location-configuration                  ;certbot
     (uri "/.well-known")
@@ -758,5 +769,11 @@ PUBLISH-URL."
 (define %nginx-configuration
   (nginx-configuration
    (server-blocks %berlin-servers)
+   (load-modules
+    (list
+     ;; We need this module for redirecting users to the localized
+     ;; website of their choice.
+     (file-append nginx-mod-accept-language "\
+/etc/nginx/modules/ngx_http_accept_language_module.so")))
    (extra-content
     (string-join %extra-content "\n"))))
-- 
2.23.0


--sdu57zujk3qaqzhp--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 19 Sep 2019 22:08:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 19 18:08:34 2019
Received: from localhost ([127.0.0.1]:56549 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iB4bJ-0002ET-SY
	for submit <at> debbugs.gnu.org; Thu, 19 Sep 2019 18:08:34 -0400
Received: from pelzflorian.de ([5.45.111.108]:42386 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iB4bI-0002EL-7t
 for 26302 <at> debbugs.gnu.org; Thu, 19 Sep 2019 18:08:33 -0400
Received: from florianbeaglebone.fritz.box
 (ip5b42d6e2.dynamic.kabel-deutschland.de [91.66.214.226])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 7A4653602A4;
 Fri, 20 Sep 2019 00:08:30 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1568930910;
 bh=AEnPf1k0FcSYj05xTR7KvDGRbukxNWQih6pEY661Ako=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=lWF2cQgMflGF0lnu8MNfJKRmJBh/vqxE+yyQSN2H5QleZ+BaWEvZ15ceGOc/EzQr2
 dbvOX/hzh/7Km2QcrLMCPJjbsP0XcEPJv69dnn0jXK3ogNd0G9d2NiyqSO4wHo8upp
 48Gt5bkRvfSHO4Vko2xhns5yQxOQXKcngJkkAFdc=
Date: Thu, 19 Sep 2019 22:08:28 +0000
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20190919220828.voohijutgmi6sd3w@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <8760e8l3bd.fsf@HIDDEN>
 <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 <87muf033pp.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature"; boundary="gyhfxphw2bppya2p"
Content-Disposition: inline
In-Reply-To: <87muf033pp.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Mark H Weaver <mhw@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--gyhfxphw2bppya2p
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

The branch wip-i18n is pushed now.

On Thu, Sep 19, 2019 at 01:50:10PM +0200, Ludovic Court=C3=A8s wrote:
> Hi,
>=20
> "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:
>=20
> >> > +(define (sgettext x)
> >> > +  "After choosing an identifier for marking s-expressions for
> >> > +translation, make it usable by defining a macro with it calling
> >> > +sgettext.  If for example the chosen identifier is G_,
> >> > +use (define-syntax G_ sgettext)."
> >> > +  (syntax-case x ()
> >> > +    ((id exp)
> >> > +     (let* ((msgid (sexp->msgid (syntax->datum #'exp)))
> >> > +            (new-exp (deconstruct (syntax->datum #'exp)
> >> > +                                  (gettext msgid))))
> >> > +       (datum->syntax #'id new-exp)))))
> >>=20
> >> For this and other similar macros you must use =E2=80=98define-syntax=
=E2=80=99, not
> >> =E2=80=98define=E2=80=99, so that they are defined at expansion time, =
not at run time.
> >
> > As per the above docstring, I already have a definition
> >
> >   (define-syntax G_ sgettext)
> >
> > in (apps i18n).  Possibly I should just move it here.
>=20
> Hmmm right.  It works, but it=E2=80=99s surprising and =E2=80=9Cborderlin=
e=E2=80=9D.
>=20
> If all you want is an alias,

Yes, an alias is what I wanted, like gettext.


> I=E2=80=99d recommend writing, say:
>=20
>   (define-syntax sgettext =E2=80=A6)
>   (define-syntax G_
>     (identifier-syntax sgettext))
>=20

This breaks the code, I think because the sgettext result gets
evaluated in a clean environment which lacks surrounding variables.
For example,

(let ((i 5) (G_ `("There are " ,i " apples"))))

fails to resolve i.

I have left this borderline code as it is.


> >> (It doesn=E2=80=99t make any difference when you=E2=80=99re evaluating=
 code since both
> >> phases run in the same module, but it does make a difference when these
> >> phases happen at different times, in different processes.)
> >>=20
> >> Consequently, you must arrange for =E2=80=98sexp->msgid=E2=80=99 and =
=E2=80=98deconstruct=E2=80=99 to be
> >> available at expansion time too.  This can be done by wrapping their
> >> definition in =E2=80=98eval-when=E2=80=99:
> >>=20
> >>   (eval-when (load expand eval)
> >>     (define (sexp->msgid =E2=80=A6) =E2=80=A6)
> >>     (define (deconstruct =E2=80=A6) =E2=80=A6))
> >>=20
> >> But actually it=E2=80=99s not clear to me why these are macros.  I thi=
nk they
> >> could be regular procedures and it=E2=80=99d work just fine, no?
> >>=20
> >
> > I do not understand.  sexp->msgid and deconstruct are procedures, not
> > syntax transformers.  I can add eval-when, but the current code runs
> > as expected for me.
>=20
> I tried to explain above but you can check the Guile manual on
> =E2=80=98eval-when=E2=80=99 (info "(guile) Eval When").  The example ther=
e hopefully
> clarifies what the problem is.
>

I had read that Guile manual section, but it is hard to understand
when eval-when is needed and when it is not needed, because the
manual=E2=80=99s negative example for wrong code runs just as fine for me as
the eval-when version, even when saved to a separate module.

I have not used eval-when for now.

> >> > +(define %plural-numbers
> >> > +  ;; Hard-coded list of input numbers such that for each language=
=E2=80=99s
> >> > +  ;; plural formula, for each possible output grammatical number,
> >> > +  ;; there is an n among %plural-numbers that yields this output
> >> > +  ;; (cf. section Plural forms in the gettext manual), except 1 is
> >> > +  ;; omitted from this list because it is a special case for
> >> > +  ;; sngettext.  That is, calling ngettext with each number from
> >> > +  ;; %plural-numbers and with 1 in any locale is guaranteed to retu=
rn
> >> > +  ;; each plural form at least once.  It would be more resilient
> >> > +  ;; towards new languages if instead of hard-coding we computed th=
is
> >> > +  ;; from the Plural-Forms in the MO file header entry, but that is
> >> > +  ;; not worth the incurred code complexity.
> >> > +  '(0 2 3 11 100))
> >>=20
> >> I don=E2=80=99t understand this: are these the only plural numbers in =
all
> >> languages, or=E2=80=A6?
> >>=20
> >
> > Yes, in all languages for which a plural=3D formula is documented in the
> > gettext manual.
> >
> > For example, Arabic has
> >
> >           Plural-Forms: nplurals=3D6; \
> >               plural=3Dn=3D=3D0 ? 0 : n=3D=3D1 ? 1 : n=3D=3D2 ? 2 : n%1=
00>=3D3 && n%100<=3D10 ? 3 \
> >               : n%100>=3D11 ? 4 : 5;
> >
> > with input plural numbers 0, 1, 2, 3, 11, 100 mapping to all outputs
> > 0, 1, 2, 3, 4, 5.
> >
> > Maybe I should add this example to the code comment.
>=20
> Oh I see.  Maybe just link to the relevant section of the manual ("info
> (gettext) Plural forms").
>

I made the reference more clear in the %plural-forms comment now.

> [=E2=80=A6]
> We can then maybe set up a =E2=80=98static-web-site=E2=80=99 service on b=
erlin, with
> appropriate nginx rules, to build and publish the manual at a separate
> URL so we can all test it.  See hydra/berlin.scm in maintenance.git.
>=20
> Thoughts?
>=20

I=E2=80=99ll leave this to you. :)

Regards,
Florian

--gyhfxphw2bppya2p
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEzvTLkUhWujgKIKfiMAiIyznGOBcFAl2D/FUACgkQMAiIyznG
OBfcEAf/dQDz/sQ3per0SfQ9/BbZtWX8zq2XPZzDCPQuIqOQki4gOZzi/181T8x9
1agtLzhgiJLW6NmLmHyOchYZO3MLKUBSgjcQOs6mD+wMwkc1o/rjaiKy+EuOUaVN
37T0yKrnM7dSMuRim+iRpREkZHf/q0/KcglbXaEQHm6O0Qpp8ikLORhQkPlSpe3o
nTJLSODcwkLOIkdhYx8sCLZf5Y46PYk7Rg26CM7ssG+0djQER0uEiye4D9Vno7nD
PfK707UAh97hdCnrQv2mgWYl3iOo7We+KIX30X3RExJY/tYgIKMMhmDb2ss2C9KF
5olG81ug7D9PbdtMG6xb51zO+pFsRw==
=Lmyr
-----END PGP SIGNATURE-----

--gyhfxphw2bppya2p--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 19 Sep 2019 11:50:21 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 19 07:50:21 2019
Received: from localhost ([127.0.0.1]:55231 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iAux2-0003iv-RI
	for submit <at> debbugs.gnu.org; Thu, 19 Sep 2019 07:50:21 -0400
Received: from eggs.gnu.org ([209.51.188.92]:53126)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iAux1-0003ii-RP
 for 26302 <at> debbugs.gnu.org; Thu, 19 Sep 2019 07:50:20 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:49422)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iAuww-0006cl-Lb; Thu, 19 Sep 2019 07:50:14 -0400
Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=33502 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iAuwv-0004xz-Q7; Thu, 19 Sep 2019 07:50:14 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: Jour du Travail de =?utf-8?Q?l'Ann=C3=A9e?= 227 de la
 =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Thu, 19 Sep 2019 13:50:10 +0200
In-Reply-To: <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 (pelzflorian@HIDDEN's message of "Thu, 19 Sep 2019 07:48:29
 +0000")
Message-ID: <87muf033pp.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Mark H Weaver <mhw@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

>> > +(define (sgettext x)
>> > +  "After choosing an identifier for marking s-expressions for
>> > +translation, make it usable by defining a macro with it calling
>> > +sgettext.  If for example the chosen identifier is G_,
>> > +use (define-syntax G_ sgettext)."
>> > +  (syntax-case x ()
>> > +    ((id exp)
>> > +     (let* ((msgid (sexp->msgid (syntax->datum #'exp)))
>> > +            (new-exp (deconstruct (syntax->datum #'exp)
>> > +                                  (gettext msgid))))
>> > +       (datum->syntax #'id new-exp)))))
>>=20
>> For this and other similar macros you must use =E2=80=98define-syntax=E2=
=80=99, not
>> =E2=80=98define=E2=80=99, so that they are defined at expansion time, no=
t at run time.
>
> As per the above docstring, I already have a definition
>
>   (define-syntax G_ sgettext)
>
> in (apps i18n).  Possibly I should just move it here.

Hmmm right.  It works, but it=E2=80=99s surprising and =E2=80=9Cborderline=
=E2=80=9D.

If all you want is an alias, I=E2=80=99d recommend writing, say:

  (define-syntax sgettext =E2=80=A6)
  (define-syntax G_
    (identifier-syntax sgettext))

>> (It doesn=E2=80=99t make any difference when you=E2=80=99re evaluating c=
ode since both
>> phases run in the same module, but it does make a difference when these
>> phases happen at different times, in different processes.)
>>=20
>> Consequently, you must arrange for =E2=80=98sexp->msgid=E2=80=99 and =E2=
=80=98deconstruct=E2=80=99 to be
>> available at expansion time too.  This can be done by wrapping their
>> definition in =E2=80=98eval-when=E2=80=99:
>>=20
>>   (eval-when (load expand eval)
>>     (define (sexp->msgid =E2=80=A6) =E2=80=A6)
>>     (define (deconstruct =E2=80=A6) =E2=80=A6))
>>=20
>> But actually it=E2=80=99s not clear to me why these are macros.  I think=
 they
>> could be regular procedures and it=E2=80=99d work just fine, no?
>>=20
>
> I do not understand.  sexp->msgid and deconstruct are procedures, not
> syntax transformers.  I can add eval-when, but the current code runs
> as expected for me.

I tried to explain above but you can check the Guile manual on
=E2=80=98eval-when=E2=80=99 (info "(guile) Eval When").  The example there =
hopefully
clarifies what the problem is.

>> > +(define %plural-numbers
>> > +  ;; Hard-coded list of input numbers such that for each language=E2=
=80=99s
>> > +  ;; plural formula, for each possible output grammatical number,
>> > +  ;; there is an n among %plural-numbers that yields this output
>> > +  ;; (cf. section Plural forms in the gettext manual), except 1 is
>> > +  ;; omitted from this list because it is a special case for
>> > +  ;; sngettext.  That is, calling ngettext with each number from
>> > +  ;; %plural-numbers and with 1 in any locale is guaranteed to return
>> > +  ;; each plural form at least once.  It would be more resilient
>> > +  ;; towards new languages if instead of hard-coding we computed this
>> > +  ;; from the Plural-Forms in the MO file header entry, but that is
>> > +  ;; not worth the incurred code complexity.
>> > +  '(0 2 3 11 100))
>>=20
>> I don=E2=80=99t understand this: are these the only plural numbers in all
>> languages, or=E2=80=A6?
>>=20
>
> Yes, in all languages for which a plural=3D formula is documented in the
> gettext manual.
>
> For example, Arabic has
>
>           Plural-Forms: nplurals=3D6; \
>               plural=3Dn=3D=3D0 ? 0 : n=3D=3D1 ? 1 : n=3D=3D2 ? 2 : n%100=
>=3D3 && n%100<=3D10 ? 3 \
>               : n%100>=3D11 ? 4 : 5;
>
> with input plural numbers 0, 1, 2, 3, 11, 100 mapping to all outputs
> 0, 1, 2, 3, 4, 5.
>
> Maybe I should add this example to the code comment.

Oh I see.  Maybe just link to the relevant section of the manual ("info
(gettext) Plural forms").

I think you can go ahead and push this series to a branch, say
=E2=80=98wip-i18n=E2=80=99 (the =E2=80=98wip-=E2=80=99 prefix meaning that =
you reserve the right to
rebase the branch as you will.)

We can then maybe set up a =E2=80=98static-web-site=E2=80=99 service on ber=
lin, with
appropriate nginx rules, to build and publish the manual at a separate
URL so we can all test it.  See hydra/berlin.scm in maintenance.git.

Thoughts?

Thank you!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 19 Sep 2019 11:42:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 19 07:42:23 2019
Received: from localhost ([127.0.0.1]:55227 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iAupK-0003Vv-Vz
	for submit <at> debbugs.gnu.org; Thu, 19 Sep 2019 07:42:23 -0400
Received: from eggs.gnu.org ([209.51.188.92]:52673)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iAupJ-0003Vg-FS
 for 26302 <at> debbugs.gnu.org; Thu, 19 Sep 2019 07:42:21 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:49394)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iAupD-0003dZ-SK; Thu, 19 Sep 2019 07:42:15 -0400
Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=33498 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iAupD-0004Ve-0b; Thu, 19 Sep 2019 07:42:15 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Adding Florian as a committer
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
 <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: Jour du Travail de =?utf-8?Q?l'Ann=C3=A9e?= 227 de la
 =?utf-8?Q?R=C3=A9volution?=
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Thu, 19 Sep 2019 13:42:11 +0200
In-Reply-To: <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
 (pelzflorian@HIDDEN's message of "Thu, 19 Sep 2019 07:48:29
 +0000")
Message-ID: <87zhj03430.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
 micalg=pgp-sha256; protocol="application/pgp-signature"
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Mark H Weaver <mhw@HIDDEN>,
 GNU Guix maintainers <guix-maintainers@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hi Florian,

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> On Wed, Sep 18, 2019 at 03:57:47PM +0200, Ludovic Court=C3=A8s wrote:
>> Hi Florian,
>>=20
>> Could you create an account on Savannah so we can give you commit
>> access?
>>=20
>
> Done.  My username is pelzflorian.

I=E2=80=99ve added you now.  I assume you=E2=80=99ll be signing commits wit=
h key
CEF4CB914856BA380A20A7E2300888CB39C63817.  (You may want to set an
expiration date on the key, and to periodically update the expiration
date and re-upload the key.)

Please make sure to read =E2=80=98HACKING=E2=80=99 regarding the convention=
s and rules
that apply.

Thank you for your work, and welcome aboard!  :-)

Ludo=E2=80=99.

--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEPORkVYqE/cadtAz7CQsRmT2a67UFAl2DaZMACgkQCQsRmT2a
67VTHRAAmSzpBpKU5Xp2WbyFL7p/NQxnvaD2xnLq41YueoHYyuHpiBFXWr4rRVwG
vu/q8Hf6f/YBMKp4zjA9cQWUe1L9rssxTXfDLcv4NYRpIcQwh4+OrsJVcKqbZFC6
KwWQkHv1SQQ5jtSQEVMUo3tUoViCqGC2VkXZHAOfrwb+k9dp7gy9pqB8vNbjwj26
RQUw/oAx7pmFdIUBk2qQ4GtLTn9DRIxA9Hg8y72GCCpbgpBErcVQc4TcXwpTNHT7
bokTL7v8LD42KD70xvYkSYIXhtY95Rhh4/u2/uSbn4Uq/emsbei30WQEogKHznnX
G7Gnxpcp4YvtHHqjsz5LP0jVJJNNCQvTDHe7KB1/hiVf/oiZKUhVnUYL59Fy519q
2sfKZLaoAJA9+/BsiWNsh8iDvOW1n0cFgMd1SIkg4iNJSwwRKi7vPbiZmDo8tJih
ktXYziOm/if4gl84Uvf1jSM/0TdULpsliuna1d59yn/CEDB1XF7IYF6UtSgj+OZZ
aw77Fmj7/kYzH2Jsel+f8hPIuATBzBMBsUQUEPOTJ45IZ0KI3LfUM0++I48H0ZJx
zU4EPsHLXLG550Zd8UIWYkTx/a7Do9Bx6G3J0jfYFGtRkWKHcEmxZmA0njmNmZV3
TDLRSjKRFDeXa9k7pY1cfJchyfQOMhxhUcenR1whF+Mg0gpJSvA=
=o1xL
-----END PGP SIGNATURE-----
--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 19 Sep 2019 07:48:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 19 03:48:36 2019
Received: from localhost ([127.0.0.1]:55089 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iArB5-0001vp-CL
	for submit <at> debbugs.gnu.org; Thu, 19 Sep 2019 03:48:35 -0400
Received: from pelzflorian.de ([5.45.111.108]:41488 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iArB2-0001ve-5V
 for 26302 <at> debbugs.gnu.org; Thu, 19 Sep 2019 03:48:33 -0400
Received: from florianbeaglebone.fritz.box
 (ip5b42d6e2.dynamic.kabel-deutschland.de [91.66.214.226])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id AD60D3602A4;
 Thu, 19 Sep 2019 09:48:30 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1568879310;
 bh=oHzC7nXj3QpFkKLaAUAqigUuJJYHMzgx3EiNN29BFSg=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=sxE/N1YEKcyOD845cclsd2PsRN0WJy5QW92PZKQRKtmnZcfhCU3Hyv/lroue0cKDE
 fXLEpqcD/7d47LHLdbl83yNl77iC5FWJ/LoHPpdyHLWve10cX3YraMBPW1Z3SrZzdw
 sRoRP6nFV+mo/ZVmsv9P59mKWntNC9QjRk2SRex8=
Date: Thu, 19 Sep 2019 07:48:29 +0000
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20190919074829.hu3c7yy3bmeudfsw@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala> <8760e8l3bd.fsf@HIDDEN>
 <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 <87ef0daeqs.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature"; boundary="wxpibp5tboksjfbf"
Content-Disposition: inline
In-Reply-To: <87ef0daeqs.fsf@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: Mark H Weaver <mhw@HIDDEN>,
 GNU Guix maintainers <guix-maintainers@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--wxpibp5tboksjfbf
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Sep 18, 2019 at 03:57:47PM +0200, Ludovic Court=C3=A8s wrote:
> Hi Florian,
>=20
> Could you create an account on Savannah so we can give you commit
> access?
>=20

Done.  My username is pelzflorian.


> > +(define (sgettext x)
> > +  "After choosing an identifier for marking s-expressions for
> > +translation, make it usable by defining a macro with it calling
> > +sgettext.  If for example the chosen identifier is G_,
> > +use (define-syntax G_ sgettext)."
> > +  (syntax-case x ()
> > +    ((id exp)
> > +     (let* ((msgid (sexp->msgid (syntax->datum #'exp)))
> > +            (new-exp (deconstruct (syntax->datum #'exp)
> > +                                  (gettext msgid))))
> > +       (datum->syntax #'id new-exp)))))
>=20
> For this and other similar macros you must use =E2=80=98define-syntax=E2=
=80=99, not
> =E2=80=98define=E2=80=99, so that they are defined at expansion time, not=
 at run time.

As per the above docstring, I already have a definition

  (define-syntax G_ sgettext)

in (apps i18n).  Possibly I should just move it here.



> (It doesn=E2=80=99t make any difference when you=E2=80=99re evaluating co=
de since both
> phases run in the same module, but it does make a difference when these
> phases happen at different times, in different processes.)
>=20
> Consequently, you must arrange for =E2=80=98sexp->msgid=E2=80=99 and =E2=
=80=98deconstruct=E2=80=99 to be
> available at expansion time too.  This can be done by wrapping their
> definition in =E2=80=98eval-when=E2=80=99:
>=20
>   (eval-when (load expand eval)
>     (define (sexp->msgid =E2=80=A6) =E2=80=A6)
>     (define (deconstruct =E2=80=A6) =E2=80=A6))
>=20
> But actually it=E2=80=99s not clear to me why these are macros.  I think =
they
> could be regular procedures and it=E2=80=99d work just fine, no?
>=20

I do not understand.  sexp->msgid and deconstruct are procedures, not
syntax transformers.  I can add eval-when, but the current code runs
as expected for me.




> > +(define %plural-numbers
> > +  ;; Hard-coded list of input numbers such that for each language=E2=
=80=99s
> > +  ;; plural formula, for each possible output grammatical number,
> > +  ;; there is an n among %plural-numbers that yields this output
> > +  ;; (cf. section Plural forms in the gettext manual), except 1 is
> > +  ;; omitted from this list because it is a special case for
> > +  ;; sngettext.  That is, calling ngettext with each number from
> > +  ;; %plural-numbers and with 1 in any locale is guaranteed to return
> > +  ;; each plural form at least once.  It would be more resilient
> > +  ;; towards new languages if instead of hard-coding we computed this
> > +  ;; from the Plural-Forms in the MO file header entry, but that is
> > +  ;; not worth the incurred code complexity.
> > +  '(0 2 3 11 100))
>=20
> I don=E2=80=99t understand this: are these the only plural numbers in all
> languages, or=E2=80=A6?
>=20

Yes, in all languages for which a plural=3D formula is documented in the
gettext manual.

For example, Arabic has

          Plural-Forms: nplurals=3D6; \
              plural=3Dn=3D=3D0 ? 0 : n=3D=3D1 ? 1 : n=3D=3D2 ? 2 : n%100>=
=3D3 && n%100<=3D10 ? 3 \
              : n%100>=3D11 ? 4 : 5;

with input plural numbers 0, 1, 2, 3, 11, 100 mapping to all outputs
0, 1, 2, 3, 4, 5.

Maybe I should add this example to the code comment.

Regards,
Florian
--wxpibp5tboksjfbf
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEzvTLkUhWujgKIKfiMAiIyznGOBcFAl2DMsQACgkQMAiIyznG
OBdwMQf/Z4wLkn/4STj/7S08bRf9dIa8ksRXrAJ1wgJgkvXEkkLz9QBEH9RSF+WY
0EJgUwcRNMG7va+Knxb7ISwarDuRdTOP5zD8aAvEyVHzDUCut/kUDn1Fj7DEpoD/
9JVWRBNMhmpZ7oTYD1olktB6yci8nHZDJIQL16d8OJ8BDRhD+80X6ECpbNSULALC
uFdgUSEdiA7raBrzH9+ahhfyMwu6powhPvP8kXJQ6eRG4AZQrOwwIOkp26mUlnej
P4kgKTtovrrWHJVNofkRbUiQoSacxVZnSuGgFboUP8+l5JK2eJ6XwOweG7mbp2Yv
md/AA+VgzHAZF9oIeWpaPcKdlPOEfw==
=m9xB
-----END PGP SIGNATURE-----

--wxpibp5tboksjfbf--




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 18 Sep 2019 13:57:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 18 09:57:59 2019
Received: from localhost ([127.0.0.1]:54667 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iAaT1-0002Sa-3I
	for submit <at> debbugs.gnu.org; Wed, 18 Sep 2019 09:57:59 -0400
Received: from eggs.gnu.org ([209.51.188.92]:56255)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1iAaSz-0002SJ-4g
 for 26302 <at> debbugs.gnu.org; Wed, 18 Sep 2019 09:57:57 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:60227)
 by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <ludo@HIDDEN>)
 id 1iAaSs-0003Jk-N9; Wed, 18 Sep 2019 09:57:50 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=51120 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <ludo@HIDDEN>)
 id 1iAaSr-0006Uf-8C; Wed, 18 Sep 2019 09:57:50 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: "pelzflorian \(Florian Pelz\)" <pelzflorian@HIDDEN>
Subject: Re: bug#26302: [website] translations
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <8760e8l3bd.fsf@HIDDEN> <20170731215448.6zsu2qcfykuzbcd2@abyayala>
 <20190906142548.4crfjgvxilgalgrs@HIDDEN>
Date: Wed, 18 Sep 2019 15:57:47 +0200
In-Reply-To: <20190906142548.4crfjgvxilgalgrs@HIDDEN>
 (pelzflorian@HIDDEN's message of "Fri, 6 Sep 2019 16:25:48
 +0200")
Message-ID: <87ef0daeqs.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 26302
Cc: Mark H Weaver <mhw@HIDDEN>,
 GNU Guix maintainers <guix-maintainers@HIDDEN>, 26302 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi Florian,

Could you create an account on Savannah so we can give you commit
access?

That=E2=80=99d allow you for you to push these patches first in a branch so=
 we
can test, and it should make it easier for you.

Once you=E2=80=99ve created an account, please make sure to add the OpenPGP=
 key
you=E2=80=99ll use to sign commits on Savannah and on key servers, and repl=
y to
this message signed with that key.

"pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN> skribis:

> I am not entirely certain in my use of macros, but believe it is
> right.  See my discussion with Mark H Weaver at
> <https://lists.gnu.org/archive/html/guile-user/2019-09/msg00008.html>.

I have a couple of comments on this specific issue below.

> +;; NOTE: The sgettext macros have no hygiene because they use
> +;; datum->syntax and do not preserve the semantics of anything looking
> +;; like an sgettext macro.  This is an exceptional use case; do not
> +;; try this at home.

:-)

> +(define (sgettext x)
> +  "After choosing an identifier for marking s-expressions for
> +translation, make it usable by defining a macro with it calling
> +sgettext.  If for example the chosen identifier is G_,
> +use (define-syntax G_ sgettext)."
> +  (syntax-case x ()
> +    ((id exp)
> +     (let* ((msgid (sexp->msgid (syntax->datum #'exp)))
> +            (new-exp (deconstruct (syntax->datum #'exp)
> +                                  (gettext msgid))))
> +       (datum->syntax #'id new-exp)))))

For this and other similar macros you must use =E2=80=98define-syntax=E2=80=
=99, not
=E2=80=98define=E2=80=99, so that they are defined at expansion time, not a=
t run time.
(It doesn=E2=80=99t make any difference when you=E2=80=99re evaluating code=
 since both
phases run in the same module, but it does make a difference when these
phases happen at different times, in different processes.)

Consequently, you must arrange for =E2=80=98sexp->msgid=E2=80=99 and =E2=80=
=98deconstruct=E2=80=99 to be
available at expansion time too.  This can be done by wrapping their
definition in =E2=80=98eval-when=E2=80=99:

  (eval-when (load expand eval)
    (define (sexp->msgid =E2=80=A6) =E2=80=A6)
    (define (deconstruct =E2=80=A6) =E2=80=A6))

But actually it=E2=80=99s not clear to me why these are macros.  I think th=
ey
could be regular procedures and it=E2=80=99d work just fine, no?

> +(define %plural-numbers
> +  ;; Hard-coded list of input numbers such that for each language=E2=80=
=99s
> +  ;; plural formula, for each possible output grammatical number,
> +  ;; there is an n among %plural-numbers that yields this output
> +  ;; (cf. section Plural forms in the gettext manual), except 1 is
> +  ;; omitted from this list because it is a special case for
> +  ;; sngettext.  That is, calling ngettext with each number from
> +  ;; %plural-numbers and with 1 in any locale is guaranteed to return
> +  ;; each plural form at least once.  It would be more resilient
> +  ;; towards new languages if instead of hard-coding we computed this
> +  ;; from the Plural-Forms in the MO file header entry, but that is
> +  ;; not worth the incurred code complexity.
> +  '(0 2 3 11 100))

I don=E2=80=99t understand this: are these the only plural numbers in all
languages, or=E2=80=A6?

Thanks!

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 18 Sep 2019 13:01:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 18 09:00:59 2019
Received: from localhost ([127.0.0.1]:53727 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1iAZZr-0000on-L6
	for submit <at> debbugs.gnu.org; Wed, 18 Sep 2019 09:00:59 -0400
Received: from pelzflorian.de ([5.45.111.108]:40432 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1iAZZp-0000oe-9n
 for 26302 <at> debbugs.gnu.org; Wed, 18 Sep 2019 09:00:58 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id D200B3602A4;
 Wed, 18 Sep 2019 15:00:55 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1568811656;
 bh=27VFdJoMWVjm3xaSj7noyrjQ8vDL089taPfLQqNS3sg=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=JGnFaAh5xHDeIK/rsK9fg7w5/13K9Ost4Ltd2ebmjgWXN7erhihSfmyD31CUreJUL
 cYuT4YCBj/gtpmH3FOMlarvIh/PLuVDaTHHl/fvSKFAJO/aJ7BDb6LDSQRcarn//vZ
 ZKouPho3ktwgSA0Z0OQ0pRPOWppy7OPFB9fUDayk=
Date: Wed, 18 Sep 2019 15:00:55 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20190918130055.gvx2z2iqh7i3qn6h@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
 <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
User-Agent: NeoMutt/20180716
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sun, Sep 15, 2019 at 10:18:20PM +0200, pelzflorian (Florian Pelz) wrote:
> What’s missing is code for adding the nginx plugin
> 
> https://www.nginx.com/resources/wiki/modules/accept_language/
> 
> to Guix so it can be used on berlin.scm.  It seems to offer all that
> is required for redirecting existing URLs.
> 
> Regards,
> Florian

Help is welcome.  If berlin.scm uses the above module, a package like
<https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=nginx-mod-dav-ext>
but for the accept_language module and for Guix would be needed.
I would prefer someone more into nginx and its Guix service to do this
or suggest an alternative.  If not, I will try making a package in a few days.

Regards,
Florian




Information forwarded to bug-guix@HIDDEN:
bug#26302; Package guix. Full text available.

Message received at 26302 <at> debbugs.gnu.org:


Received: (at 26302) by debbugs.gnu.org; 15 Sep 2019 20:18:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Sep 15 16:18:25 2019
Received: from localhost ([127.0.0.1]:48756 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1i9ayW-0003pS-VM
	for submit <at> debbugs.gnu.org; Sun, 15 Sep 2019 16:18:25 -0400
Received: from pelzflorian.de ([5.45.111.108]:36584 helo=mail.pelzflorian.de)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pelzflorian@HIDDEN>) id 1i9ayU-0003pJ-Gv
 for 26302 <at> debbugs.gnu.org; Sun, 15 Sep 2019 16:18:23 -0400
Received: from pelzflorian.localdomain (unknown [5.45.111.108])
 by mail.pelzflorian.de (Postfix) with ESMTPSA id 4E4493602A4;
 Sun, 15 Sep 2019 22:18:20 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=pelzflorian.de;
 s=mail; t=1568578701;
 bh=4OH5b4NtiQImfBwk2OuFFCZG61FY6zgMHRR0hfRUqiE=;
 h=Date:From:To:Cc:Subject:References:In-Reply-To;
 b=Vsp0PiiJdgox7uWq2kRdAEKAzkVFnLeXM58wcAUQikNYhMEH9V13I7tnNSFJBV16+
 l9r+IB3lD1CqLomIrJWseO2l/vRxKsBLigypXLi92yB04jrLZZv6d3HgUPjJDiIdPP
 WgDnJ9o/VLEHiHWqEhblqyvJcUxPwRZh7P+/PmQ4=
Date: Sun, 15 Sep 2019 22:18:20 +0200
From: "pelzflorian (Florian Pelz)" <pelzflorian@HIDDEN>
To: sirgazil <sirgazil@HIDDEN>
Subject: Re: bug#26302: [website] translations
Message-ID: <20190915201819.3yxm25fayvbxwdpl@HIDDEN>
References: <20170329154040.ddscahwp2agknihb@abyayala>
 <16d07cb5a1d.ca69255821627.8144164908931126811@HIDDEN>
 <20190908171638.cna67eearj4rbn2k@HIDDEN>
 <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="uvu3qehc3367oshy"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <16d18a5a9e8.12ab66c8254154.2756956535677606704@HIDDEN>
User-Agent: NeoMutt/20180716
X-Debbugs-Envelope-To: 26302
Cc: 26302 <26302 <at> debbugs.gnu.org>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>


--uvu3qehc3367oshy
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

On Mon, Sep 09, 2019 at 07:49:33PM -0500, sirgazil wrote:
> I think one could start supporting only the
> language tags equivalent to the teams defined in the Translation
> Project (TP).
> 

This is a good suggestion, I think.  Find attached new versions of all
patches that work on a berlin.scm virtual machine (slightly modified
to use substitutes and not run some services).  These include patches
for dropdown accessibility and an ugly language dropdown.

The language dropdown redirects to the homepage, because Haunt offers
no nice way to get the name of the same page.

I have used the code “en” for U.S. English because the TP team for
British English is already called en_GB, so its code would be en-GB.

What’s missing is code for adding the nginx plugin

https://www.nginx.com/resources/wiki/modules/accept_language/

to Guix so it can be used on berlin.scm.  It seems to offer all that
is required for redirecting existing URLs.

Regards,
Florian

--uvu3qehc3367oshy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0001-website-Use-needed-modules-in-posts.patch"

From fa96d7ec0a71dfea4b5c2cae8bdfb2a8f27f678d Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Thu, 18 Jul 2019 10:22:44 +0200
Subject: [PATCH 1/8] website: Use needed modules in posts.

* website/posts/back-from-seagl-2018.sxml: Use needed modules.
* website/posts/guix-at-libreplanet-2016.sxml: Use needed modules.
---
 website/posts/back-from-seagl-2018.sxml     | 3 ++-
 website/posts/guix-at-libreplanet-2016.sxml | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/website/posts/back-from-seagl-2018.sxml b/website/posts/back-from-seagl-2018.sxml
index c5ad0a9..958369f 100644
--- a/website/posts/back-from-seagl-2018.sxml
+++ b/website/posts/back-from-seagl-2018.sxml
@@ -1,6 +1,7 @@
 (begin
   (use-modules (apps base templates components)
-	           (srfi srfi-19))
+               (apps base utils)
+               (srfi srfi-19))
   `((title . "Back from SeaGL 2018")
     (author . "Chris Marusich")
     (date . ,(make-date 0 0 0 0 10 12 2018 -28800))
diff --git a/website/posts/guix-at-libreplanet-2016.sxml b/website/posts/guix-at-libreplanet-2016.sxml
index 8581be4..252def3 100644
--- a/website/posts/guix-at-libreplanet-2016.sxml
+++ b/website/posts/guix-at-libreplanet-2016.sxml
@@ -1,5 +1,6 @@
 (begin
-  (use-modules (srfi srfi-19))
+  (use-modules (srfi srfi-19)
+               (apps base templates components))
   `((title . "Guix at LibrePlanet 2016")
     (author . "David Thompson")
     (date unquote (make-date 0 0 0 0 15 3 2016 3600))
-- 
2.23.0


--uvu3qehc3367oshy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0002-website-Fix-typing-mistake.patch"

From afd68ec639494320b5248b75315174d2dc1f7adb Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sat, 31 Aug 2019 11:52:31 +0200
Subject: [PATCH 2/8] website: Fix typing mistake.

* website/apps/base/templates/contribute.scm (contribute-t):
Add missing word.
---
 website/apps/base/templates/contribute.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/website/apps/base/templates/contribute.scm b/website/apps/base/templates/contribute.scm
index 6c4787f..4d68e87 100644
--- a/website/apps/base/templates/contribute.scm
+++ b/website/apps/base/templates/contribute.scm
@@ -201,7 +201,7 @@
 	(h3 (@ (id "testing")) "Test and Bug Reports")
 	(p
 	 "Install the software and send feedback to the community
-         about your experience. Help the project reporting bugs.")
+         about your experience. Help the project by reporting bugs.")
 	(p
 	 "Before reporting a bug, please check whether the bug is
          already "
-- 
2.23.0


--uvu3qehc3367oshy
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment; filename="0003-website-Fix-typo.patch"
Content-Transfer-Encoding: 8bit

From 3bd446c4242f278123a113bd65ef2bf302a29afd Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sat, 31 Aug 2019 21:00:29 +0200
Subject: [PATCH 3/8] website: Fix typo.

* website/apps/base/templates/security.scm (security-t): Fix typo.
---
 website/apps/base/templates/security.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/website/apps/base/templates/security.scm b/website/apps/base/templates/security.scm
index ea997b2..b772912 100644
--- a/website/apps/base/templates/security.scm
+++ b/website/apps/base/templates/security.scm
@@ -16,7 +16,7 @@
   (theme
    #:title '("Security")
    #:description
-   "Important information about geting security updates for your
+   "Important information about getting security updates for your
    GNUGuix installation, and instructions on how to report
    security issues."
    #:keywords
-- 
2.23.0


--uvu3qehc3367oshy
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="0004-website-Add-custom-xgettext-to-extract-from-nested-s.patch"
Content-Transfer-Encoding: 8bit

From f7174a89cdaa0fbbbe5aa08c9934c80f34381242 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sun, 15 Sep 2019 21:28:28 +0200
Subject: [PATCH 4/8] website: Add custom xgettext to extract from nested sexps
 for i18n.

* website/scripts/sexp-xgettext.scm: New file for generating a POT file.
* website/sexp-xgettext.scm: New file with module for looking up
translations.
* website/apps/i18n.scm: New file.  Add utility functions.
* website/i18n-howto: New file with usage instructions.
* website/po/POTFILES: New file; list apps/base/templates files here.
* website/po/LINGUAS: New file.  List en_US lingua.
* website/po/ietf-tags.scm: New file.  Add association for en_US lingua.
* website/haunt.scm: Wrap each builder to build the locale set in LC_ALL.
* website/README: Adapt build instructions for i18n.
* website/.guix.scm: Make Haunt build directory writable so Haunt can
overwrite duplicate assets.  Convert PO files to MO files and build for
each lingua.
---
 website/.guix.scm                 |  76 ++-
 website/README                    |   8 +-
 website/apps/i18n.scm             | 127 +++++
 website/haunt.scm                 |  17 +-
 website/i18n-howto.txt            |  86 ++++
 website/po/LINGUAS                |   3 +
 website/po/POTFILES               |  34 ++
 website/po/ietf-tags.scm          |   9 +
 website/scripts/sexp-xgettext.scm | 823 ++++++++++++++++++++++++++++++
 website/sexp-xgettext.scm         | 530 +++++++++++++++++++
 10 files changed, 1690 insertions(+), 23 deletions(-)
 create mode 100644 website/apps/i18n.scm
 create mode 100644 website/i18n-howto.txt
 create mode 100644 website/po/LINGUAS
 create mode 100644 website/po/POTFILES
 create mode 100644 website/po/ietf-tags.scm
 create mode 100644 website/scripts/sexp-xgettext.scm
 create mode 100644 website/sexp-xgettext.scm

diff --git a/website/.guix.scm b/website/.guix.scm
index f6e50fb..a5fe505 100644
--- a/website/.guix.scm
+++ b/website/.guix.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix web site
 ;;; Copyright © 2017, 2019 Ludovic Courtès <ludo@HIDDEN>
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;;
 ;;; This file is part of the GNU Guix web site.
 ;;;
@@ -18,16 +19,27 @@
 
 ;; Run 'guix build -f .guix.scm' to build the web site.
 
+(define this-directory
+  (dirname (current-filename)))
+
+;; Make sure po/LINGUAS will be found in the current working
+;; directory.
+(chdir this-directory)
+
+;; We need %linguas from the (sexp-xgettext) module.
+;; Therefore, we add its path to the load path.
+(set! %load-path (cons this-directory %load-path))
+
 (use-modules (guix) (gnu)
              (guix modules)
              (guix git-download)
              (guix gexp)
              (guix channels)
              (srfi srfi-9)
-             (ice-9 match))
-
-(define this-directory
-  (dirname (current-filename)))
+             (ice-9 match)
+             (ice-9 rdelim)
+             (ice-9 regex)
+             (sexp-xgettext))
 
 (define source
   (local-file this-directory "guix-web-site"
@@ -72,7 +84,6 @@
                        (ice-9 match))
 
           (copy-recursively #$source ".")
-
           ;; Set 'GUILE_LOAD_PATH' so that Haunt find the Guix modules and
           ;; its dependencies.  To find out the load path of Guix and its
           ;; dependencies, fetch its value over 'guix repl'.
@@ -92,23 +103,60 @@
                                     ":"))))
             (close-pipe pipe))
 
+          ;; Make the copy writable so Haunt can overwrite duplicate assets.
+          (invoke #+(file-append (specification->package "coreutils")
+                                 "/bin/chmod")
+                  "--recursive" "u+w" ".")
+
+          ;; For translations, create MO files from PO files.
+          (for-each
+           (lambda (lingua)
+             (let* ((msgfmt #+(file-append (specification->package "gettext")
+                                           "/bin/msgfmt"))
+                    (lingua-file (string-append "po/" lingua ".po"))
+                    (lang (car (string-split lingua #\_)))
+                    (lang-file (string-append "po/" lang ".po")))
+               (define (create-mo filename)
+                 (begin
+                   (invoke msgfmt filename)
+                   (mkdir-p (string-append lingua "/LC_MESSAGES"))
+                   (rename-file "messages.mo"
+                                (string-append lingua "/LC_MESSAGES/"
+                                               "guix-website.mo"))))
+               (cond
+                ((file-exists? lingua-file)
+                 (create-mo lingua-file))
+                ((file-exists? lang-file)
+                 (create-mo lang-file))
+                (else #t))))
+           (list #$@%linguas))
+
           ;; So we can read/write UTF-8 files.
           (setenv "GUIX_LOCPATH"
                   #+(file-append (specification->package "glibc-utf8-locales")
                                  "/lib/locale"))
-          (setenv "LC_ALL" "en_US.utf8")
 
           ;; Use a sane default.
           (setenv "XDG_CACHE_HOME" "/tmp/.cache")
 
-          (invoke #+(file-append (specification->package "haunt")
-                                 "/bin/haunt")
-                  "build")
-
-          (mkdir-p #$output)
-          (copy-recursively "/tmp/gnu.org/software/guix" #$output
-                            #:log (%make-void-port "w"))
-          (symlink "guix.html" (string-append #$output "/index.html"))))))
+          ;; Build the website for each translation.
+          (for-each
+           (lambda (lingua)
+             (begin
+               (setenv "LC_ALL" (string-append lingua ".utf8"))
+               (invoke #+(file-append (specification->package "haunt")
+                                      "/bin/haunt")
+                       "build")
+               (mkdir-p #$output)
+               (copy-recursively "/tmp/gnu.org/software/guix" #$output
+                                 #:log (%make-void-port "w"))
+               (let ((tag (assoc-ref
+                           (call-with-input-file "po/ietf-tags.scm"
+                             (lambda (port) (read port)))
+                           lingua)))
+                 (symlink "guix.html"
+                          (string-append #$output "/" tag "/index.html")))))
+           (list #$@%linguas))))))
 
 (computed-file "guix-web-site" build)
 
diff --git a/website/README b/website/README
index d3a3a78..ff54053 100644
--- a/website/README
+++ b/website/README
@@ -24,14 +24,18 @@ commands:
 
 #+BEGIN_EXAMPLE
 $ cd path/to/guix-artwork/website
-$ GUIX_WEB_SITE_LOCAL=yes haunt build
+$ export GUILE_LOAD_PATH=$(guix build guile-syntax-highlight)/share/guile/site/2.2:$GUILE_LOAD_PATH
+$ LC_ALL=en_US.utf8 GUIX_WEB_SITE_LOCAL=yes haunt build
 $ haunt serve
 #+END_EXAMPLE
 
-Then, visit http://localhost:8080/guix.html in a web browser.
+Then, visit http://localhost:8080/en/guix.html in a web browser.
 
 You can stop the server pressing ~Ctrl + C~ twice.
 
+See also the file i18n-howto.txt for information on working with
+translations.
+
 * Deploying
 
 Like the pages of many GNU websites, this website is managed through
diff --git a/website/apps/i18n.scm b/website/apps/i18n.scm
new file mode 100644
index 0000000..bb60b32
--- /dev/null
+++ b/website/apps/i18n.scm
@@ -0,0 +1,127 @@
+;;; GNU Guix web site
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
+;;;
+;;; This file is part of the GNU Guix web site.
+;;;
+;;; The GNU Guix web site is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU Affero General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; The GNU Guix web site 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 Affero General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Affero General Public License
+;;; along with the GNU Guix web site.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (apps i18n)
+  #:use-module (haunt page)
+  #:use-module (haunt utils)
+  #:use-module (ice-9 match)
+  #:use-module (sexp-xgettext)
+  #:use-module (srfi srfi-1)
+  #:export (G_
+            N_
+            C_
+            NC_
+            %current-ietf-tag
+            %current-lang
+            %current-lingua
+            builder->localized-builder
+            builders->localized-builders
+            ietf-tags-file-contents
+            localize-url))
+
+(define %gettext-domain
+  "guix-website")
+
+(bindtextdomain %gettext-domain (getcwd))
+(bind-textdomain-codeset %gettext-domain "UTF-8")
+(textdomain %gettext-domain)
+
+;; NOTE: The sgettext macros have no hygiene because they use
+;; datum->syntax and do not preserve the semantics of anything looking
+;; like an sgettext macro.  This is an exceptional use case; do not
+;; try this at home.
+
+(define-syntax G_
+  sgettext)
+
+(set-simple-keywords! '(G_))
+
+(define-syntax N_ ;like ngettext
+  sngettext)
+
+(define-syntax C_ ;like pgettext
+  spgettext)
+
+(define-syntax NC_ ;like npgettext
+  snpgettext)
+
+(set-complex-keywords! '(N_ C_ NC_))
+
+(define <page>
+  (@@ (haunt page) <page>))
+
+(define %current-lingua
+  ;; strip the character encoding:
+  (car (string-split (setlocale LC_ALL) #\.)))
+
+(define-syntax ietf-tags-file-contents
+  (identifier-syntax
+   (force (delay (call-with-input-file
+                     "po/ietf-tags.scm"
+                   (lambda (port) (read port)))))))
+
+
+(define %current-ietf-tag
+  (or (assoc-ref ietf-tags-file-contents %current-lingua)
+      "en"))
+
+(define %current-lang
+  (car (string-split %current-ietf-tag #\-)))
+
+(define* (localize-url url #:key (lingua %current-ietf-tag))
+  "Given a URL as used in a href attribute, transforms it to point to
+the version for LINGUA as produced by builder->localized-builder."
+  (if (and (string-prefix? "/" url)
+           (or (string-suffix? ".html" url)
+               (string-suffix? "/" url)))
+      (string-append "/" lingua url)
+      url))
+
+(define (first-value arg)
+  "For some reason the builder returned by static-directory returns
+multiple values.  This procedure is used to retain only the first
+return value.  TODO: This should not be necessary."
+  arg)
+
+(define (builder->localized-builder builder)
+  "Returns a Haunt builder procedure generated from an existing
+BUILDER with translations for the current system locale coming from
+sexp-xgettext."
+  (compose
+   (lambda (pages)
+     (map
+      (lambda (page)
+        (match page
+          (($ <page> file-name contents writer)
+           (let ((new-name (string-append %current-ietf-tag
+                                          "/"
+                                          file-name)))
+             (make-page new-name contents writer)))
+          (else page)))
+      pages))
+   (lambda (site posts)
+     (first-value (builder site posts)))))
+
+(define (builders->localized-builders builders)
+  "Returns a list of new Haunt builder procedures generated from
+BUILDERS and localized via sexp-xgettext for the current system
+locale."
+  (flatten
+   (map-in-order
+    builder->localized-builder
+    builders)))
diff --git a/website/haunt.scm b/website/haunt.scm
index 9f66920..3d7963e 100644
--- a/website/haunt.scm
+++ b/website/haunt.scm
@@ -5,20 +5,23 @@
 (use-modules ((apps base builder) #:prefix base:)
 	     ((apps blog builder) #:prefix blog:)
 	     ((apps download builder) #:prefix download:)
+             (apps i18n)
 	     ((apps packages builder) #:prefix packages:)
 	     (haunt asset)
              (haunt builder assets)
              (haunt reader)
 	     (haunt reader commonmark)
-             (haunt site))
-
+             (haunt site)
+             (ice-9 rdelim)
+             (srfi srfi-1))
 
 (site #:title "GNU Guix"
       #:domain "https://guix.gnu.org"
       #:build-directory "/tmp/gnu.org/software/guix"
       #:readers (list sxml-reader html-reader commonmark-reader)
-      #:builders (list base:builder
-		       blog:builder
-		       download:builder
-		       packages:builder
-		       (static-directory "static")))
+      #:builders (builders->localized-builders
+                  (list base:builder
+                        blog:builder
+                        download:builder
+                        packages:builder
+                        (static-directory "static"))))
diff --git a/website/i18n-howto.txt b/website/i18n-howto.txt
new file mode 100644
index 0000000..0d0c7c1
--- /dev/null
+++ b/website/i18n-howto.txt
@@ -0,0 +1,86 @@
+With sexp-xgettext, arbitrary s-expressions can be marked for
+translation (not only strings like with normal xgettext).
+
+S-expressions can be marked with G_ (simple marking for translation),
+N_ (“complex” marking with different forms depending on number like
+ngettext), C_ (“complex” marking distinguished from other markings by
+a msgctxt like pgettext) or NC_ (mix of both).
+
+Marking a string for translation behaves like normal gettext.  Marking
+a parenthesized expression (i.e. a list or procedure call) extracts
+each string from the parenthesized expression.  If a symbol, keyword
+or other parenthesized expression occurs between the strings, it is
+extracted as an XML element.  Expressions before or after all strings
+are not extracted.  If strings from a parenthesized sub-expression
+shall be extracted too, the sub-expression must again be marked with
+G_ unless it is the only sub-expression or it follows a quote,
+unquote, quasiquote or unquote-splicing.  The order of XML elements
+can be changed in the translation to produce a different ordering
+inside a parenthesized expression.  If a string shall not be extracted
+from a marked expression, it must be wrapped, for example by a call to
+the identity procedure.  Be careful when marking non-SHTML content
+such as procedure calls for translation: Additional strings will be
+inserted between non-string elements.
+
+Known issues:
+
+* Line numbers are sometimes off.
+
+* Some less important other TODOs in the comments.
+
+=====
+
+The following commands are an example of the translation for locale
+de_DE.  Adapt as necessary.  We assume the software requirements
+mentioned in the README are installed.
+
+To create a pot file:
+
+guile scripts/sexp-xgettext.scm -f po/POTFILES \
+                                -o po/guix-website.pot \
+                                --from-code=UTF-8 \
+                                --copyright-holder="Ludovic Courtès" \
+                                --package-name="guix-website" \
+                                --msgid-bugs-address="ludo@HIDDEN" \
+                                --keyword=G_ \
+                                --keyword=N_:1,2 \
+                                --keyword=C_:1c,2 \
+                                --keyword=NC_:1c,2,3
+
+To create a po file from a pot file, do the usual:
+
+cd po
+msginit -l de --no-translator
+
+To merge an existing po file with a new pot file:
+
+cd po
+msgmerge -U de.po guix-website.pot
+
+To update mo files:
+
+mkdir -p de/LC_MESSAGES
+cd po
+msgfmt de.po
+cd ..
+mv po/messages.mo de/LC_MESSAGES/guix-website.mo
+
+To build all languages:
+
+guix build -f .guix.scm
+
+To test the de_DE translation:
+
+guix environment --ad-hoc haunt
+LC_ALL=de_DE.utf8 \
+ GUILE_LOAD_PATH=$(guix build guile-syntax-highlight)/share/guile/site/2.2:$GUILE_LOAD_PATH \
+ GUIX_WEB_SITE_LOCAL=yes \
+ haunt build
+GUILE_LOAD_PATH=$(guix build guile-syntax-highlight)/share/guile/site/2.2:$GUILE_LOAD_PATH \
+ haunt serve
+
+For checking for errors / debugging newly marked files you can try:
+
+GUILE_LOAD_PATH=.:$(guix build haunt)/share/guile/site/2.2:\
+$(guix build guile-syntax-highlight)/share/guile/site/2.2:$GUILE_LOAD_PATH \
+ guile apps/base/templates/about.scm   # an example for debugging about.scm
diff --git a/website/po/LINGUAS b/website/po/LINGUAS
new file mode 100644
index 0000000..d4dd759
--- /dev/null
+++ b/website/po/LINGUAS
@@ -0,0 +1,3 @@
+# Translation with sexp-xgettext requires the full LL_CC locale name
+# to be specified.
+en_US
diff --git a/website/po/POTFILES b/website/po/POTFILES
new file mode 100644
index 0000000..c4f4b9c
--- /dev/null
+++ b/website/po/POTFILES
@@ -0,0 +1,34 @@
+# high-priority files that should come first in the PO file
+apps/base/utils.scm
+apps/base/templates/home.scm
+apps/base/templates/theme.scm
+apps/base/templates/components.scm
+apps/base/templates/about.scm
+apps/base/data.scm
+apps/base/templates/help.scm
+# other files
+apps/base/templates/contact.scm
+apps/base/templates/contribute.scm
+apps/base/templates/donate.scm
+apps/base/templates/graphics.scm
+apps/base/templates/irc.scm
+apps/base/templates/menu.scm
+apps/base/templates/screenshot.scm
+apps/base/templates/security.scm
+apps/download/data.scm
+apps/download/templates/components.scm
+apps/download/templates/download.scm
+apps/blog/templates/components.scm
+apps/blog/templates/feed.scm
+apps/blog/templates/post-list.scm
+apps/blog/templates/post.scm
+apps/blog/templates/tag.scm
+apps/download/data.scm
+apps/download/templates/components.scm
+apps/download/templates/download.scm
+apps/packages/templates/components.scm
+apps/packages/templates/detailed-index.scm
+apps/packages/templates/detailed-package-list.scm
+apps/packages/templates/index.scm
+apps/packages/templates/package-list.scm
+apps/packages/templates/package.scm
diff --git a/website/po/ietf-tags.scm b/website/po/ietf-tags.scm
new file mode 100644
index 0000000..8102a49
--- /dev/null
+++ b/website/po/ietf-tags.scm
@@ -0,0 +1,9 @@
+;;; This file contains an association list for each translation from
+;;; the locale to an IETF language tag to be used in the URL path of
+;;; translated pages.  The language tag results from the translation
+;;; team’s language code from
+;;; <https://translationproject.org/team/index.html>.  The underscore
+;;; in the team’s code is replaced by a hyphen.  For example, az would
+;;; be used for the Azerbaijani language (not az-Latn) and zh-CN would
+;;; be used for mainland Chinese (not zh-Hans-CN).
+(("en_US" . "en"))
diff --git a/website/scripts/sexp-xgettext.scm b/website/scripts/sexp-xgettext.scm
new file mode 100644
index 0000000..a21d289
--- /dev/null
+++ b/website/scripts/sexp-xgettext.scm
@@ -0,0 +1,823 @@
+;;; GNU Guix web site
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
+;;;
+;;; This file is part of the GNU Guix web site.
+;;;
+;;; The GNU Guix web site is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU Affero General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; The GNU Guix web site 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 Affero General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Affero General Public License
+;;; along with the GNU Guix web site.  If not, see <http://www.gnu.org/licenses/>.
+
+(use-modules (ice-9 getopt-long)
+             (ice-9 match)
+             (ice-9 peg)
+             (ice-9 receive)
+             (ice-9 regex)
+             (ice-9 textual-ports)
+             (srfi srfi-1) ;lists
+             (srfi srfi-9) ;records
+             (srfi srfi-19) ;date
+             (srfi srfi-26)) ;cut
+
+;;; This script imitates xgettext, but combines nested s-expressions
+;;; in the input Scheme files to a single msgstr in the PO file.  It
+;;; works by first reading the keywords specified on the command-line,
+;;; then dealing with the remaining options using (ice-9 getopt-long).
+;;; Then, it parses each Scheme file in the POTFILES file specified
+;;; with --files-from and constructs po entries from it.  For parsing,
+;;; a PEG is used instead of Scheme’s read, because we can extract
+;;; comments with it.  The po entries are written to the PO file
+;;; specified with the --output option.  Scheme code can then use the
+;;; (sexp-xgettext) module to deconstruct the msgids looked up in the
+;;; PO file via gettext.
+
+(define-record-type <keyword-spec>
+  (make-keyword-spec id sg pl c total xcomment)
+  keyword-spec?
+  (id keyword-spec-id) ;identifier
+  (sg keyword-spec-sg) ;arg with singular
+  (pl keyword-spec-pl) ;arg with plural
+  (c keyword-spec-c) ;arg with msgctxt or 'mixed if sg is mixed msgctxt|singular
+  (total keyword-spec-total) ;total number of args
+  (xcomment keyword-spec-xcomment))
+
+(define (complex-keyword-spec? keyword-spec)
+  (match keyword-spec
+    (($ <keyword-spec> _ _ #f #f _ #f) #f)
+    (else #t)))
+
+(define %keyword-specs
+  ;; List of valid xgettext keyword options.
+  ;; Read keywords from command-line options.
+  (let loop ((opts (cdr (command-line)));command-line options from
+                                        ;which to extract --keyword
+                                        ;options
+             (remaining-opts '()) ;unhandled opts
+             (specs '()))
+    (define (string->integer str)
+      (if (string-match "[0-9]+" str)
+          (string->number str)
+          (error "Not a decimal integer.")))
+    (define* (argnums->spec id #:optional (argnums '()))
+      (let loop ((sg #f)
+                 (pl #f)
+                 (c #f)
+                 (total #f)
+                 (xcomment #f)
+                 (argnums argnums))
+        (match argnums
+          (() (make-keyword-spec id
+                                 (if sg sg 1)
+                                 pl
+                                 c
+                                 total
+                                 xcomment))
+          ((arg . argnums)
+           (cond
+            ((string-suffix? "c" arg)
+             (cond (c (error "c suffix clashes"))
+                   (else
+                    (let* ((number-str (string-drop-right arg 1))
+                           (number (string->integer number-str)))
+                      (loop sg pl number total xcomment argnums)))))
+            ((string-suffix? "g" arg)
+             (cond
+              (sg (error "Only first argnum can have g suffix."))
+              (c (error "g suffix clashes."))
+              (else
+               (let* ((number-str (string-drop-right arg 1))
+                      (number (string->integer number-str)))
+                 (loop number #f 'mixed total xcomment argnums)))))
+            ((string-suffix? "t" arg)
+             (cond (total (error "t suffix clashes"))
+                   (else
+                    (let* ((number-str (string-drop-right arg 1))
+                           (number (string->integer number-str)))
+                      (loop sg pl c number xcomment argnums)))))
+            ((string-suffix? "\"" arg)
+             (cond (xcomment (error "xcomment clashes"))
+                   (else
+                    (let* ((comment (substring arg
+                                               1
+                                               (- (string-length arg) 1))))
+                      (loop sg pl c total comment argnums)))))
+            (else
+             (let* ((number (string->integer arg)))
+               (if sg
+                   (if pl
+                       (error "Too many argnums.")
+                       (loop sg number c total xcomment argnums))
+                   (loop number #f c total xcomment argnums)))))))))
+
+    (define (string->spec str) ;see `info xgettext`
+      (match (string-split str #\:)
+        ((id) (argnums->spec id))
+        ((id argnums)
+         (argnums->spec id (string-split argnums #\,)))))
+    (match opts
+      (() (begin
+            ;; remove recognized --keyword command-line options:
+            (set-program-arguments (cons (car (command-line))
+                                         (reverse remaining-opts)))
+            specs))
+      ((current-opt . rest)
+       (cond
+        ((string=? "--" current-opt) specs)
+        ((string-prefix? "--keyword=" current-opt)
+         (let ((keyword (string-drop current-opt (string-length "--keyword="))))
+           (loop rest remaining-opts (cons (string->spec keyword) specs))))
+        ((or (string=? "--keyword" current-opt)
+             (string=? "-k" current-opt))
+         (let ((next-opt (car rest)))
+           (loop (cdr rest)
+                 remaining-opts
+                 (cons (string->spec next-opt) specs))))
+        (else (loop rest (cons current-opt remaining-opts) specs)))))))
+
+;;; Other options are not repeated, so we can use getopt-long:
+
+(define %options ;; Corresponds to what is documented at `info xgettext`.
+  (let ((option-spec
+         `((files (single-char #\f) (value #t))
+           (directory (single-char #\D) (value #t))
+           (default-domain (single-char #\d) (value #t))
+           (output (single-char #\o) (value #t))
+           (output-dir (single-char #\p) (value #t))
+           (from-code (value #t))
+           (join-existing (single-char #\j) (value #f))
+           (exclude-file (single-char #\x) (value #t))
+           (add-comments (single-char #\c) (value #t))
+
+           ;; Because getopt-long does not support repeated options,
+           ;; we took care of --keyword options further up.
+           ;; (keyword (single-char #\k) (value #t))
+
+           (flag (value #t))
+           (force-po (value #f))
+           (indent (single-char #\i) (value #f))
+           (no-location (value #f))
+           (add-location (single-char #\n) (value #t))
+           (width (single-char #\w) (value #t))
+           (no-wrap (value #f))
+           (sort-output (single-char #\s) (value #f))
+           (sort-by-file (single-char #\F) (value #f))
+           (omit-header (value #f))
+           (copyright-holder (value #t))
+           (foreign-user (value #f))
+           (package-name (value #t))
+           (package-version (value #t))
+           (msgid-bugs-address (value #t))
+           (msgstr-prefix (single-char #\m) (value #t))
+           (msgstr-suffix (single-char #\m) (value #t))
+           (help (value #f))
+           (pack (value #f)))))
+    (getopt-long (command-line) option-spec)))
+
+
+(define parse-scheme-file
+  ;; This procedure parses FILE and returns a parse tree.
+  (let ()
+    ;;TODO: Optionally ignore case.
+    (define-peg-pattern NL all "\n")
+    (define-peg-pattern comment all (and ";"
+                                         (* (and peg-any
+                                                 (not-followed-by NL)))
+                                         (and peg-any (followed-by NL))))
+    (define-peg-pattern empty none (or " " "\t"))
+    (define-peg-pattern whitespace body (or empty NL))
+    (define-peg-pattern quotation body (or "'" "`" "," ",@"))
+                                        ;TODO: Allow user to specify
+                                        ;other quote reader macros to
+                                        ;be ignored and also ignore
+                                        ;quote spelled out without
+                                        ;reader macro.
+    (define-peg-pattern open body (and (? quotation)
+                                       (or "(" "[" "{")))
+    (define-peg-pattern close body (or ")" "]" "}"))
+    (define-peg-pattern string body (and (followed-by "\"")
+                                         (* (or "\\\""
+                                                (and (or NL peg-any)
+                                                     (not-followed-by "\""))))
+                                         (and (or NL peg-any)
+                                              (followed-by "\""))
+                                         "\""))
+    (define-peg-pattern token all (or string
+                                      (and
+                                       (not-followed-by open)
+                                       (not-followed-by close)
+                                       (not-followed-by comment)
+                                       (* (and peg-any
+                                               (not-followed-by open)
+                                               (not-followed-by close)
+                                               (not-followed-by comment)
+                                               (not-followed-by string)
+                                               (not-followed-by whitespace)))
+                                       (or
+                                        (and peg-any (followed-by open))
+                                        (and peg-any (followed-by close))
+                                        (and peg-any (followed-by comment))
+                                        (and peg-any (followed-by string))
+                                        (and peg-any (followed-by whitespace))
+                                        (not-followed-by peg-any)))))
+    (define-peg-pattern list all (or (and (? quotation) "(" program ")")
+                                     (and (? quotation) "[" program "]")
+                                     (and (? quotation) "{" program "}")))
+    (define-peg-pattern t-or-s body (or token list))
+    (define-peg-pattern program all (* (or whitespace
+                                           comment
+                                           t-or-s)))
+    (lambda (file)
+      (call-with-input-file file
+        (lambda (port)
+          ;; It would be nice to match port directly without
+          ;; converting to a string first, but apparently guile cannot
+          ;; do that yet.
+          (let ((string (get-string-all port)))
+            (peg:tree (match-pattern program string))))))))
+
+
+(define-record-type <po-entry>
+  (make-po-entry ecomments ref flags ctxt id idpl)
+  po-entry?
+;;; irrelevant: (tcomments po-entry-tcomments) ;translator-comments
+  (ecomments po-entry-ecomments) ;extracted-comments
+  (ref po-entry-ref) ;reference
+  (flags po-entry-flags)
+;;; irrelevant: (prevctxt po-entry-prevctxt) ;previous-ctxt
+;;; irrelevant: (prev po-entry-prev) ;previous-translation
+  (ctxt po-entry-ctxt) ;msgctxt
+  (id po-entry-id) ;msgid
+  (idpl po-entry-idpl) ;msgid-plural
+;;; irrelevant: (str po-entry-str) ;msgstr string or association list
+;;;                                ;integer to string
+  )
+
+(define (po-equal? po1 po2)
+  "Returns whether PO1 and PO2 have equal ctxt, id and idpl."
+  (and (equal? (po-entry-ctxt po1) (po-entry-ctxt po2))
+       (equal? (po-entry-id po1) (po-entry-id po2))
+       (equal? (po-entry-idpl po1) (po-entry-idpl po2))))
+
+(define (combine-duplicate-po-entries list)
+  "Returns LIST with duplicate po entries replaced by a single PO
+entry with both refs."
+  (let loop ((remaining list))
+    (match remaining
+      (() '())
+      ((head . tail)
+       (receive (before from)
+           (break (cut po-equal? head <>) tail)
+         (cond
+          ((null? from) (cons head (loop tail)))
+          (else
+           (loop
+            (cons
+             (match head
+               (($ <po-entry> ecomments1 ref1 flags ctxt id idpl)
+                (match (car from)
+                  (($ <po-entry> ecomments2 ref2 _ _ _ _)
+                   (let ((ecomments (if (or ecomments1 ecomments2)
+                                        (append (or ecomments1 '())
+                                                (or ecomments2 '()))
+                                        #f))
+                         (ref (if (or ref1 ref2)
+                                  (string-join
+                                   (cons
+                                    (or ref1 "")
+                                    (cons
+                                     (or ref2 "")
+                                     '())))
+                                  #f)))
+                     (make-po-entry ecomments ref flags ctxt id idpl))))))
+             (append before (cdr from)))))))))))
+
+(define (write-po-entry po-entry)
+  (define (prepare-text text)
+    "If TEXT is false, returns #f.  Otherwise corrects the formatting
+of TEXT by escaping backslashes and newlines and enclosing TEXT in
+quotes. Note that Scheme’s write is insufficient because it would
+escape far more.  TODO: Strings should be wrappable to a maximum line
+width."
+    (and text
+         (string-append "\""
+                        (with-output-to-string
+                          (lambda ()
+                            (call-with-input-string text
+                              (lambda (port)
+                                (let loop ((c (get-char port)))
+                                  (unless (eof-object? c)
+                                    (case c
+                                      ((#\\) (display "\\"))
+                                      ((#\newline) (display "\\n"))
+                                      (else (write-char c)))
+                                    (loop (get-char port))))))))
+                        "\"")))
+  (define (write-component c prefix)
+    (when c
+      (begin (display prefix)
+             (display " ")
+             (display c)
+             (newline))))
+  (match po-entry
+    (($ <po-entry> ecomments ref flags ctxt id idpl)
+     (let ((prepared-ctxt (prepare-text ctxt))
+           (prepared-id (prepare-text id))
+           (prepared-idpl (prepare-text idpl)))
+       (when ecomments
+         (for-each
+          (lambda (line)
+            (write-component line "#."))
+          (reverse ecomments)))
+       (write-component ref "#:")
+       (write-component (and flags (string-join flags ", ")) "#,")
+       (write-component prepared-ctxt "msgctxt")
+       (write-component prepared-id "msgid")
+       (write-component prepared-idpl "msgid_plural")
+       (if idpl
+           (begin
+             (display "msgstr[0] \"\"")
+             (newline)
+             (display "msgstr[1] \"\""))
+           (display "msgstr \"\""))
+       (newline)))))
+
+(define %comments-line
+  (make-parameter #f))
+
+(define %ecomments-string
+  (make-parameter #f))
+
+(define (update-ecomments-string! str)
+  "Sets the value of the parameter object %ecomments-string if str is
+an ecomments string.  An ecomments string is extracted from a comment
+because it starts with TRANSLATORS or a key specified with
+--add-comments." ;TODO: Support for other keys is missing.
+  (cond
+   ((not str) (%ecomments-string #f))
+   ((= (1+ (or (%comments-line) -42)) (or (%line-number) 0))
+    (let ((m (string-match ";+[ \t]*(.*)" str)))
+      (when m
+        (%comments-line (%line-number))
+        (%ecomments-string
+         (if (%ecomments-string)
+             (cons (match:substring m 1) (%ecomments-string))
+             (list (match:substring m 1)))))))
+   (else
+    (let ((m (string-match ";+[ \t]*(TRANSLATORS:.*)" str)))
+      (if m
+          (begin
+            (%comments-line (%line-number))
+            (%ecomments-string
+             (if (%ecomments-string)
+                 (cons (match:substring m 1) (%ecomments-string))
+                 (list (match:substring m 1)))))
+          (%ecomments-string '#f))))))
+
+(define %file-name
+  (make-parameter #f))
+
+(define (update-file-name! name)
+  "Sets the value of the parameter object %file-name to NAME."
+  (%file-name name))
+
+(define %old-line-number
+  (make-parameter #f))
+
+(define (update-old-line-number! number)
+  "Sets the value of the parameter object %old-line-number to NUMBER."
+  (%old-line-number number))
+
+(define %line-number
+  (make-parameter #f))
+
+(define (update-line-number! number)
+  "Sets the value of the parameter object %line-number to NUMBER."
+  (%line-number number))
+
+(define (incr-line-number!)
+  "Increments the value of the parameter object %line-number by 1."
+  (%line-number (1+ (%line-number))))
+
+(define (incr-line-number-for-each-nl! list)
+  "Increments %line-number once for each NL recursively in LIST.  Does
+nothing if LIST is no list but e.g. an empty 'program."
+  (when (list? list)
+    (for-each
+     (lambda (part)
+       (match part
+         ('NL (incr-line-number!))
+         ((? list?) (incr-line-number-for-each-nl! part))
+         (else #f)))
+     list)))
+
+(define (current-ref)
+  "Returns the location field for a PO entry."
+  (let ((add (option-ref %options 'add-location 'full)))
+    (cond
+     ((option-ref %options 'no-location #f) #f)
+     ((eq? add 'full)
+      (string-append (%file-name) ":" (number->string (%line-number))))
+     ((eq? add 'file)
+      (%file-name))
+     ((eq? add 'never)
+      #f))))
+
+(define (make-simple-po-entry msgid)
+  (let ((po (make-po-entry
+             (%ecomments-string)
+             (current-ref)
+             #f ;TODO: Use scheme-format for format strings?
+             #f ;no ctxt
+             msgid
+             #f)))
+    (update-ecomments-string! #f)
+    po))
+
+
+(define (matching-keyword id)
+  "Returns the keyword-spec whose identifier is the same as ID, or #f
+if ID is no string or no such keyword-spec exists."
+  (and (symbol? id)
+       (let ((found (member (symbol->string id)
+                            %keyword-specs
+                            (lambda (id spec)
+                              (string=? id (keyword-spec-id spec))))))
+         (and found (car found)))))
+
+(define (nth-exp program n)
+  "Returns the Nth 'token or 'list inside the PROGRAM parse tree or #f
+if no tokens or lists exist."
+  (let loop ((i 0)
+             (rest program))
+    (define (on-hit exp)
+      (if (= i n) exp
+          ;; else:
+          (loop (1+ i) (cdr rest))))
+    (match rest
+      (() #f)
+      ((('token . _) . _) (on-hit (car rest)))
+      ((('list open-paren exp close-paren) . _) (on-hit (car rest)))
+      ((_ . _) (loop i (cdr rest)))
+      (else #f))))
+
+(define (more-than-one-exp? program)
+  "Returns true if PROGRAM consiste of more than one expression."
+  (if (matching-keyword (token->string-symbol-or-keyw (nth-exp program 0)))
+      (nth-exp program 2) ;if there is third element, keyword does not count
+      (nth-exp program 1)))
+
+(define (token->string-symbol-or-keyw tok)
+  "For a parse tree TOK, if it is a 'token parse tree, returns its
+value as a string, symbol or #:-keyword, otherwise returns #f."
+  (match tok
+    (('token (parts ...) . remaining)
+     ;; This is a string with line breaks in it.
+     (with-input-from-string
+         (string-append
+          (apply string-append
+                 (map-in-order
+                  (lambda (part)
+                    (match part
+                      (('NL _)
+                       (begin (incr-line-number!)
+                              "\n"))
+                      (else part)))
+                  parts))
+          (car remaining))
+       (lambda ()
+         (read))))
+    (('token exp)
+     (with-input-from-string exp
+       (lambda ()
+         (read))))
+    (else #f)))
+
+(define (complex-marked-list->po-entries parse-tree)
+  "Checks if PARSE-TREE is marked by a keyword.  If yes, for a complex
+keyword spec, returns a list of po-entries for it.  For a simple
+keyword spec, returns the argument number of its singular form.
+Otherwise returns #f."
+  (let* ((first (nth-exp parse-tree 0))
+         (spec (matching-keyword (token->string-symbol-or-keyw first))))
+    (if spec
+        (if ;if the identifier of a complex keyword occurs first
+         (complex-keyword-spec? spec)
+         ;; then make po entries for it
+         (match spec
+           (($ <keyword-spec> id sg pl c total xcomment)
+            (if (eq? c 'mixed) ; if msgctxt and singular msgid are in one string
+                (let* ((exp (nth-exp parse-tree sg))
+                       (val (token->string-symbol-or-keyw exp))
+                       (idx (if (string? val) (string-rindex val #\|))))
+                  (list
+                   (let ((po (make-po-entry
+                              (%ecomments-string)
+                              (current-ref)
+                              #f ;TODO: Use scheme-format for format strings?
+                              (string-take val idx)
+                              (string-drop val (1+ idx))
+                              #f))) ;plural forms are unsupported here
+                     (update-ecomments-string! #f)
+                     po)))
+                ;; else construct msgids
+                (receive (pl-id pl-entries)
+                    (match pl
+                      (#f (values #f '()))
+                      (else (construct-msgid-and-po-entries
+                             (nth-exp parse-tree pl))))
+                  (receive (sg-id sg-entries)
+                      (construct-msgid-and-po-entries
+                       (nth-exp parse-tree sg))
+                    (cons
+                     (let ((po (make-po-entry
+                                (%ecomments-string)
+                                (current-ref)
+                                #f ;TODO: Use scheme-format for format strings?
+                                (and c (token->string-symbol-or-keyw
+                                        (nth-exp parse-tree c)))
+                                sg-id
+                                pl-id)))
+                       (update-ecomments-string! #f)
+                       po)
+                     (append sg-entries pl-entries)))))))
+         ;; else if it is a simple keyword, return the argnum:
+         (keyword-spec-sg spec))
+        ;; if no keyword occurs, then false
+        #f)))
+
+(define (construct-po-entries parse-tree)
+  "Converts a PARSE-TREE resulting from a call to parse-scheme-file to
+a list of po-entry records.  Unlike construct-msgid-and-po-entries,
+strings are not collected to a msgid.  The list of po-entry records is
+the return value."
+  (let ((entries (complex-marked-list->po-entries parse-tree)))
+    (cond
+     ((list? entries) entries)
+     ((number? entries) ;parse-tree yields a single, simple po entry
+      (update-old-line-number! (%line-number))
+      (receive (id entries)
+          (construct-msgid-and-po-entries
+           (nth-exp parse-tree entries))
+        (update-line-number! (%old-line-number))
+        (let ((po (make-simple-po-entry id)))
+          (incr-line-number-for-each-nl! parse-tree)
+          (cons po entries))))
+     (else ;search for marked translations in parse-tree
+      (match parse-tree
+        (() '())
+        (('comment str) (begin
+                          (update-ecomments-string! str)
+                          '()))
+        (('NL _) (begin (incr-line-number!) '()))
+        (('token . _) (begin (incr-line-number-for-each-nl! parse-tree) '()))
+        (('list open-paren program close-paren)
+         (construct-po-entries program))
+        (('program . components)
+         (append-map construct-po-entries components))
+        ;; Note: PEG compresses empty programs to non-lists:
+        ('program
+         '()))))))
+
+(define* (tag counter prefix #:key (flavor 'start))
+  "Formats the number COUNTER as a tag according to FLAVOR, which is
+either 'start, 'end or 'empty for a start, end or empty tag,
+respectively."
+  (string-append "<"
+                 (if (eq? flavor 'end) "/" "")
+                 prefix
+                 (number->string counter)
+                 (if (eq? flavor 'empty) "/" "")
+                 ">"))
+
+(define-record-type <construct-fold-state>
+  (make-construct-fold-state msgid-string maybe-part counter po-entries)
+  construct-fold-state?
+  ;; msgid constructed so far; #f if none, "" if only empty string:
+  (msgid-string construct-fold-state-msgid-string)
+  ;; only append this if string follows:
+  (maybe-part construct-fold-state-maybe-part)
+  ;; counter for next tag:
+  (counter construct-fold-state-counter)
+  ;; complete po entries from marked sub-expressions:
+  (po-entries construct-fold-state-po-entries))
+
+(define* (construct-msgid-and-po-entries parse-tree
+                                         #:optional
+                                         (prefix ""))
+  "Like construct-po-entries, but with two return values.  The first
+is an accumulated msgid constructed from all components in PARSE-TREE
+for use in make-po-entry.  Non-strings are replaced by tags containing
+PREFIX.  The second return value is a list of po entries for
+sub-expressions marked with a complex keyword spec."
+  (match parse-tree
+    (() (values "" '()))
+    ;; Note: PEG compresses empty programs to non-lists:
+    ('program (values "" '()))
+    (('comment str) (begin
+                      (update-ecomments-string! str)
+                      (values "" '())))
+    (('NL _) (begin (incr-line-number!)
+                    (error "Program consists only of line break."
+                           `(,(%file-name) ,(%line-number)))))
+    (('token . _)
+     (let ((maybe-string (token->string-symbol-or-keyw parse-tree)))
+       (if (string? maybe-string)
+           (values maybe-string '())
+           (error "Single symbol marked for translation."
+                  `(,maybe-string ,(%file-name) ,(%line-number))))))
+    (('list open-paren program close-paren)
+     ;; parse program instead
+     (construct-msgid-and-po-entries program prefix))
+    (('program (? matching-keyword))
+     (error "Double-marked for translation."
+            `(,parse-tree ,(%file-name) ,(%line-number))))
+    (('program . components)
+     ;; Concatenate strings in parse-tree to a new msgid and add an
+     ;; <x> tag for each list in between.
+     (match
+         (fold
+          (lambda (component prev-state)
+            (match prev-state
+              (($ <construct-fold-state> msgid-string maybe-part
+                  counter po-entries)
+               (match component
+                 (('comment str) (begin (update-ecomments-string! str)
+                                        prev-state))
+                 (('NL _) (begin (incr-line-number!)
+                                 prev-state))
+                 (('token . _)
+                  (let ((maybe-string (token->string-symbol-or-keyw component)))
+                    (cond
+                     ((string? maybe-string)
+                      ;; if string, append maybe-string to previous msgid
+                      (make-construct-fold-state
+                       (string-append (or msgid-string "")
+                                      maybe-part maybe-string)
+                       ""
+                       counter
+                       po-entries))
+                     ((and (more-than-one-exp? components) ;not the only symbol
+                           (or (not msgid-string) ;no string so far
+                               (string-suffix? ">" msgid-string))) ;tag before
+                      prev-state) ;then ignore
+                     (else ;append tag representing the token
+                      (make-construct-fold-state
+                       msgid-string
+                       (string-append
+                        maybe-part
+                        (tag counter prefix #:flavor 'empty))
+                       (1+ counter)
+                       po-entries)))))
+                 (('list open-paren program close-paren)
+                  (let ((first (nth-exp program 0)))
+                    (incr-line-number-for-each-nl! list)
+                    (match (complex-marked-list->po-entries program)
+                      ((? list? result)
+                       (make-construct-fold-state
+                        msgid-string
+                        (string-append
+                         maybe-part
+                         (tag counter prefix #:flavor 'empty))
+                        (1+ counter)
+                        (append result po-entries)))
+                      (result
+                       (cond
+                        ((number? result)
+                         (receive (id entries)
+                             (construct-msgid-and-po-entries
+                              (nth-exp program result)
+                              (string-append prefix
+                                             (number->string counter)
+                                             "."))
+                           (make-construct-fold-state
+                            (string-append (or msgid-string "")
+                                           maybe-part
+                                           (tag counter prefix
+                                                #:flavor 'start)
+                                           id
+                                           (tag counter prefix
+                                                #:flavor 'end))
+                            ""
+                            (1+ counter)
+                            (append entries po-entries))))
+                        ((not (more-than-one-exp? components))
+                         ;; Singletons do not need to be marked.
+                         (receive (id entries)
+                             (construct-msgid-and-po-entries
+                              program
+                              prefix)
+                           (make-construct-fold-state
+                            id
+                            ""
+                            counter
+                            (append entries po-entries))))
+                        (else ;unmarked list
+                         (if (not msgid-string)
+                             ;; then ignore
+                             prev-state
+                             ;; else:
+                             (make-construct-fold-state
+                              msgid-string
+                              (string-append
+                               maybe-part
+                               (tag counter prefix #:flavor 'empty))
+                              (1+ counter)
+                              po-entries))))))))))))
+          (make-construct-fold-state #f "" 1 '())
+          components)
+       (($ <construct-fold-state> msgid-string maybe-part counter po-entries)
+        (values (or msgid-string
+                    (error "Marking for translation yields empty msgid."
+                           %file-name %line-number))
+                po-entries))))))
+
+(define scheme-file->po-entries
+  (compose construct-po-entries
+           parse-scheme-file))
+
+(define %files-from-port
+  (let ((files-from (option-ref %options 'files #f)))
+    (if files-from
+        (open-input-file files-from)
+        (current-input-port))))
+
+(define %source-files
+  (let loop ((line (get-line %files-from-port))
+             (source-files '()))
+    (if (eof-object? line)
+        (begin
+          (close-port %files-from-port)
+          source-files)
+        ;; else read file names before comment
+        (let ((before-comment (car (string-split line #\#))))
+          (loop (get-line %files-from-port)
+                (append
+                 (map match:substring (list-matches "[^ \t]+" before-comment))
+                 source-files))))))
+
+(define %output-po-entries
+  (fold (lambda (scheme-file po-entries)
+          (begin
+            (update-file-name! scheme-file)
+            (update-line-number! 1)
+            (update-old-line-number! #f)
+            (%comments-line #f)
+            (append (scheme-file->po-entries scheme-file)
+                    po-entries)))
+        '()
+        %source-files))
+
+(define %output-port
+  (let ((output (option-ref %options 'output #f))
+        (domain (option-ref %options 'default-domain #f)))
+    (cond
+     (output (open-output-file output))
+     (domain (open-output-file (string-append domain ".po")))
+     (else (open-output-file "messages.po")))))
+
+(with-output-to-port %output-port
+  (lambda ()
+    (let ((copyright (option-ref %options 'copyright-holder
+                                 "THE PACKAGE'S COPYRIGHT HOLDER"))
+          (package (option-ref %options 'package-name "PACKAGE"))
+          (version (option-ref %options 'package-version #f))
+          (bugs-email (option-ref %options 'msgid-bugs-address "")))
+      (display "# SOME DESCRIPTIVE TITLE.\n")
+      (display (string-append "# Copyright (C) YEAR " copyright "\n"))
+      (display (string-append "# This file is distributed under the same \
+license as the " package " package.\n"))
+      (display "# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n")
+      (display "#\n")
+      (write-po-entry (make-po-entry #f #f '("fuzzy") #f "" #f))
+      (display (string-append "\"Project-Id-Version: "
+                              package
+                              (if version
+                                  (string-append " " version)
+                                  "")
+                              "\\n\"\n"))
+      (display (string-append "\"Report-Msgid-Bugs-To: "
+                              bugs-email
+                              "\\n\"\n"))
+      (display (string-append "\"POT-Creation-Date: "
+                              (date->string (current-date) "~1 ~H:~M~z")
+                              "\\n\"\n"))
+      (display "\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n")
+      (display "\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\"\n")
+      (display "\"Language-Team: LANGUAGE <LL@HIDDEN>\\n\"\n")
+      (display "\"Language: \\n\"\n")
+      (display "\"MIME-Version: 1.0\\n\"\n")
+      (display "\"Content-Type: text/plain; charset=UTF-8\\n\"\n")
+      (display "\"Content-Transfer-Encoding: 8bit\\n\"\n")
+      (for-each (lambda (po-entry)
+                  (begin
+                    (newline)
+                    (write-po-entry po-entry)))
+                (combine-duplicate-po-entries %output-po-entries)))))
diff --git a/website/sexp-xgettext.scm b/website/sexp-xgettext.scm
new file mode 100644
index 0000000..2b7abfc
--- /dev/null
+++ b/website/sexp-xgettext.scm
@@ -0,0 +1,530 @@
+;;; GNU Guix web site
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
+;;;
+;;; This file is part of the GNU Guix web site.
+;;;
+;;; The GNU Guix web site is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU Affero General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; The GNU Guix web site 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 Affero General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Affero General Public License
+;;; along with the GNU Guix web site.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (sexp-xgettext)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 peg)
+  #:use-module (ice-9 rdelim)
+  #:use-module (ice-9 receive)
+  #:use-module (ice-9 regex)
+  #:use-module (srfi srfi-1) ;lists
+  #:use-module (srfi srfi-9) ;records
+  #:export (set-complex-keywords!
+            set-simple-keywords!
+            sgettext
+            sngettext
+            spgettext
+            snpgettext
+            %linguas))
+
+(define %complex-keywords
+  ;; Use set-complex-keywords! to change this to a list of keywords
+  ;; for sexp-xgettext functions other than sgettext.
+  (make-parameter '()))
+
+(define (set-complex-keywords! kw)
+  (%complex-keywords kw))
+
+(define %simple-keywords
+  ;; Use set-simple-keywords! to change this to a list of keywords
+  ;; for sgettext.
+  (make-parameter '()))
+
+(define (set-simple-keywords! kw)
+  (%simple-keywords kw))
+
+(define (gettext-keyword? id)
+  (or (member id (%complex-keywords))
+      (member id (%simple-keywords))))
+
+;;COPIED FROM scripts/sexp-xgettext.scm:
+(define* (tag counter prefix #:key (flavor 'start))
+  "Formats the number COUNTER as a tag according to FLAVOR, which is
+either 'start, 'end or 'empty for a start, end or empty tag,
+respectively."
+  (string-append "<"
+                 (if (eq? flavor 'end) "/" "")
+                 prefix
+                 (number->string counter)
+                 (if (eq? flavor 'empty) "/" "")
+                 ">"))
+;;END COPIED FROM scripts/sexp-xgettext.scm
+
+;;ADAPTED FROM scripts/sexp-xgettext.scm
+(define-record-type <construct-fold-state>
+  (make-construct-fold-state msgid-string maybe-part counter)
+  construct-fold-state?
+  ;; msgid constructed so far; #f if none, "" if only empty string
+  (msgid-string construct-fold-state-msgid-string)
+  ;; only append this if string follows:
+  (maybe-part construct-fold-state-maybe-part)
+  ;; counter for next tag:
+  (counter construct-fold-state-counter))
+;;END ADAPTED FROM scripts/sexp-xgettext.scm
+
+(define (sexp->msgid exp)
+  "Return the msgid as constructed by construct-msgid-and-po-entries
+in scripts/sexp-xgettext.scm from the expression EXP."
+  (let loop ((exp exp)
+             (prefix ""))
+    (match exp
+      (() "")
+      ((or ('quote inner-exp)
+           ('quasiquote inner-exp)
+           ('unquote inner-exp)
+           ('unquote-splicing inner-exp))
+       (loop inner-exp prefix))
+      ((first-component . components)
+       (cond
+        ((gettext-keyword? first-component)
+         (error "Double-marked for translation." exp))
+        (else
+         (or
+          (construct-fold-state-msgid-string
+           (fold
+            (lambda (component prev-state)
+              (match prev-state
+                (($ <construct-fold-state> msgid-string maybe-part counter)
+                 (let inner-loop ((exp component))
+                   (match exp
+                     ((or (? symbol?) (? keyword?))
+                      (if (not msgid-string)
+                          ;; ignore symbols at the beginning
+                          prev-state
+                          ;; else make a tag for the symbol
+                          (make-construct-fold-state
+                           msgid-string
+                           (string-append maybe-part
+                                          (tag counter prefix #:flavor 'empty))
+                           (1+ counter))))
+                     ((? string?)
+                      (make-construct-fold-state
+                       (string-append (or msgid-string "")
+                                      maybe-part exp)
+                       "" counter))
+                     ((? list?)
+                      (match exp
+                        (() ;ignore empty list
+                         prev-state)
+                        ((or (singleton)
+                             ('quote singleton)
+                             ('quasiquote singleton)
+                             ('unquote singleton)
+                             ('unquote-splicing singleton))
+                         (inner-loop singleton))
+                        ((components ...)
+                         (cond
+                          ((and (not (null? components))
+                                (member (car components) (%simple-keywords)))
+                           ;; if marked for translation, insert inside tag
+                           (make-construct-fold-state
+                            (string-append (or msgid-string "")
+                                           maybe-part
+                                           (tag counter prefix #:flavor 'start)
+                                           (loop (cadr components)
+                                                 (string-append
+                                                  prefix
+                                                  (number->string counter)
+                                                  "."))
+                                           (tag counter prefix #:flavor 'end))
+                            ""
+                            (1+ counter)))
+                          ;; else ignore if first
+                          ((not msgid-string)
+                           prev-state)
+                          ;; else make empty tag
+                          (else (make-construct-fold-state
+                                 msgid-string
+                                 (string-append
+                                  maybe-part
+                                  (tag counter prefix #:flavor 'empty))
+                                 (1+ counter))))))))))))
+            (make-construct-fold-state #f "" 1)
+            exp))
+          (error "Marking for translation yields empty msgid." exp)))))
+      ((? string?) exp)
+      (else (error "Single symbol marked for translation." exp)))))
+
+(define-record-type <deconstruct-fold-state>
+  (make-deconstruct-fold-state tagged maybe-tagged counter)
+  deconstruct-fold-state?
+  ;; XML-tagged expressions as an association list name->expression:
+  (tagged deconstruct-fold-state-tagged)
+  ;; associate this not-yet-tagged expression with pre if string
+  ;; follows, with post if not:
+  (maybe-tagged deconstruct-fold-state-maybe-tagged)
+  ;; counter for next tag:
+  (counter deconstruct-fold-state-counter))
+
+(define (deconstruct exp msgstr)
+  "Return an s-expression like EXP, but filled with the content from
+MSGSTR."
+  (define (find-empty-element msgstr name)
+    "Returns the regex match structure for the empty tag for XML
+element of type NAME inside MSGSTR.  If the element does not exist or
+is more than the empty tag, #f is returned."
+    (string-match (string-append "<" (regexp-quote name) "/>") msgstr))
+  (define (find-element-with-content msgstr name)
+    "Returns the regex match structure for the non-empty XML element
+of type NAME inside MSGSTR.  Submatch 1 is its content.  If the
+element does not exist or is just the empty tag, #f is returned."
+    (string-match (string-append "<" (regexp-quote name) ">"
+                                 "(.*)"
+                                 "</" (regexp-quote name) ">")
+                  msgstr))
+  (define (get-first-element-name prefix msgstr)
+    "Returns the name of the first XML element in MSGSTR whose name
+begins with PREFIX, or #f if there is none."
+    (let ((m (string-match
+              (string-append "<(" (regexp-quote prefix) "[^>/.]+)/?>") msgstr)))
+      (and m (match:substring m 1))))
+  (define (prefix+counter prefix counter)
+    "Returns PREFIX with the number COUNTER appended."
+    (string-append prefix (number->string counter)))
+  (let loop ((exp exp)
+             (msgstr msgstr)
+             (prefix ""))
+    (define (unwrap-marked-expression exp)
+      "Returns two values for an expression EXP containing a (possibly
+quoted/unquoted) marking for translation with a simple keyword at its
+root.  The first return value is a list with the inner expression, the
+second is a procedure to wrap the processed inner expression in the
+same quotes or unquotes again."
+      (match exp
+        (('quote inner-exp)
+         (receive (unwrapped quotation)
+             (unwrap-marked-expression inner-exp)
+           (values unwrapped
+                   (lambda (res)
+                     (list 'quote (quotation res))))))
+        (('quasiquote inner-exp)
+         (receive (unwrapped quotation)
+             (unwrap-marked-expression inner-exp)
+           (values unwrapped
+                   (lambda (res)
+                     (list 'quasiquote (quotation res))))))
+        (('unquote inner-exp)
+         (receive (unwrapped quotation)
+             (unwrap-marked-expression inner-exp)
+           (values unwrapped
+                   (lambda (res)
+                     (list 'unquote (quotation res))))))
+        (('unquote-splicing inner-exp)
+         (receive (unwrapped quotation)
+             (unwrap-marked-expression inner-exp)
+           (values unwrapped
+                   (lambda (res)
+                     (list 'unquote-splicing (quotation res))))))
+        ((marking . rest) ;list with marking as car
+         ;; assume arg to translate is first argument to marking:
+         (values (list-ref rest 0) identity))))
+    (define (assemble-parenthesized-expression prefix tagged)
+      "Returns a parenthesized expression deconstructed from MSGSTR
+with the meaning of XML elements taken from the name->expression
+association list TAGGED.  The special tags [prefix]pre and
+[prefix]post are associated with a list of expressions before or after
+all others in the parenthesized expression with the prefix,
+respectively, in reverse order."
+      (append ;prepend pre elements to what is in msgstr
+       (reverse (or (assoc-ref tagged (string-append prefix "pre")) '()))
+       (let assemble ((rest msgstr))
+         (let ((name (get-first-element-name prefix rest)))
+           (cond
+            ((and name (find-empty-element rest name)) =>
+             ;; first XML element in rest is empty element
+             (lambda (m)
+               (cons*
+                (match:prefix m) ;prepend string before name
+                (assoc-ref tagged name) ;and expression for name
+                (assemble (match:suffix m)))))
+            ((and name (find-element-with-content rest name)) =>
+             ;; first XML element in rest has content
+             (lambda (m)
+               (receive (unwrapped quotation)
+                   (unwrap-marked-expression (assoc-ref tagged name))
+                 (cons*
+                  (match:prefix m) ;prepend string before name
+                  ;; and the deconstructed element with the content as msgstr:
+                  (quotation
+                   (loop
+                    unwrapped
+                    (match:substring m 1)
+                    (string-append name ".")))
+                  (assemble (match:suffix m))))))
+            (else
+             ;; there is no first element
+             (cons
+              rest ;return remaining string
+              (reverse ;and post expressions
+               (or (assoc-ref tagged (string-append prefix "post")) '())))))))))
+    (match exp
+      (() '())
+      (('quote singleton)
+       (cons 'quote (list (loop singleton msgstr prefix))))
+      (('quasiquote singleton)
+       (cons 'quasiquote (list (loop singleton msgstr prefix))))
+      (('unquote singleton)
+       (cons 'unquote (list (loop singleton msgstr prefix))))
+      (('unquote-splicing singleton)
+       (cons 'unquote-splicing (list (loop singleton msgstr prefix))))
+      ((singleton)
+       (list (loop singleton msgstr prefix)))
+      ((first-component . components)
+       (cond
+        ((gettext-keyword? first-component)
+         ;; another marking for translation
+         ;; -> should be an error anyway; just retain exp
+         exp)
+        (else
+         ;; This handles a single level of a parenthesized expression.
+         ;; assemble-parenthesized-expression will call loop to
+         ;; recurse to deeper levels.
+         (let ((tagged-state
+                (fold
+                 (lambda (component prev-state)
+                   (match prev-state
+                     (($ <deconstruct-fold-state> tagged maybe-tagged counter)
+                      (let inner-loop ((exp component) ;sexp to handle
+                                       (quoting identity)) ;for wrapping state
+                        (define (tagged-with-maybes)
+                          "Returns the value of tagged after adding
+all maybe-tagged expressions.  This should be used as the base value
+for tagged when a string or marked expression is seen."
+                          (match counter
+                            (#f
+                             (alist-cons (string-append prefix "pre")
+                                         maybe-tagged
+                                         tagged))
+                            ((? number?)
+                             (let accumulate ((prev-counter counter)
+                                              (maybes (reverse maybe-tagged)))
+                               (match maybes
+                                 (() tagged)
+                                 ((head . tail)
+                                  (alist-cons
+                                   (prefix+counter prefix prev-counter)
+                                   head
+                                   (accumulate (1+ prev-counter) tail))))))))
+                        (define (add-maybe exp)
+                          "Returns a deconstruct-fold-state with EXP
+added to maybe-tagged.  This should be used for expressions that are
+neither strings nor marked for translation with a simple keyword."
+                          (make-deconstruct-fold-state
+                           tagged
+                           (cons (quoting exp) maybe-tagged)
+                           counter))
+                        (define (counter-with-maybes)
+                          "Returns the old counter value incremented
+by one for each expression in maybe-tagged.  This should be used
+together with tagged-with-maybes."
+                          (match counter
+                            ((? number?)
+                             (+ counter (length maybe-tagged)))
+                            (#f
+                             1)))
+                        (define (add-tagged exp)
+                          "Returns a deconstruct-fold-state with an
+added association in tagged from the current counter to EXP.  If
+MAYBE-TAGGED is not empty, associations for its expressions are added
+to pre or their respective counter.  This should be used for
+expressions marked for translation with a simple keyword."
+                          (let ((c (counter-with-maybes)))
+                            (make-deconstruct-fold-state
+                             (alist-cons
+                              (prefix+counter prefix c)
+                              (quoting exp)
+                              (tagged-with-maybes))
+                             '()
+                             (1+ c))))
+                        (match exp
+                          (('quote inner-exp)
+                           (inner-loop inner-exp
+                                       (lambda (res)
+                                         (list 'quote res))))
+                          (('quasiquote inner-exp)
+                           (inner-loop inner-exp
+                                       (lambda (res)
+                                         (list 'quasiquote res))))
+                          (('unquote inner-exp)
+                           (inner-loop inner-exp
+                                       (lambda (res)
+                                         (list 'unquote res))))
+                          (('unquote-splicing inner-exp)
+                           (inner-loop inner-exp
+                                       (lambda (res)
+                                         (list 'unquote-splicing res))))
+                          (((? gettext-keyword?) . rest)
+                           (add-tagged exp))
+                          ((or (? symbol?) (? keyword?) (? list?))
+                           (add-maybe exp))
+                          ((? string?)
+                           ;; elements in maybe-tagged appear between strings
+                           (let ((c (counter-with-maybes)))
+                             (make-deconstruct-fold-state
+                              (tagged-with-maybes)
+                              '()
+                              c))))))))
+                 (make-deconstruct-fold-state '() '() #f)
+                 exp)))
+           (match tagged-state
+             (($ <deconstruct-fold-state> tagged maybe-tagged counter)
+              (assemble-parenthesized-expression
+               prefix
+               (match maybe-tagged
+                 (() tagged)
+                 (else ;associate maybe-tagged with pre or post
+                  (alist-cons
+                   (cond ;if there already is a pre, use post
+                    ((assoc-ref tagged (string-append prefix "pre"))
+                     (string-append prefix "post"))
+                    (else (string-append prefix "pre")))
+                   maybe-tagged
+                   tagged))))))))))
+      ((? string?) msgstr)
+      (else (error "Single symbol marked for translation." exp)))))
+
+;; NOTE: The sgettext macros have no hygiene because they use
+;; datum->syntax and do not preserve the semantics of anything looking
+;; like an sgettext macro.  This is an exceptional use case; do not
+;; try this at home.
+
+(define (sgettext x)
+  "After choosing an identifier for marking s-expressions for
+translation, make it usable by defining a macro with it calling
+sgettext.  If for example the chosen identifier is G_,
+use (define-syntax G_ sgettext)."
+  (syntax-case x ()
+    ((id exp)
+     (let* ((msgid (sexp->msgid (syntax->datum #'exp)))
+            (new-exp (deconstruct (syntax->datum #'exp)
+                                  (gettext msgid))))
+       (datum->syntax #'id new-exp)))))
+
+;; gettext’s share/gettext/gettext.h tells us we can prepend a msgctxt
+;; and #\eot before a msgid in a gettext call.
+
+(define (spgettext x)
+  "After choosing an identifier for behavior similar to pgettext:1c,2,
+make it usable like (define-syntax C_ spgettext)."
+  (syntax-case x ()
+    ((id msgctxt exp)
+     (let* ((gettext-context-glue #\eot) ;as defined in gettext.h
+            (lookup (string-append (syntax->datum #'msgctxt)
+                                   (string gettext-context-glue)
+                                   (sexp->msgid (syntax->datum #'exp))))
+            (msgstr (car (reverse (string-split (gettext lookup)
+                                                gettext-context-glue))))
+            (new-exp (deconstruct (syntax->datum #'exp)
+                                  msgstr)))
+       (datum->syntax #'id new-exp)))))
+
+(define %plural-numbers
+  ;; Hard-coded list of input numbers such that for each language’s
+  ;; plural formula, for each possible output grammatical number,
+  ;; there is an n among %plural-numbers that yields this output
+  ;; (cf. section Plural forms in the gettext manual), except 1 is
+  ;; omitted from this list because it is a special case for
+  ;; sngettext.  That is, calling ngettext with each number from
+  ;; %plural-numbers and with 1 in any locale is guaranteed to return
+  ;; each plural form at least once.  It would be more resilient
+  ;; towards new languages if instead of hard-coding we computed this
+  ;; from the Plural-Forms in the MO file header entry, but that is
+  ;; not worth the incurred code complexity.
+  '(0 2 3 11 100))
+
+(define (sngettext x)
+  "After choosing an identifier for behavior similar to ngettext:1,2,
+make it usable like (define-syntax N_ sngettext).  sngettext takes
+into account that not all languages have only singular and plural
+forms."
+  (syntax-case x ()
+    ((id exp1 exp2 n)
+     (let* ((msgid1 (sexp->msgid (syntax->datum #'exp1)))
+            (msgid2 (sexp->msgid (syntax->datum #'exp2)))
+            (msgstr1 (ngettext msgid1 msgid2 1))
+            (result (acons ;return an association list msgstr->deconstructed
+                     ;; msgstr for n=1:
+                     msgstr1
+                     `(,'unquote ,(deconstruct (syntax->datum #'exp1)
+                                               msgstr1))
+                     ;; other msgstr for n of each plural form:
+                     (map
+                      (lambda (n)
+                        (let ((msgstr (ngettext msgid1 msgid2 n)))
+                          (cons msgstr `(,'unquote
+                                         ,(deconstruct (syntax->datum #'exp2)
+                                                       msgstr)))))
+                      %plural-numbers))))
+       (datum->syntax
+        #'id
+        `(,assoc-ref (,'quasiquote ,result)
+                     (,ngettext ,msgid1 ,msgid2 ,(syntax->datum #'n))))))))
+
+(define (snpgettext x)
+  "After choosing an identifier for behavior similar to npgettext:1c,2,3,
+make it usable like (define-syntax NC_ snpgettext)."
+  (syntax-case x ()
+    ((id msgctxt exp1 exp2 n)
+     (let* ((gettext-context-glue #\eot) ;as defined in gettext.h
+            (msgid1 (string-append (syntax->datum #'msgctxt)
+                                   (string gettext-context-glue)
+                                   (sexp->msgid (syntax->datum #'exp1))))
+            ;; gettext.h implementation shows: msgctxt is only part of msgid1.
+            (msgid2 (sexp->msgid (syntax->datum #'exp2)))
+            (msgstr1 (car
+                      (reverse
+                       (string-split
+                        (ngettext msgid1 msgid2 1)
+                        gettext-context-glue))))
+            (result (acons ;return an association list msgstr->deconstructed
+                     ;; msgstr for n=1:
+                     msgstr1
+                     `(,'unquote ,(deconstruct (syntax->datum #'exp1)
+                                               msgstr1))
+                     ;; other msgstr for n of each plural form:
+                     (map
+                      (lambda (n)
+                        (let ((msgstr (car
+                                       (reverse
+                                        (string-split
+                                         (ngettext msgid1 msgid2 n)
+                                         gettext-context-glue)))))
+                          (cons msgstr `(,'unquote
+                                         ,(deconstruct (syntax->datum #'exp2)
+                                                       msgstr)))))
+                      %plural-numbers))))
+       (datum->syntax
+        #'id
+        `(,assoc-ref (,'quasiquote ,result)
+                     (,car
+                      (,reverse
+                       (,string-split
+                        (,ngettext ,msgid1 ,msgid2 ,(syntax->datum #'n))
+                        ,gettext-context-glue)))))))))
+
+(define %linguas
+  (with-input-from-file "po/LINGUAS"
+    (lambda _
+      (let loop ((line (read-line)))
+        (if (eof-object? line)
+            '()
+            ;; else read linguas before comment
+            (let ((before-comment (car (string-split line #\#))))
+              (append
+               (map match:substring (list-matches "[^ \t]+" before-comment))
+               (loop (read-line)))))))))
-- 
2.23.0


--uvu3qehc3367oshy
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="0005-website-Mark-all-files-in-apps-for-translation.patch"
Content-Transfer-Encoding: 8bit

From e3ddfc769631e8899ba8114f454502c73d8e7691 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@HIDDEN>
Date: Sun, 15 Sep 2019 17:15:48 +0200
Subject: [PATCH 5/8] website: Mark all files in apps for translation.

* website/po/guix-website.pot: New file.
* website/apps/base/utils.scm (manual-url-with-language): New
procedure.
(locale-display-name): New procedure.
(guix-url): Use localized URLs by default.
* website/apps/base/templates/components.scm (manual-href,
manual-link-yellow): New procedures.
(breadcrumbs, contact->shtml, navbar): Mark for translation.
* website/apps/base/data.scm (contact-media, screenshots): Mark for
translation.
* website/apps/base/templates/about.scm (about-t): Mark for
translation.
* website/apps/base/templates/contact.scm (contact-t): Mark for
translation.
* website/apps/base/templates/contribute.scm (contribute-t): Mark for
translation.
* website/apps/base/templates/donate.scm (donate-t): Mark for
translation.
* website/apps/base/templates/graphics.scm (graphics-t): Mark for
translation.
* website/apps/base/templates/help.scm (help-t): Mark for translation.
* website/apps/base/templates/home.scm (home-t): Mark for translation.
* website/apps/base/templates/irc.scm (irc-t): Mark for translation.
* website/apps/base/templates/menu.scm (menu-t): Mark for translation.
* website/apps/base/templates/screenshot.scm (screenshot-t):
Mark for translation.
* website/apps/base/templates/security.scm (security-t): Mark for
translation.
* website/apps/base/templates/theme.scm (theme): Mark for translation.
* website/apps/blog/templates/components.scm (post-preview, sidebar):
Mark for translation.
* website/apps/blog/templates/feed.scm (atom-feed-t): Mark for
translation.
* website/apps/blog/templates/post-list.scm (post-list-t): Mark for
translation.
* website/apps/blog/templates/post.scm (post-t): Mark for translation.
* website/apps/blog/templates/tag.scm (tag-t): Mark for translation.
* website/apps/download/data.scm (home-t): Mark for translation.
* website/apps/download/templates/components.scm (system-downloads):
Mark for translation.
* website/apps/download/templates/download.scm (download-t): Mark for
translation.
* website/apps/packages/templates/components.scm (detailed-package-preview,
letter-selector, sidebar, supported-systems->shtml): Mark for translation.
* website/apps/packages/templates/detailed-index.scm (detailed-index-t):
Mark for translation.
* website/apps/packages/templates/detailed-package-list.scm
(detailed-package-list-t): Mark for translation.
* website/apps/packages/templates/index.scm (index-t): Mark for translation.
* website/apps/packages/templates/package-list.scm (package-list-t):
Mark for translation.
* website/apps/packages/templates/package.scm (package-t): Mark for
translation.
---
 website/apps/base/data.scm                    |  242 ++--
 website/apps/base/templates/about.scm         |  169 ++-
 website/apps/base/templates/components.scm    |  102 +-
 website/apps/base/templates/contact.scm       |   20 +-
 website/apps/base/templates/contribute.scm    |  385 +++---
 website/apps/base/templates/donate.scm        |  397 +++---
 website/apps/base/templates/graphics.scm      |   87 +-
 website/apps/base/templates/help.scm          |  100 +-
 website/apps/base/templates/home.scm          |  245 ++--
 website/apps/base/templates/irc.scm           |   48 +-
 website/apps/base/templates/menu.scm          |   17 +-
 website/apps/base/templates/screenshot.scm    |   14 +-
 website/apps/base/templates/security.scm      |   91 +-
 website/apps/base/templates/theme.scm         |   51 +-
 website/apps/base/utils.scm                   |   49 +-
 website/apps/blog/templates/components.scm    |   16 +-
 website/apps/blog/templates/feed.scm          |    3 +-
 website/apps/blog/templates/post-list.scm     |   23 +-
 website/apps/blog/templates/post.scm          |   14 +-
 website/apps/blog/templates/tag.scm           |   27 +-
 website/apps/download/data.scm                |   46 +-
 .../apps/download/templates/components.scm    |   12 +-
 website/apps/download/templates/download.scm  |   68 +-
 .../apps/packages/templates/components.scm    |   80 +-
 .../packages/templates/detailed-index.scm     |   47 +-
 .../templates/detailed-package-list.scm       |   23 +-
 website/apps/packages/templates/index.scm     |   45 +-
 .../apps/packages/templates/package-list.scm  |   21 +-
 website/apps/packages/templates/package.scm   |   56 +-
 website/po/guix-website.pot                   | 1216 +++++++++++++++++
 30 files changed, 2654 insertions(+), 1060 deletions(-)
 create mode 100644 website/po/guix-website.pot

diff --git a/website/apps/base/data.scm b/website/apps/base/data.scm
index dfe65fe..1a4217c 100644
--- a/website/apps/base/data.scm
+++ b/website/apps/base/data.scm
@@ -1,10 +1,15 @@
 ;;; GNU Guix web site
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;; Initially written by sirgazil who waves all
 ;;; copyright interest on this file.
 
 (define-module (apps base data)
+  #:use-module (apps base templates components)
   #:use-module (apps base types)
   #:use-module (apps base utils)
+  #:use-module (apps i18n)
+  #:use-module (srfi srfi-1)
+  #:use-module (sexp-xgettext)
   #:export (contact-media
 	    screenshots))
 
@@ -17,150 +22,187 @@
   (list
    ;; The first three will be featured in the home page.
    (contact
-    #:name "IRC Channel"
+    #:name (G_ "IRC Channel")
     #:description
-    '(p
-      "Join the " (code "#guix") " channel on the Freenode IRC network to chat
-      with the community about GNU Guix or to get help in
-      real-time.")
+    (G_
+     `(p
+       "Join the " (code "#guix") " channel on the Freenode IRC network to chat
+       with the community about GNU Guix or to get help in
+       real-time."))
     #:url (guix-url "contact/irc/")
     #:log guix-irc-log-url)
 
    (contact
-    #:name "Info Mailing List"
+    #:name (G_ "Info Mailing List")
     #:description
-    '(p "Subscribe to the " (code "info-guix") " low-traffic mailing
+    (G_
+     `(p
+       "Subscribe to the " (code "info-guix") " low-traffic mailing
 list to receive important announcements sent by the project maintainers (in
-English).")
+English)."))
     #:url "https://lists.gnu.org/mailman/listinfo/info-guix"
     #:log "https://lists.gnu.org/archive/html/info-guix")
 
    (contact
-    #:name "Help Mailing List"
+    #:name (G_ "Help Mailing List")
     #:description
-    `(("de"
-       "Melden Sie sich bei der „Help“-Mailingliste an, um per E-Mail
+    ;; Compute an association list from language code to blurb.
+    ;; If possible, look up translated blurbs from the PO file.
+    ;; Fall back to old hard-coded translations.
+    (let ((original '(G_
+                      "Subscribe to the Help mailing list to get support
+from the GNU Guix community via email.  You can post messages in English
+though we also accept other languages."))
+          (lang-code '(C_ "unique lingua code like en or zh-cn" "en")))
+      (sort
+       (delete-duplicates
+        (append
+         (delete ;delete untranslated blurbs other than "en"
+          (cons original lang-code)
+          (map-in-order
+           (lambda (lingua)
+             (begin
+               (setlocale LC_ALL (string-append lingua ".utf8"))
+               (let ((out (list (gettext (string-append
+                                          (cadr lang-code) ;msgctxt
+                                          (string #\eot) ;separates msgctxt
+                                          (caddr lang-code))) ;msgid
+                                (gettext (cadr original)))))
+                 (setlocale LC_ALL "")
+                 (if (string-index (car out) #\eot) ;if untranslated
+                     (list (caddr lang-code) (cadr original)) ;use original
+                     out)))) ;else use what has been looked up via gettext
+           %linguas)
+          (lambda (to-delete b) (and ;delete where text is equal to original
+                                 (string=? (cadar to-delete) (cadr b))
+                                 ;; but language code is different
+                                 (not (string=? (cadddr to-delete) (car b))))))
+         `(("de"
+            "Melden Sie sich bei der „Help“-Mailingliste an, um per E-Mail
 gemeinschaftlichen Rat zu GuixSD und Guix zu bekommen.  Sie können
 Nachrichten auch auf deutsch verfassen.")
-      ("en"
-       "Subscribe to the Help mailing list to get support from the
-GNU Guix community via email.  You can post messages in English though we
-also accept other languages.")
-      ("eo"
-       "Subskribu al la retmesaĝolisto \"Help\" por demandi helpon pri
+           ("eo"
+            "Subskribu al la retmesaĝolisto \"Help\" por demandi helpon pri
 GNU Guix al la grupo.  Vi povas skribi esperantlingve.")
-      ("es"
-       "Suscríbete a la lista de correo electrónico \"Help\" por pedir
+           ("es"
+            "Suscríbete a la lista de correo electrónico \"Help\" por pedir
 ayuda con Guix.  Puedes escribir mensajes en Español.")
-      ("fr"
-       "Abonnez-vous à la liste de diffusion « Help » pour obtenir l'aide
+           ("fr"
+             "Abonnez-vous à la liste de diffusion « Help » pour obtenir l'aide
 de la communauté sur GNU Guix par courrier électronique.  Vous
 pouvez envoyer des messages en français.")
-      ("hu"
-       "Iratkozzon fel a „Help“ levelezőlistára, hogy segítséget kaphasson
+           ("hu"
+            "Iratkozzon fel a „Help“ levelezőlistára, hogy segítséget kaphasson
 e-mailben a GuixSD és a GNU Guix közösségtől. Magyarul is küldhet
 üzeneteket.")
-      ("it"
-       "Iscrivetevi alla mailing list 'Help' per essere aiutati da altri
+           ("it"
+            "Iscrivetevi alla mailing list 'Help' per essere aiutati da altri
 utenti di Guix e GuixSD.  Potete scrivere sulla mailing list anche in
 italiano.")
-      ("ja"
-       "メールでGNU GuixとGuixSDのコミュニティからサポートを受けるには、
+           ("ja"
+            "メールでGNU GuixとGuixSDのコミュニティからサポートを受けるには、
 「Help」のメーリングリストに登録してください。
 メッセージ内容は日本語でも問題ございませんが、多言語でも受け付けております。")
-      ("nb"
-       "Meld deg på diskusjonslisten «Help» for å få råd og tips fra
+           ("nb"
+            "Meld deg på diskusjonslisten «Help» for å få råd og tips fra
 andre GuixSD- og GNU Guix-brukere via e-post.  Du kan legge inn
 meldinger på norsk.")
-      ("nl"
-       "Abonneer je op de discussielijst \"Help\" om hulp te vragen
+           ("nl"
+            "Abonneer je op de discussielijst \"Help\" om hulp te vragen
 van de GuixSD- en GNU Guix-gemeenschap.  Je kunt berichten sturen in
 het Nederlands.")
-      ("ru"
-       "Подпишитесь на список рассылки «Help», чтобы получить помощь от
+           ("ru"
+            "Подпишитесь на список рассылки «Help», чтобы получить помощь от
 сообщества GuixSD и GNU Guix по электронной почте.  Вы можете писать на русском
 языке.")
-      ("zh"
-       "訂閱「Help」郵件群組以電郵從GuixSD及GNU Guix社群取得支援。你可以使用
-正體、繁體中文發送訊息"))
-
+           ("zh"
+            "訂閱「Help」郵件群組以電郵從GuixSD及GNU Guix社群取得支援。你可以使用
+正體、繁體中文發送訊息")))
+        (lambda (a b) (string=? (car a) (car b))))
+       (lambda (a b) (string<? (car a) (car b)))))
     #:url "https://lists.gnu.org/mailman/listinfo/help-guix"
     #:log "https://lists.gnu.org/archive/html/help-guix")
 
    (contact
-    #:name "Bug Reporting"
+    #:name (G_ "Bug Reporting")
     #:description
-    '(p
-      "If you found a bug in Guix, check whether the bug is
-      already in the "
-      (a (@ (href "https://issues.guix.gnu.org"))
-	 "bug database")
-      ". If it is not, please "
-      (a (@ (href "mailto:bug-guix@HIDDEN")) "report it."))
+    (G_
+     `(p
+       "If you found a bug in Guix, check whether the bug is
+       already in the "
+       ,(G_ `(a (@ (href "https://issues.guix.gnu.org"))
+                "bug database"))
+       ". If it is not, please "
+       ,(G_ `(a (@ (href "mailto:bug-guix@HIDDEN")) "report it."))))
     #:url "https://lists.gnu.org/mailman/listinfo/bug-guix"
     #:log "https://issues.guix.gnu.org/")
 
    (contact
-    #:name "Development Mailing List"
+    #:name (G_ "Development Mailing List")
     #:description
-    '(p
-      "Discussion about the development of GNU Guix. "
-      (a (@ (href "https://lists.gnu.org/archive/html/bug-guix/2013-07/msg00039.html"))
-	 " Until July 2013")
-      ", the bug-Guix mailing list filled that role. ")
+    (G_
+     `(p
+       "Discussion about the development of GNU Guix. "
+       ,(G_ `(a (@ (href "https://lists.gnu.org/archive/html/bug-guix/2013-07/msg00039.html"))
+                " Until July 2013"))
+       ", the bug-Guix mailing list filled that role. "))
     #:url "https://lists.gnu.org/mailman/listinfo/guix-devel"
     #:log "https://lists.gnu.org/archive/html/guix-devel")
 
    (contact
-    #:name "Patches Mailing List"
+    #:name (G_ "Patches Mailing List")
     #:description
-    `(p
-      "Submission of patches.  Every message sent to this mailing list
-      leads to a new entry in our "
-      (a (@ (href "https://issues.guix.gnu.org"))
-	 "patch tracking tool")
-      ".  See "
-      (a (@ (href "https://debbugs.gnu.org/Advanced.html")) "this page")
-      " for more information on how to use it; see "
-      (a (@ (href ,(manual-url "Submitting-Patches.html")))
-         "the manual")
-      " for more information on how to submit a patch.  "
-      (a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2017-02/msg00627.html"))
-	 "Until February 2017")
-      ", the guix-devel mailing list filled that role.")
+    (G_
+     `(p
+       "Submission of patches.  Every message sent to this mailing list
+       leads to a new entry in our "
+       ,(G_ `(a (@ (href "https://issues.guix.gnu.org"))
+                "patch tracking tool"))
+       ".  See "
+       ,(G_ `(a (@ (href "https://debbugs.gnu.org/Advanced.html")) "this page"))
+       " for more information on how to use it; see "
+       ,(G_ (manual-href "the manual" (G_ "en") (G_ "Submitting-Patches.html")))
+       " for more information on how to submit a patch.  "
+       ,(G_
+         `(a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2017-02/msg00627.html"))
+             "Until February 2017"))
+       ", the guix-devel mailing list filled that role."))
     #:url "https://lists.gnu.org/mailman/listinfo/guix-patches"
     #:log "https://issues.guix.gnu.org")
 
    (contact
-    #:name "Commits Mailing List"
+    #:name (G_ "Commits Mailing List")
     #:description
-    `(p
-      "Notifications of commits made to the "
-      (a (@ (href ,(guix-url "contribute/"))) "Git repositories")
-      ".")
+    (G_
+     `(p
+       "Notifications of commits made to the "
+       ,(G_ `(a (@ (href ,(guix-url "contribute/"))) "Git repositories"))
+       "."))
     #:url "https://lists.gnu.org/mailman/listinfo/guix-commits"
     #:log "https://lists.gnu.org/archive/html/guix-commits")
 
    (contact
-    #:name "Security Mailing List"
+    #:name (G_ "Security Mailing List")
     #:description
-    `(p
-      "This is a private mailing list that anyone can post to to "
-      (a (@ (href ,(guix-url "security/"))) "report security issues")
-      " in Guix itself or in "
-      "the " (a (@ (href ,(guix-url "packages/"))) "packages")
-      " it provides.  Posting here allows Guix developers to address
-      the problem before it is widely publicized.")
+    (G_
+     `(p
+       "This is a private mailing list that anyone can post to to "
+       ,(G_ `(a (@ (href ,(guix-url "security/"))) "report security issues"))
+       " in Guix itself or in "
+       "the " ,(G_ `(a (@ (href ,(guix-url "packages/"))) "packages"))
+       " it provides.  Posting here allows Guix developers to address
+       the problem before it is widely publicized."))
     #:url "https://lists.gnu.org/mailman/listinfo/guix-security"
     #:log "")
 
    (contact
-    #:name "Sysadmin Mailing List"
+    #:name (G_ "Sysadmin Mailing List")
     #:description
-    '(p
-      "Private mailing list for the "
-      (a (@ (href "https://hydra.gnu.org/")) "build farm")
-      " system administration.")
+    (G_
+     `(p
+       "Private mailing list for the "
+       ,(G_ `(a (@ (href "https://hydra.gnu.org/")) "build farm"))
+       " system administration."))
     #:url "https://lists.gnu.org/mailman/listinfo/guix-sysadmin"
     #:log "")
 
@@ -168,23 +210,23 @@ het Nederlands.")
    ;; Non-Guix lists.
 
    (contact
-    #:name "GNU System Discuss Mailing List"
+    #:name (G_ "GNU System Discuss Mailing List")
     #:description
-    '(p "Discussion about the development of the broader GNU system.")
+    (G_ '(p "Discussion about the development of the broader GNU system."))
     #:url "https://lists.gnu.org/mailman/listinfo/gnu-system-discuss"
     #:log "https://lists.gnu.org/archive/html/gnu-system-discuss/")
 
    (contact
-    #:name "GNU/Linux-libre Mailing List"
+    #:name (G_ "GNU/Linux-libre Mailing List")
     #:description
-    '(p "Workgroup for fully free GNU/Linux distributions.")
+    (G_ '(p "Workgroup for fully free GNU/Linux distributions."))
     #:url "https://lists.nongnu.org/mailman/listinfo/gnu-linux-libre"
     #:log "https://lists.nongnu.org/archive/html/gnu-linux-libre/")
 
    (contact
-    #:name "GNU Info Mailing List"
+    #:name (G_ "GNU Info Mailing List")
     #:description
-    '(p "GNU software announcements.")
+    (G_ '(p "GNU software announcements."))
     #:url "https://lists.gnu.org/mailman/listinfo/info-gnu"
     #:log "https://lists.gnu.org/archive/html/info-gnu/")))
 
@@ -193,36 +235,36 @@ het Nederlands.")
 (define screenshots
   (list
    (screenshot
-    #:title "Graphical log-in"
+    #:title (C_ "screenshot title" "Graphical log-in")
     #:slug "slim"
     #:image (guix-url "static/media/img/gdm-sessions.png")
     #:preview (guix-url "static/media/img/gdm-sessions.mini.png")
-    #:caption "Graphical log-in screen")
+    #:caption (G_ "Graphical log-in screen"))
 
    (screenshot
-    #:title "GNOME"
+    #:title (C_ "screenshot title" "GNOME")
     #:slug "gnome"
     #:image (guix-url "static/media/img/gnome-totem-epiphany.png")
     #:preview (guix-url "static/media/img/gnome-totem-epiphany.mini.png")
-    #:caption "Control your computer with the GNOME desktop environment")
+    #:caption (G_ "Control your computer with the GNOME desktop environment"))
 
    (screenshot
-    #:title "Xfce"
+    #:title (C_ "screenshot title" "Xfce")
     #:slug "xfce"
     #:image (guix-url "static/media/img/guixsd-xfce-icecat-emacs.png")
     #:preview (guix-url "static/media/img/guixsd-xfce-icecat-emacs.mini.png")
-    #:caption "The Xfce desktop environment with GNU Emacs and IceCat")
+    #:caption (G_ "The Xfce desktop environment with GNU Emacs and IceCat"))
 
    (screenshot
-    #:title "Virtual machine"
+    #:title (C_ "screenshot title" "Virtual machine")
     #:slug "virtual-machine"
     #:image (guix-url "static/media/img/guix-system-vm.png")
     #:preview (guix-url "static/media/img/guix-system-vm.mini.png")
-    #:caption "Virtual machine started with 'guix system vm'")
+    #:caption (G_ "Virtual machine started with 'guix system vm'"))
 
    (screenshot
-    #:title "Enlightenment"
+    #:title (C_ "screenshot title" "Enlightenment")
     #:slug "enlightenment"
     #:image (guix-url "static/media/img/enlightenment-inkscape.png")
     #:preview (guix-url "static/media/img/enlightenment-inkscape.mini.png")
-    #:caption "Enlightenment, Inkscape, and Serbian text")))
+    #:caption (G_ "Enlightenment, Inkscape, and Serbian text"))))
diff --git a/website/apps/base/templates/about.scm b/website/apps/base/templates/about.scm
index a654e2f..ab81cb2 100644
--- a/website/apps/base/templates/about.scm
+++ b/website/apps/base/templates/about.scm
@@ -3,105 +3,124 @@
 ;;; copyright interest on this file.
 
 (define-module (apps base templates about)
+  #:use-module (apps base templates components)
   #:use-module (apps base templates theme)
   #:use-module (apps base types)
   #:use-module (apps base utils)
+  #:use-module (apps i18n)
   #:export (about-t))
 
 
 (define (about-t)
   "Return the About page in SHTML."
   (theme
-   #:title '("About")
+   #:title (C_ "webpage title" '("About"))
    #:description
-   "Guix is an advanced distribution of the GNU operating system.
-    Guix is technology that respects the freedom of computer users.
-    You are free to run the system for any purpose, study how it
-    works, improve it, and share it with the whole world."
+   (G_ "Guix is an advanced distribution of the GNU operating system.
+   Guix is technology that respects the freedom of computer users.
+   You are free to run the system for any purpose, study how it
+   works, improve it, and share it with the whole world.")
    #:keywords
-   (list "GNU" "Linux" "Unix" "Free software" "Libre software"
-	 "Operating system" "GNU Hurd" "GNU Guix package manager")
-   #:active-menu-item "About"
+   (string-split ;TRANSLATORS: |-separated list of webpage keywords
+    (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \
+system|GNU Hurd|GNU Guix package manager") #\|)
+   #:active-menu-item (C_ "website menu" "About")
    #:css (list
 	  (guix-url "static/base/css/page.css"))
-   #:crumbs (list (crumb "About" "./"))
+   #:crumbs (list (crumb (C_ "website menu" "About") "./"))
    #:content
    `(main
      (section
       (@ (class "page centered-block limit-width"))
-      (h2 "About the Project")
+      ,(G_ `(h2 "About the Project"))
 
-      (p
-       "The " (em "GNU Guix") " package and system manager is a "
-       (a (@ (href ,(gnu-url "philosophy/free-sw.html")))
-	  "free software")
-       " project developed by volunteers around the world under the
-       umbrella of the " (a (@ (href ,(gnu-url))) "GNU Project") ". ")
+      ,(G_
+        `(p
+          "The " ,(G_ `(em "GNU Guix")) " package and system manager is a "
+          ,(G_ `(a (@ (href ,(gnu-url "philosophy/free-sw.html")))
+                   "free software"))
+          " project developed by volunteers around the world under the
+            umbrella of the "
+          ,(G_ `(a (@ (href ,(gnu-url))) "GNU Project")) ". "))
 
-      (p
-       "Guix System is an advanced distribution of the "
-       (a (@ (href ,(gnu-url))) "GNU operating system")
-       ".  It uses the "
-       (a (@ (href ,(gnu-url "software/linux-libre"))) "Linux-libre")
-       " kernel, and support for "
-       (a (@ (href ,(gnu-url "software/hurd"))) "the Hurd")
-       " is being worked on.  As a GNU distribution, it is committed
-       to respecting and enhancing "
-       (a (@ (href ,(gnu-url "philosophy/free-sw.html")))
-	  "the freedom of its users")
-       ".  As such, it adheres to the "
-       (a (@ (href ,(gnu-url "distros/free-system-distribution-guidelines.html")))
-	  "GNU Free System Distribution Guidelines") ".")
+      ,(G_
+        `(p
+          "Guix System is an advanced distribution of the "
+          ,(G_ `(a (@ (href ,(gnu-url))) "GNU operating system"))
+          ".  It uses the "
+          ,(G_ `(a (@ (href ,(gnu-url "software/linux-libre"))) "Linux-libre"))
+          " kernel, and support for "
+          ,(G_ `(a (@ (href ,(gnu-url "software/hurd"))) "the Hurd"))
+          " is being worked on.  As a GNU distribution, it is committed
+            to respecting and enhancing "
+          ,(G_ `(a (@ (href ,(gnu-url "philosophy/free-sw.html")))
+                   "the freedom of its users"))
+          ".  As such, it adheres to the "
+          ,(G_ `(a (@ (href ,(gnu-url "distros/free-system-distribution-guidelines.html")))
+                   "GNU Free System Distribution Guidelines")) "."))
 
-      (p
-       "GNU Guix provides "
-       (a (@ (href ,(manual-url "Features.html")))
-	  "state-of-the-art package management features")
-       " such as transactional upgrades and roll-backs, reproducible
-       build environments, unprivileged package management, and
-       per-user profiles.  It uses low-level mechanisms from the "
-       (a (@ (href "https://nixos.org/nix/")) "Nix")
-       " package manager, but packages are "
-       (a (@ (href ,(manual-url "Defining-Packages.html"))) "defined")
-       " as native "
-       (a (@ (href ,(gnu-url "software/guile"))) "Guile")
-       " modules, using extensions to the "
-       (a (@ (href "http://schemers.org")) "Scheme")
-       " language—which makes it nicely hackable.")
+      ;; TRANSLATORS: Features and Defining Packages are section names
+      ;; in the English (en) manual.
+      ,(G_
+        `(p
+          "GNU Guix provides "
+          ,(G_ (manual-href "state-of-the-art package management features"
+                            (G_ "en")
+                            (G_ "Features.html")))
+          " such as transactional upgrades and roll-backs, reproducible
+            build environments, unprivileged package management, and
+            per-user profiles.  It uses low-level mechanisms from the "
+          ,(G_ `(a (@ (href "https://nixos.org/nix/")) "Nix"))
+          " package manager, but packages are "
+          ,(G_ (manual-href "defined" (G_ "en") (G_ "Defining-Packages.html")))
+          " as native "
+          ,(G_ `(a (@ (href ,(gnu-url "software/guile"))) "Guile"))
+          " modules, using extensions to the "
+          ,(G_ `(a (@ (href "http://schemers.org")) "Scheme"))
+          " language—which makes it nicely hackable."))
 
-      (p
-       "Guix takes that a step further by additionally supporting stateless,
-       reproducible "
-       (a (@ (href ,(manual-url "Using-the-Configuration-System.html")))
-	  "operating system configurations")
-       ". This time the whole system is hackable in Scheme, from the "
-       (a (@ (href ,(manual-url "Initial-RAM-Disk.html")))
-	  "initial RAM disk")
-       " to the "
-       (a (@ (href ,(gnu-url "software/shepherd")))
-	  "initialization system")
-       ", and to the "
-       (a (@ (href ,(manual-url "Defining-Services.html")))
-	  "system services")
-       ".")
+      ;; TRANSLATORS: Using the Configuration System, Initial RAM Disk
+      ;; and Defining Services are section names in the English (en)
+      ;; manual.
+      ,(G_
+        `(p
+          "Guix takes that a step further by additionally supporting stateless,
+           reproducible "
+          ,(G_ (manual-href "operating system configurations"
+                            (G_ "en")
+                            (G_ "Using-the-Configuration-System.html")))
+          ". This time the whole system is hackable in Scheme, from the "
+          ,(G_ (manual-href "initial RAM disk"
+                            (G_ "en")
+                            (G_ "Initial-RAM-Disk.html")))
+          " to the "
+          ,(G_ `(a (@ (href ,(gnu-url "software/shepherd")))
+                   "initialization system"))
+          ", and to the "
+          ,(G_ (manual-href "system services"
+                            (G_ "en")
+                            (G_ "Defining-Services.html")))
+          "."))
 
 
-      (h3 (@ (id "mantainer")) "Maintainer")
+      ,(G_ `(h3 (@ (id "mantainer")) "Maintainer"))
 
-      (p
-       "Guix is currently maintained by Ludovic Courtès and Ricardo
-       Wurmus.  Please use the "
-       (a (@ (href ,(guix-url "contact/"))) "mailing lists")
-       " for contact. ")
+      ,(G_
+        `(p
+          "Guix is currently maintained by Ludovic Courtès and Ricardo
+          Wurmus.  Please use the "
+          ,(G_ `(a (@ (href ,(guix-url "contact/"))) "mailing lists"))
+          " for contact. "))
 
 
-      (h3 (@ (id "license")) "Licensing")
+      ,(G_ `(h3 (@ (id "license")) "Licensing"))
 
-      (p
-       "Guix is free software; you can redistribute it and/or modify
-       it under the terms of the "
-       (a (@ (rel "license") (href ,(gnu-url "licenses/gpl.html")))
-	  "GNU General Public License")
-       " as published by the Free Software Foundation; either
-       version\xa03 of the License, or (at your option) any later
-       version. ")))))
+      ,(G_
+        `(p
+          "Guix is free software; you can redistribute it and/or modify
+          it under the terms of the "
+          ,(G_ `(a (@ (rel "license") (href ,(gnu-url "licenses/gpl.html")))
+                   "GNU General Public License"))
+          " as published by the Free Software Foundation; either
+          version\xa03 of the License, or (at your option) any later
+          version. "))))))
diff --git a/website/apps/base/templates/components.scm b/website/apps/base/templates/components.scm
index d3f6af1..6b5ec21 100644
--- a/website/apps/base/templates/components.scm
+++ b/website/apps/base/templates/components.scm
@@ -1,4 +1,5 @@
 ;;; GNU Guix web site
+;;; Copyright © 2019 Florian Pelz <pelzflorian@HIDDEN>
 ;;; Initially written by sirgazil who waves all
 ;;; copyright interest on this file.
 
@@ -12,6 +13,7 @@
   #:use-module (apps aux web)
   #:use-module (apps base types)
   #:use-module (apps base utils)
+  #:use-module (apps i18n)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (breadcrumbs
@@ -23,6 +25,8 @@
 	    link-more
 	    link-subtle
 	    link-yellow
+            manual-href
+            manual-link-yellow
 	    navbar
 	    page-indicator
 	    page-selector
@@ -41,9 +45,9 @@
      (apps base types)."
   `(nav
     (@ (class "breadcrumbs"))
-    (h2 (@ (class "a11y-offset")) "Your location:")
+    ,(G_ `(h2 (@ (class "a11y-offset")) "Your location:"))
 
-    (a (@ (class "crumb") (href ,(guix-url))) "Home") (span " → ")
+    ,(G_ `(a (@ (class "crumb") (href ,(guix-url))) "Home")) (span " → ")
     ,@(separate (crumbs->shtml crumbs) '(span " → "))))
 
 
@@ -121,8 +125,9 @@
        (sxml->string*
         (match (contact-description contact)
           ((and multilingual (((? string?) (? string?)) ...))
-           (match (assoc "en" multilingual)
-             (("en" blurb) blurb)))
+           (let ((code %current-lang))
+             (match (assoc code multilingual)
+               ((code blurb) blurb))))
           (blurb
            blurb)))
        30)
@@ -145,7 +150,7 @@
     ,(if (string=? (contact-log contact) "")
 	 ""
 	 `(small
-	   " (" (a (@ (href ,(contact-log contact))) "archive") ") "))
+	   " (" ,(G_ `(a (@ (href ,(contact-log contact))) "archive")) ") "))
 
     ;; The description can be a list of language/blurb pairs.
     ,(match (contact-description contact)
@@ -216,6 +221,51 @@
   `(a (@ (class "link-yellow") (href ,url)) ,label))
 
 
+
+
+(define (manual-href label manual-lang _1 subpath _2)
+  "Return an HTML a element with its href attribute pointing to the
+manual.  It can be marked for translation as:
+
+  (G_ (manual-href \"some-text\" (G_ \"en\") (G_ \"Some-section.html\")))
+
+   LABEL (string)
+     The content of the a element.
+
+   MANUAL-LANG (string)
+     The normalized language for the Guix manual as produced by
+'doc/build.scm' in the Guix source tree, i.e. \"en\" for the English
+manual.
+
+   SUBPATH (string)
+     The same as in the manual-url procedure."
+  ;; The _ arguments are placeholders for args added by G_, cf. i18n-howto.txt.
+  `(a (@ (href ,(manual-url subpath #:language manual-lang))) label))
+
+(define* (manual-link-yellow label manual-lang _1 #:optional (subpath "") _2)
+  "Return a link-yellow component pointing to the manual.  It can be
+used like this:
+
+  (manual-link-yellow \"some-text\" (G_ \"en\") \"Package-Management.html\")
+
+   LABEL (string)
+     The label of the link-yellow.
+
+   MANUAL-LANG (string)
+     The normalized language for the Guix manual as produced by
+'doc/build.scm' in the Guix source tree, i.e. \"en\" for the English
+manual.
+
+   SUBPATH (string)
+     The same as in the manual-url procedure."
+  ;; The _ arguments are placeholders for args added by G_, cf. i18n-howto.txt.
+  (link-yellow
+   #:label label
+   #:url (manual-url subpath #:language manual-lang)))
+
+
+
+
 (define* (menu-dropdown #:key (label "Item") (active-item "") (url "#") (items '()))
   "Return an SHTML li element representing a dropdown for the navbar.
 
@@ -284,26 +334,26 @@
     (h1
      (a
       (@ (class "branding") (href ,(guix-url)))
-      (span (@ (class "a11y-offset")) "Guix")))
+      ,(C_ "website menu" `(span (@ (class "a11y-offset")) "Guix"))))
 
     ;; Menu.
     (nav (@ (class "menu"))
-     (h2 (@ (class "a11y-offset")) "Website menu:")
+         ,(G_ `(h2 (@ (class "a11y-offset")) "website menu:"))
      (ul
-      ,(menu-item #:label "Overview" #:active-item active-item #:url (guix-url))
-      ,(menu-item #:label "Download" #:active-item active-item #:url (guix-url "download/"))
-      ,(menu-item #:label "Packages" #:active-item active-item #:url (guix-url "packages/"))
-      ,(menu-item #:label "Blog" #:active-item active-item #:url (guix-url "blog/"))
-      ,(menu-item #:label "Help" #:active-item active-item #:url (guix-url "help/"))
-      ,(menu-item #:label "Donate" #:active-item active-item #:url (guix-url "donate/"))
-
-      ,(menu-dropdown #:label "About" #:active-item active-item #:url (guix-url "about/")
+      ,(C_ "website menu" (menu-item #:label "Overview" #:active-item active-item #:url (guix-url)))
+      ,(C_ "website menu" (menu-item #:label "Download" #:active-item active-item #:url (guix-url "download/")))
+      ,(C_ "website menu" (menu-item #:label "Packages" #:active-item active-item #:url (guix-url "packages/")))
+      ,(C_ "website menu" (menu-item #:label "Blog" #:active-item active-item #:url (guix-url "blog/")))
+      ,(C_ "website menu" (menu-item #:label "Help" #:active-item active-item #:url (guix-url "help/")))
+      ,(C_ "website menu" (menu-item #:label "Donate" #:active-item active-item #:url (guix-url "donate/")))
+
+      ,(menu-dropdown #:label (C_ "website menu" "About") #:active-item active-item #:url (guix-url "about/")
 	#:items
-	(list
-	 (menu-item #:label "Contact" #:active-item active-item #:url (guix-url "contact/"))
-	 (menu-item #:label "Contribute" #:active-item active-item #:url (guix-url "contribute/"))
-	 (menu-item #:label "Security" #:active-item active-item #:url (guix-url "security/"))
-	 (menu-item #:label "Graphics" #:active-item active-item #:url (guix-url "graphics/"))))))
+        (list
+         (C_ "website menu" (menu-item #:label "Contact" #:active-item active-item #:url (guix-url "contact/")))
+         (C_ "website menu" (menu-item #:label "Contribute" #:active-item active-item #:url (guix-url "contribute/")))
+         (C_ "website menu" (menu-item #:label "Security" #:active-item active-item #:url (guix-url "security/")))
+         (C_ "website menu" (menu-item #:label "Graphics" #:active-item active-item #:url (guix-url "graphics/")))))))
 
     ;; Menu button.
     (a
@@ -321,10 +371,10 @@
    TOTAL-PAGES (number)
      The total number of pages that should be displayed."
   (if (> total-pages 1)
-      `(span
-	(@ (class "page-number-indicator"))
-	" (Page " ,(number->string page-number)
-	" of " ,(number->string total-pages) ")")
+      (G_ `(span
+            (@ (class "page-number-indicator"))
+            " (Page " ,(number->string page-number)
+            " of " ,(number->string total-pages) ")"))
       ""))
 
 
@@ -345,8 +395,8 @@
     (@ (class "page-selector"))
     (h3
      (@ (class "a11y-offset"))
-     ,(string-append "Page " (number->string active-page) " of "
-		     (number->string pages) ". Go to another page: "))
+     ,(G_ (string-append "Page " (number->string active-page) " of "
+                         (number->string pages) ". Go to another page: ")))
     ,(if (> pages 1)
 	 (map
 	  (lambda (page-number)
diff --git a/website/apps/base/templates/contact.scm b/website/apps/base/templates/contact.scm
index d4ee2f2..44dbabb 100644
--- a/website/apps/base/templates/contact.scm
+++ b/website/apps/base/templates/contact.scm
@@ -7,31 +7,33 @@
   #:use-module (apps base templates theme)
   #:use-module (apps base types)
   #:use-module (apps base utils)
+  #:use-module (apps i18n)
   #:export (contact-t))
 
 
 (define (contact-t context)
   "Return the Contact page in SHTML with the data in CONTEXT."
   (theme
-   #:title '("Contact")
+   #:title (C_ "webpage title" '("Contact"))
    #:description
-   "A list of channels to communicate with GNU Guix users
-   and developers about anything you want."
+   (G_ "A list of channels to communicate with GNU Guix users
+   and developers about anything you want.")
    #:keywords
-   '("GNU" "Linux" "Unix" "Free software" "Libre software"
-     "Operating system" "GNU Hurd" "GNU Guix package manager"
-     "Community" "Mailing lists" "IRC channels" "Bug reports" "Help")
-   #:active-menu-item "About"
+   (string-split ;TRANSLATORS: |-separated list of webpage keywords
+    (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \
+system|GNU Hurd|GNU Guix package manager|Community|Mailing lists|IRC \
+channels|Bug reports|Help") #\|)
+   #:active-menu-item (C_ "website menu" "About")
    #:css (list
 	  (guix-url "static/base/css/page.css")
           (guix-url "static/base/css/buttons.css")
 	  (guix-url "static/base/css/contact.css"))
-   #:crumbs (list (crumb "Contact" "./"))
+   #:crumbs (list (crumb (C_ "website menu" "Contact") "./"))
    #:content
    `(main
      (section
       (@ (class "page centered-block limit-width"))
-      (h2 "Contact")
+      ,(G_ `(h2 "Contact"))
 
       ,@(map
 	 contact->shtml
diff --git a/website/apps/base/templates/contribute.scm b/website/apps/base/templates/contribute.scm
index 4d68e87..ff12815 100644
--- a/website/apps/base/templates/contribute.scm
+++ b/website/apps/base/templates/contribute.scm
@@ -7,248 +7,289 @@
   #:use-module (apps base templates theme)
   #:use-module (apps base types)
   #:use-module (apps base utils)
+  #:use-module (apps i18n)
   #:export (contribute-t))
 
 
 (define (contribute-t)
   "Return the Contribute page in SHTML."
   (theme
-   #:title '("Contribute")
+   #:title (C_ "webpage title" '("Contribute"))
    #:description
-   "Check all the ways you can contribute to make GNU Guix
-   better, and join the world-wide community of volunteers."
+   (G_ "Check all the ways you can contribute to make GNU Guix
+   better, and join the world-wide community of volunteers.")
    #:keywords
-   '("GNU" "Linux" "Unix" "Free software" "Libre software"
-     "Operating system" "GNU Hurd" "GNU Guix package manager"
-     "Volunteer" "Development" "Translation" "I18N" "L10N"
-     "Artwork")
-   #:active-menu-item "About"
+   (string-split ;TRANSLATORS: |-separated list of webpage keywords
+    (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \
+system|GNU Hurd|GNU Guix package manager|Volunteer|Development|\
+Translation|I18N|L10N|Artwork") #\|)
+   #:active-menu-item (C_ "website menu" "About")
    #:css (list
 	  (guix-url "static/base/css/page.css")
 	  (guix-url "static/base/css/item-preview.css"))
-   #:crumbs (list (crumb "Contribute" "./"))
+   #:crumbs (list (crumb (C_ "website menu" "Contribute") "./"))
    #:content
    `(main
      (section
       (@ (class "page centered-block limit-width"))
-      (h2 "Contribute")
-
-      (p
-       "GNU Guix is a large project developed
-       mostly by volunteers from all around the world. You are welcome
-       to join us in the "
-       (a (@ (href "https://lists.gnu.org/mailman/listinfo/guix-devel"))
-	  "development mailing list")
-       " or in the "
-       (a (@ (href ,(guix-url "contact/irc/"))) "#guix channel")
-       " in IRC Freenode. Tell us how would you like to help, and we
-       will do our best to guide you. ")
-
-      (p
-       "We want to provide a warm, friendly, and harassment-free environment,
-	so that anyone can contribute to the best of their abilities.  To this
-	end our project uses a “Contributor Covenant”, which was adapted from "
-       (a (@ (href "https://contributor-covenant.org/"))
-          "https://contributor-covenant.org/")
-       ".  You can find the full pledge in the "
-       (a (@ (href "//git.savannah.gnu.org/cgit/guix.git/tree/CODE-OF-CONDUCT")
-	     (class "mono"))
-          "CODE-OF-CONDUCT") " file.")
+      ,(G_ `(h2 "Contribute"))
+
+      ,(G_
+        `(p
+          "GNU Guix is a large project developed
+           mostly by volunteers from all around the world. You are welcome
+           to join us in the "
+          ,(G_
+            `(a (@ (href "https://lists.gnu.org/mailman/listinfo/guix-devel"))
+                "development mailing list"))
+          " or in the "
+          ,(G_
+            `(a (@ (href ,(guix-url "contact/irc/"))) "#guix channel"))
+          " in IRC Freenode. Tell us how would you like to help, and we
+          will do our best to guide you. "))
+
+      ,(G_
+        `(p
+          "We want to provide a warm, friendly, and harassment-free environment,
+           so that anyone can contribute to the best of their abilities.  To
+           this end our project uses a “Contributor Covenant”, which was adapted
+           from "
+          ,(G_ ((lambda (url)
+                  `(a (@ (href ,url)) url))
+                "https://contributor-covenant.org/"))
+          ".  You can find the full pledge in the "
+          ,(G_
+            `(a (@ (href "//git.savannah.gnu.org/cgit/guix.git/tree/CODE-OF-CONDUCT")
+                   (class "mono"))
+                "CODE-OF-CONDUCT"))
+          " file."))
 
       (div
        (@ (class "centered-text"))
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "pms")) "Project Management")
-	(p
-	 "We use "
-	 (a (@ (href "https://savannah.gnu.org/")) "Savannah")
-	 " as the central point for development, maintenance and
-         distribution of the Guix System Distribution and GNU Guix.")
-	(p
-	 "The source files for all the components of the project,
-         including software, web site, documentation, and artwork, are
-         available in "
-	 (a (@ (href "https://savannah.gnu.org/git/?group=guix"))
-	    "Git repositories")
-	 " at Savannah. ")
+        ,(G_ `(h3 (@ (id "pms")) "Project Management"))
+        ,(G_
+          `(p
+            "We use "
+            ,(G_ `(a (@ (href "https://savannah.gnu.org/")) "Savannah"))
+            " as the central point for development, maintenance and
+            distribution of the Guix System Distribution and GNU Guix."))
+        ,(G_
+          `(p
+            "The source files for all the components of the project,
+            including software, web site, documentation, and artwork, are
+            available in "
+            ,(G_ `(a (@ (href "https://savannah.gnu.org/git/?group=guix"))
+                     "Git repositories"))
+            " at Savannah. "))
 	(p
 	 ,(link-more
-	   #:label "Access Savannah"
+           #:label (G_ "Access Savannah")
 	   #:url "https://savannah.gnu.org/projects/guix")))
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "art")) "Art")
-	(p
-	 "We are always looking for artists to help us design and
-         improve user interfaces, and create multimedia material for
-         documentation, presentations, and promotional items. ")
-	(p
-	 "The artwork used in the different components of the project
-         is available in the "
-	 (a (@ (href "//git.savannah.gnu.org/cgit/guix/guix-artwork.git"))
-	    "guix-artwork")
-	 " repository. ")
+        ,(G_ `(h3 (@ (id "art")) "Art"))
+        ,(G_
+          `(p
+            "We are always looking for artists to help us design and
+            improve user interfaces, and create multimedia material for
+            documentation, presentations, and promotional items. "))
+        ,(G_
+          `(p
+            "The artwork used in the different components of the project
+            is available in the "
+            ,(G_
+              `(a (@ (href "//git.savannah.gnu.org/cgit/guix/guix-artwork.git"))
+                  "guix-artwork"))
+            " repository. "))
 	(p
 	 ,(link-more
-	   #:label "Contribute"
+           #:label (G_ "Contribute")
 	   #:url "https://lists.gnu.org/mailman/listinfo/guix-devel")))
 
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "documentation")) "Documentation")
-	(p
-	 "You can read the "
-	 (a (@ (href ,(guix-url "help/"))) "project documentation")
-	 " already available in the system and in the website, and
-         help us identify any errors or omissions. Creating new
-         manuals, tutorials, and blog entries will also help users and
-         developers discover what we do. ")
-	(p
-	 "Helping improve the documentation of the "
-	 (a (@ (href ,(guix-url "packages/"))) "packaged software")
-	 " is another way to contribute. ")
+        ,(G_ `(h3 (@ (id "documentation")) "Documentation"))
+        ,(G_
+          `(p
+            "You can read the "
+            ,(G_ `(a (@ (href ,(guix-url "help/"))) "project documentation"))
+            " already available in the system and in the website, and
+            help us identify any errors or omissions. Creating new
+            manuals, tutorials, and blog entries will also help users and
+            developers discover what we do. "))
+        ,(G_
+          `(p
+            "Helping improve the documentation of the "
+            ,(G_ `(a (@ (href ,(guix-url "packages/"))) "packaged software"))
+            " is another way to contribute. "))
 	(p
 	 ,(link-more
-	   #:label "Start writing"
+           #:label (G_ "Start writing")
 	   #:url "https://lists.gnu.org/mailman/listinfo/guix-devel")))
 
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "packages")) "Packages")
-	(p
-	 "Hundreds of software, documentation, and assets need to be
-         packaged to make it easier for users to install their
-         favorite tools with the Guix package manager, and be
-         productive using the system. ")
-	(p
-	 "Information on how to add packages to the distribution can
-         be found "
-	 (a (@ (href ,(manual-url "Packaging-Guidelines.html")))
-	    "in the manual")
-	 ". ")
-	(p
-	 "Check out the "
-	 (a (@ (href ,(guix-url "packages/")))
-	    "package database")
-	 " for a list of available packages, and the "
-	 (a (@ (href "//bugs.gnu.org/guix-patches"))
-	    "patch-tracking database")
-	 " for a list of pending submissions.")
+        ,(G_ `(h3 (@ (id "packages")) "Packages"))
+        ,(G_
+          `(p
+            "Hundreds of software, documentation, and assets need to be
+            packaged to make it easier for users to install their
+            favorite tools with the Guix package manager, and be
+            productive using the system. "))
+        ;; TRANSLATORS: Packaging Guidelines is a section name in the
+        ;; English (en) manual.
+        ,(G_
+          `(p
+            "Information on how to add packages to the distribution can
+            be found "
+            ,(G_
+              (manual-href
+               "in the manual"
+               (G_ "en")
+               (G_ "Packaging-Guidelines.html")))
+            ". "))
+        ,(G_
+          `(p
+            "Check out the "
+            ,(G_ `(a (@ (href ,(guix-url "packages/")))
+                     "package database"))
+            " for a list of available packages, and the "
+            ,(G_ `(a (@ (href "//bugs.gnu.org/guix-patches"))
+                     "patch-tracking database"))
+            " for a list of pending submissions."))
 	(p
 	 ,(link-more
-	   #:label "Send a new package"
+           #:label (G_ "Send a new package")
 	   #:url "https://lists.gnu.org/mailman/listinfo/guix-patches")))
 
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "programming")) "Programming")
-	(p
-	 "Source code is in the "
-	 (a (@ (href "//git.savannah.gnu.org/cgit/guix.git/"))
-	    "main Git repository")
-	 ".  "
-	 "We use "
-	 (a (@ (href ,(gnu-url "software/guile"))) "GNU Guile")
-	 " as the main programming and extension language for the
-         components of the system. ")
-	(p
-	 "You will find it useful to browse the "
-	 (a (@ (href ,(gnu-url "software/guile/manual")))
-	    "Guile manual")
-	 " or other "
-	 (a (@ (href "http://www.schemers.org/Documents/#intro-texts"))
-	    "introductory material about Scheme")
-	 ". Also, make sure to read the "
-	 (a (@ (href ,(manual-url "Contributing.html")))
-	    "Contributing")
-	 " section of the manual for more details on the development
-         setup, as well as the coding and cooperation conventions used
-         in the project. ")
+        ,(G_ `(h3 (@ (id "programming")) "Programming"))
+        ,(G_
+          `(p
+            "Source code is in the "
+            ,(G_ `(a (@ (href "//git.savannah.gnu.org/cgit/guix.git/"))
+                     "main Git repository"))
+            ".  "
+            "We use "
+            ,(G_ `(a (@ (href ,(gnu-url "software/guile"))) "GNU Guile"))
+            " as the main programming and extension language for the
+            components of the system. "))
+        ;; TRANSLATORS: Contributing is a section name in the English
+        ;; (en) manual.
+        ,(G_
+          `(p
+            "You will find it useful to browse the "
+            ,(G_
+              `(a (@ (href ,(gnu-url "software/guile/manual")))
+                  "Guile manual"))
+            " or other "
+            ,(G_ `(a (@ (href "http://www.schemers.org/Documents/#intro-texts"))
+                     "introductory material about Scheme"))
+            ". Also, make sure to read the "
+            ,(G_ (manual-href "Contributing"
+                              (G_ "en")
+                              (G_ "Contributing.html")))
+            " section of the manual for more details on the development
+            setup, as well as the coding and cooperation conventions used
+            in the project. "))
 	(p
 	 ,(link-more
-	   #:label "Send a patch"
+           #:label (G_ "Send a patch")
 	   #:url "https://lists.gnu.org/mailman/listinfo/guix-patches")))
 
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "sysadmin")) "System Administration")
-	(p
-	 "Our system infrastructure makes it possible for all the
-         contributors to communicate and collaborate in the project,
-         and users to be able to download and install packages. Help
-         us keep the system up and running smoothly. ")
-	(p
-	 "You can also "
-	 (a (@ (href ,(guix-url "donate/")))
-	    "donate hardware or hosting")
-	 " for our "
-	 (a (@ (href "https://hydra.gnu.org")) "build farm") ".  ")
+        ,(G_ `(h3 (@ (id "sysadmin")) "System Administration"))
+        ,(G_
+          `(p
+            "Our system infrastructure makes it possible for all the
+            contributors to communicate and collaborate in the project,
+            and users to be able to download and install packages. Help
+            us keep the system up and running smoothly. "))
+        ,(G_
+          `(p
+            "You can also "
+            ,(G_ `(a (@ (href ,(guix-url "donate/")))
+                     "donate hardware or hosting"))
+            " for our "
+            ,(G_ `(a (@ (href "https://hydra.gnu.org")) "build farm")) ".  "))
 	(p
 	 ,(link-more
-	   #:label "Contribute"
+           #:label (G_ "Contribute")
 	   #:url "https://lists.gnu.org/mailman/listinfo/guix-devel")))
 
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "testing")) "Test and Bug Reports")
-	(p
-	 "Install the software and send feedback to the community
-         about your experience. Help the project by reporting bugs.")
-	(p
-	 "Before reporting a bug, please check whether the bug is
-         already "
-	 (a (@ (href "https://issues.guix.gnu.org"))
-	    "in the bug database")
-	 ". See "
-	 (a (@ (href "https://debbugs.gnu.org/Developer.html"))
-	    "the developer information page")
-	 " for more information on how to manipulate bug reports. ")
+        ,(G_ `(h3 (@ (id "testing")) "Test and Bug Reports"))
+        ,(G_
+          `(p
+            "Install the software and send feedback to the community
+            about your experience. Help the project by reporting bugs."))
+        ,(G_
+          `(p
+            "Before reporting a bug, please check whether the bug is
+            already "
+            ,(G_ `(a (@ (href "https://issues.guix.gnu.org"))
+                     "in the bug database"))
+            ". See "
+            ,(G_ `(a (@ (href "https://debbugs.gnu.org/Developer.html"))
+                     "the developer information page"))
+            " for more information on how to manipulate bug reports. "))
 	(p
 	 ,(link-more
-	   #:label "Report a bug"
+           #:label (G_ "Report a bug")
 	   #:url "https://lists.gnu.org/mailman/listinfo/bug-guix")))
 
 
        (div
 	(@ (class "summary-box"))
-	(h3 (@ (id "translation")) "Translation")
-	(p
-	 "You can help translate the "
-	 (a (@ (href "https://translationproject.org/domain/guix.html"))
-	    "software")
-	 ", the "
-	 (a (@ (href "https://translationproject.org/domain/guix-packages.html"))
-	    "package descriptions")
-         ", and the "
-            (a (@ (href "https://translationproject.org/domain/guix-manual.html"))
-	       "manual")
-	 " into your language.  See the "
-	 (a (@ (href "https://translationproject.org/html/translators.html"))
-	    "Translation Project")
-	 " for information on how you can help.")
-	(p
-	 (a (@ (href ,(guix-url "packages"))) "Software packages")
-	 " provided by the system may have their own translation
-         tools.  Visit their websites and help translate. ")
-	(p
+        ,(G_ `(h3 (@ (id "translation")) "Translation"))
+        ,(G_
+          `(p
+            "You can help translate the "
+            ,(G_
+              `(a (@ (href "https://translationproject.org/domain/guix.html"))
+                  "software"))
+            ", the "
+            ,(G_
+              `(a (@ (href "https://translationproject.org/domain/guix-packages.html"))
+                  "package descriptions"))
+            ", and the "
+            ,(G_
+              `(a (@ (href "https://translationproject.org/domain/guix-manual.html"))
+                  "manual"))
+            " into your language.  See the "
+            ,(G_
+              `(a (@ (href "https://translationproject.org/html/translators.html"))
+                  "Translation Project"))
+            " for information on how you can help."))
+        ,(G_
+          `(p
+            ,(G_ `(a (@ (href ,(guix-url "packages"))) "Software packages"))
+            " provided by the system may have their own translation
+            tools.  Visit their websites and help translate. "))
+        (p
 	 ,(link-more
-	   #:label "Start translating"
+           #:label (G_ "Start translating")
 	   #:url "https://translationproject.org/"))))
 
 
-      (h3 (@ (id "resources")) "Other resources for contributors")
-      (p
-       "Documents, supporting material of previous talks, and
-       auxiliary information useful to hackers and maintainers is
-       available at "
-       (a (@ (href "//git.savannah.gnu.org/cgit/guix/maintenance.git"))
-	  "git://git.sv.gnu.org/guix/maintenance.git")
-       ".")))))
+      ,(G_ `(h3 (@ (id "resources")) "Other resources for contributors"))
+      ,(G_
+        `(p
+          "Documents, supporting material of previous talks, and
+          auxiliary information useful to hackers and maintainers is
+          available at "
+          (a (@ (href "//git.savannah.gnu.org/cgit/guix/maintenance.git"))
+             "git://git.sv.gnu.org/guix/maintenance.git")
+          "."))))))
diff --git a/website/apps/base/templates/donate.scm b/website/apps/base/templates/donate.scm
index 8babaec..301e801 100644
--- a/website/apps/base/templates/donate.scm
+++ b/website/apps/base/templates/donate.scm
@@ -7,206 +7,267 @@
   #:use-module (apps base templates theme)
   #:use-module (apps base types)
   #:use-module (apps base utils)
+  #:use-module (apps i18n)
   #:export (donate-t))
 
 
 (define (donate-t)
   "Return the Donate page in SHTML."
   (theme
-   #:title '("Donate")
+   #:title (C_ "webpage title" '("Donate"))
    #:description
-   "We are looking for donations of hardware and optionally hosting
-   for machines (they should be usable with exclusively free
-   software)."
+   (G_ "We are looking for donations of hardware and optionally
+   hosting for machines (they should be usable with exclusively
+   free software).")
    #:keywords
-   '("GNU" "Linux" "Unix" "Free software" "Libre software"
-     "Operating system" "GNU Hurd" "GNU Guix package manager"
-     "Donations")
-   #:active-menu-item "Donate"
+   (string-split ;TRANSLATORS: |-separated list of webpage keywords
+    (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \
+system|GNU Hurd|GNU Guix package manager|Donations") #\|)
+   #:active-menu-item (C_ "website menu" "Donate")
    #:css (list
 	  (guix-url "static/base/css/page.css"))
-   #:crumbs (list (crumb "Donate" "./"))
+   #:crumbs (list (crumb (C_ "website menu" "Donate") "./"))
    #:content
    `(main
      (section
       (@ (class "page centered-block limit-width"))
-      (h2 "Donate")
+      ,(G_ `(h2 "Donate"))
 
-      (p
-       "The "
-       (a (@ (href "https://hydra.gnu.org/jobset/gnu/master"))
-	  "build farm")
-       " of the Guix System Distribution runs on donated hardware and"
-       " hosting. As the distribution grows (see the "
-       (a (@ (href ,(guix-url "packages/"))) "package list")
-       "), so do the computing and storage needs.")
+      ,(G_
+        `(p
+          "The "
+          ,(G_
+            `(a (@ (href "https://hydra.gnu.org/jobset/gnu/master"))
+                "build farm"))
+          " of the Guix System Distribution runs on donated hardware and"
+          " hosting. As the distribution grows (see the "
+          ,(G_ `(a (@ (href ,(guix-url "packages/"))) "package list"))
+          "), so do the computing and storage needs."))
 
-      (p
-       "We have "
-       (a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8423"))
-	  "started a fundraising campaign")
-       " to strengthen our build farm, with "
-       (a (@ (href "https://www.fsf.org/blogs/community/fsf-announces-support-for-gnu-guix"))
-	  "support from the Free Software Foundation (FSF)")
-       ".  Please consider helping out by making a donation on this
-       FSF-hosted page:")
+      ,(G_
+        `(p
+          "We have "
+          ,(G_
+            `(a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8423"))
+                "started a fundraising campaign"))
+          " to strengthen our build farm, with "
+          ,(G_
+            `(a (@ (href "https://www.fsf.org/blogs/community/fsf-announces-support-for-gnu-guix"))
+                "support from the Free Software Foundation (FSF)"))
+          ".  Please consider helping out by making a donation on this
+          FSF-hosted page:"))
 
       (p
        (@ (class "centered-text"))
        ,(button-big
-	 #:label "♥ DONATE!"
+         #:label (C_ "button" "♥ DONATE!")
 	 #:url "https://my.fsf.org/civicrm/contribute/transact?reset=1&id=50"))
 
-      (h3
-       (@ (id "hardware-and-hosting"))
-       "Hardware and Hosting")
+      ,(G_
+        `(h3
+          (@ (id "hardware-and-hosting"))
+          "Hardware and Hosting"))
 
-      (p
-       "We are also looking for donations of hardware and optionally
-        hosting for the following kinds of machines (they should be
-        usable with exclusively free software): ")
+      ,(G_
+        `(p
+          "We are also looking for donations of hardware and optionally
+           hosting for the following kinds of machines (they should be
+           usable with exclusively free software): "))
 
       (ul
-       (li "x86_64 machines, with on the order of 1\xa0TiB of storage
-            and 4\xa0GiB of RAM;")
-       (li "armv7 machines (such as the Novena) to more quickly test
-            and provide binaries for the armhf-linux port;")
-       (li "mips64el machines to strengthen this port."))
+       ,(G_
+         `(li "x86_64 machines, with on the order of 1\xa0TiB of storage
+               and 4\xa0GiB of RAM;"))
+       ,(G_
+         `(li "armv7 machines (such as the Novena) to more quickly test
+               and provide binaries for the armhf-linux port;"))
+       ,(G_
+         `(li "mips64el machines to strengthen this port.")))
 
-      (p
-       "Please get in touch with us through the "
-       (a (@ (href ,(guix-url "contact/"))) "usual channels")
-       " or using the " (b "guix-hardware@HIDDEN") " private alias to
-        discuss any opportunities. ")
+      ,(G_
+        `(p
+          "Please get in touch with us through the "
+          ,(G_ `(a (@ (href ,(guix-url "contact/"))) "usual channels"))
+          " or using the " (b "guix-hardware@HIDDEN") " private alias to
+           discuss any opportu