From: Louis Gesbert <louis.gesbert@ocamlpro.com>
To: caml-list@inria.fr, "Richard W.M. Jones" <rich@annexia.org>
Cc: Anil Madhavapeddy <anil@recoil.org>, sylvain@le-gall.net
Subject: Re: [Caml-list] camlp4 & OCaml 4.08
Date: Tue, 02 Jul 2019 16:30:39 +0200 [thread overview]
Message-ID: <3729925.sQVOuqHuC6@agaric> (raw)
In-Reply-To: <20190629094350.7mw6gif3vz2qxqwp@annexia.org>
[-- Attachment #1: Type: text/plain, Size: 3070 bytes --]
For what it's worth, Learn-OCaml [1] uses a rather straightfoward way to handle translations through PPX, based on the gettext format.
It's a quick hack and the build-system around it could use some cleanup, though, which is the reason why it wasn't released as a library: please consider it a proof of concept that PPX can be used for gettext.
- Translatable strings are introduced through [%i "Blah" ] (or [%if "Blah"] for format-strings; advanced uses like changing format parameters order are not supported)
- The build extracts these to a separate file at build-time, based on an environment variable `DUMP_POT` [2]. Probably the most dirty part here, and it requires a clean build, but it works...
- Then the standard GNU tools can be used to manage the translations [3]
- There is a tiny library at runtime that allows choosing the locale; located strings are rewritten to arrays with a lookup based on it (but changing that to something more elaborate like using external resource files should be pretty straightforward) [4].
Louis Gesbert -- OCamlPro
[1] https://github.com/ocaml-sf/learn-ocaml/
[2] https://github.com/ocaml-sf/learn-ocaml/blob/master/src/utils/ppx_ocplib_i18n.ml
[3] https://github.com/ocaml-sf/learn-ocaml/blob/master/Makefile#L33
[4] https://github.com/ocaml-sf/learn-ocaml/blob/master/src/utils/ocplib_i18n.mli
> - Richard W.M. Jones, 29/06/2019 10:43 -
> On Sat, Jun 29, 2019 at 10:06:15AM +0100, Anil Madhavapeddy wrote:
> > On 27 Jun 2019, at 14:45, Richard W.M. Jones <rich@annexia.org> wrote:
> > >
> > >
> > > I know camlp4 is dead and all that, but we've got some software which
> > > still uses it. I will probably port it to camlp5 when I have the
> > > time, but has anyone got the patch to make camlp4 work with 4.08?
> >
> >
> > To fork the thread slightly, how big are the camlp4 dependencies remaining
> > in your codebase, and is there anything we can do to help migrate?
>
> The dependencies that I care about run through ocaml-gettext. Gettext
> is a specific method to make code internationalized and by its nature
> it involves deep changes throughout our codebase, so porting away from
> ocaml-gettext isn't an option any time soon. However porting
> ocaml-gettext to use something else might be.
>
> ocaml-gettext has a tool which runs over the OCaml source code and
> extracts the magic translatable strings, and it's my understanding
> that this is the only reason it uses camlp4. AIUI this cannot be done
> using ppx's (maybe I'm wrong about that?) but could be done using
> camlp5. In fact it was me who did the original port of ocaml-gettext
> from old camlp4 (ie. camlp5) to camlp4(!)
>
> (see libgettext-ocaml/pr_gettext.ml in the OCaml sources)
>
> > It's pretty exhausting trying to keep camlp4 maintained with a skeleton
> > crew, and there appears to be a stubborn tail of packages which aren't
> > migrating despite it having been quite a few years since the deprecation.
>
> I agree, however also changing working code is always a pain and
> there's never a good time.
>
> Rich.
>
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2019-07-02 15:25 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-27 13:45 Richard W.M. Jones
2019-06-27 17:28 ` Ian Zimmerman
2019-06-27 20:00 ` Richard W.M. Jones
2019-06-27 18:09 ` Jürgen Hötzel
2019-06-29 9:06 ` Anil Madhavapeddy
2019-06-29 9:43 ` Richard W.M. Jones
[not found] ` <12C0FD24-2DCD-4128-B020-84416F228E87@metastack.com>
2019-06-29 10:52 ` Richard W.M. Jones
2019-06-29 17:49 ` Sylvain Le Gall
2019-07-18 14:23 ` Richard W.M. Jones
2019-07-23 8:12 ` Richard W.M. Jones
2019-07-23 16:33 ` Sylvain Le Gall
2019-07-23 16:37 ` Richard W.M. Jones
2019-06-30 8:55 ` David Allsopp
2019-07-01 13:40 ` Jeremie Dimino
2019-07-02 14:30 ` Louis Gesbert [this message]
2019-06-29 15:15 ` Daniil Baturin
[not found] ` <5CE377AD-CB06-4261-BD26-A2A697253F02@uca.fr>
[not found] ` <393603fa-0efa-5714-82da-ba4bc3e869b8@baturin.org>
2019-07-05 9:55 ` [Caml-list] Lascar/RFSM & Camlp4 (was camlp4 & OCaml 4.08) Jocelyn Sérot
2019-07-24 15:10 ` [Caml-list] Camlp4-free implementation of stream parsers " Jocelyn Sérot
2019-07-24 15:31 ` Daniil Baturin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3729925.sQVOuqHuC6@agaric \
--to=louis.gesbert@ocamlpro.com \
--cc=anil@recoil.org \
--cc=caml-list@inria.fr \
--cc=rich@annexia.org \
--cc=sylvain@le-gall.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox