Do we need to have a list for authors? Couldn't we have a single translatable string with all the authors, so it's easier to translate than having to translate a separator? I mean you could have weird rujes on separators. Even in English, you'd need an "and" for the last element, unless there's one author. Giving the full list of authors to translate gives the most freedom to translators.

Also, please give context/comment to the last one, because it's not easy to guess what <1> in "Published <1> by <2>" would be :)

Le 25 mai 2021 15:46:17 GMT-04:00, Luis Felipe via Guix-patches via <guix-patches@gnu.org> a écrit :
On Tuesday, May 25, 2021 6:21 PM, pelzflorian (Florian Pelz) <pelzflorian@pelzflorian.de> wrote:

On Tue, May 25, 2021 at 02:37:03PM +0000, Luis Felipe wrote:

Yeah. Would it as follows? (I still struggle with i18n):
(p
(@ (class "publication-info"))
,(G_ `("Published "
,(date->string (publication-date publication)
(C_ "SRFI-19 date->string format" "~b ~d, ~Y"))
" by "
,(string-join (publication-authors publication) ", "))))

It would need to be

(p
(@ (class "publication-info"))
,(let ((format (C_ "SRFI-19 date->string format" "~b ~d, ~Y")))

(G_ `("Published "
,(date->string (publication-date publication) format)

" by "
,(string-join (publication-authors publication) ", ")
""))))


The let is needed because C_ cannot be nested inside G_ because the
sexp-xgettext script parses Scheme files in only one pass currently.
(And I’m not motivated enough to make it go back to parse the nested
C_ because nesting is seldom needed.)

The "" at the end is needed so (string-join …) gets its own XML
element that can be moved by translators.

Without "":

msgid "Published <1/> by "

With "":

msgid "Published <1/> by <2/>"

You told me that before but I forgot :P


Also, I think the delimiter for "string-join" in the list of authors
should be translated because that comma is not used in Japanese, for
example. So would it be ok like this:
[…]
,(string-join (publication-authors publication)
(C_ "Separator of items in a list" ", ")))))

Yes, you are very right, although as above please move it to the let.
Then it can become 、 or と or whatever; I don’t know what is common
in Japan.

I'm still unsure about when I should use a context and when a
TRANSLATORS comment...

A msgctxt should be used if another ", " string with different
translations might be added. I would use a context, I think, but
maybe it is an abundance of caution.

Ok, so I moved both the date and the list authors to the definitions part of a let:

(define (publication->shtml publication)
"Return an SHTML representation of the given publication object.

PUBLICATION (<publication>)
A publication object as defined in (apps media types)."
(let ((date
(date->string (publication-date publication)
(C_ "SRFI-19 date->string format" "~b ~d, ~Y")))
(authors
(string-join (publication-authors publication)
(C_ "Separator for authors in a list" ", "))))

`(a
(@ (class "publication-preview")
(href ,(publication-url publication)))

(h3
(@ (lang ,(publication-language publication))
(class "publication-title"))
,(publication-title publication))

(p
(@ (class "publication-info"))
,(G_ `("Published " ,date " by " ,authors ""))))))

Does it look right?