Re: Static, pure Scheme internationalization

Nala Ginrut <[email protected]>
Newsgroups gmane.lisp.guile.user
Message-ID <CAPjoZofNjy0GxAyX7kibo4AWWJ59omi2da7rpAWYLQE4wfbsdw@mail.gmail.com>
Hi Vivien!
I'm also interested in Hoot for potential web frontend in Scheme.

Back to your case, as I understand, Hoot reused part of Guile code, include
i18n.
Maybe not complete yet, but it contains gettext, and G_ is its short hand.

I saw you implemented a simple G_ macro, is there any reason that it can't
meet your requirements? Or you just happend to not know it exited in Hoot?

Best regards.
Best regards.

On Sat, Dec 21, 2024, 18:31 Vivien Kraus <[email protected]> wrote:

> Dear Guile users,
>
> I am very excited about Hoot, but there is one aspect I was not
> satisfied with: internationalization. Since it is usually done with
> gettext, it requires a C library at run-time. Hoot programs can’t
> unfortunately use that.
>
> With your help, I managed to understand how I could rewrite code with
> macros.
>
> Thanks to this knowledge, I was able to create a small library for
> static and pure Scheme internationalization.
>
> It works like this
> (https://labo.planete-kraus.eu/guile-static-i18n.git/tree/example.scm):
>
> (define-module (example)
>   #:use-module (static-i18n)
>   #:declarative? #t
>   #:export (main))
>
> ;; We have to tell where the pot file lives at expansion time.
> (eval-when (expand)
>   (project-pot-file
>    (string-append (dirname (current-filename)) "/example.pot"))
>   (project-po-directory
>    (string-append (dirname (current-filename)) "/example-po")))
>
> ;; collect-strings updates a PO template file, regenerates PO files,
> ;; and use them to provide translations for any calls to G_.
> (collect-strings
>  ;; This is defined at the top-level.
>  (define (main args)
>    ;; current-locale-order is parameterized by a list of locale names
>    ;; to try in order.
>    (parameterize ((current-locale-order '("de" "fr" "en")))
>      ;; Note how you can use (G_ context message) to register a new
>      ;; record, without having to call xgettext.
>      (format #t (G_ "GREETING" "Hello, world!~%")))))
>
> (main (command-line))
>
> Once expanded, every call to G_ will have all possible translations
> compiled in, and the correct one will be chosen according to a list of
> preference for the user (a run-time Guile parameter).
>
> The big downside is, it doesn’t support plurals. However, I believe it
> can be useful!
>
> https://labo.planete-kraus.eu/guile-static-i18n.git
>
> Best regards,
>
> Vivien
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.