
# Introduction

Ocsigen-i18n provides internationalisation (i18n) support for OCaml applications.

Translations are described in TSV (tab-separated values) files. A code generator produces an OCaml source file with the translations, and a PPX extension provides a convenient syntax to use them in your program.

Ocsigen-i18n supports three modes:

- **Plain OCaml**: generates simple string functions (default)
- **Tyxml**: generates HTML elements using [Tyxml](https://github.com/ocsigen/tyxml) (`--tyxml`)
- **Eliom**: generates client-server code for `Eliom` apps (`--eliom`)

## Installation

```
opam install ocsigen-i18n
```
The package provides three executables:

- **ocsigen-i18n**: generates an OCaml (or Eliom) file from a TSV file
- **ocsigen-i18n-rewriter**: PPX extension for the `[%i18n ...]` syntax
- **ocsigen-i18n-checker**: PPX checker for i18n expressions
For backward compatibility, **ocsigen-i18n-generator** is provided as an alias for `ocsigen-i18n --eliom`.


## Quick start

Create a TSV file (e.g. `example_i18n.tsv`) with your translations:

```
hello	Hello!	Bonjour !
greeting	Hello {{name}}.	Bonjour {{name}}.
```
Generate the OCaml file:

```
ocsigen-i18n --languages en,fr \
  --input-file example_i18n.tsv \
  --output-file example_i18n.ml
```
For an Eliom application:

```
ocsigen-i18n --eliom --languages en,fr \
  --input-file example_i18n.tsv \
  --output-file example_i18n.eliom
```
Use the PPX in your code:

```
[%i18n hello]
[%i18n greeting ~name:"World"]
```
With Tyxml or Eliom, variables are HTML elements:

```
[%i18n greeting ~name:[txt "World"]]
```
Add the PPX to your dune file:

```
(preprocess (pps ocsigen-i18n -- --default-module Example_i18n))
```