On Fri, Jul 19, 2019 at 02:29:52PM +0200, pelzflorian (Florian Pelz) wrote: > I will try writing a custom xgettext that combines > nested·s-expressions·that are marked for translation with G_ > to·a·single·msgstr that gets written to the·PO·file. This combined > string will not be part of the source code but will be generated from > a nested sexp. The PO file containing the combined strings can then > be translated as usual. For reading the translation, the combined > msgstr will be constructed again by the marking procedure G_ and > looked up by reading from an MO file. > I have implemented a working translation tool. Sexp-xgettext generates from an SHTML or other Scheme file with marked s-expressions a POT file which can be translated and turned into an MO file from which the code generates a localized HTML builder. The advantage is that existing SHTML will just have to be marked with G_ and no format string has to be written, although sometimes the SHTML should be adapted to produce a less complicated message in the POT file. Find attached an example of a marked Scheme file home.scm generating guix-website.pot, which after manual translation generates the attached guix.de_DE.html. 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. But there are still some bugs like missing line numbers and non-working pgettext and the code is not clear enough yet. I will send a patch series tomorrow after I fixed these issues (even though the documentation won’t be near as good as sirgazil’s format strings). Regards, Florian