# Ajout d'une nouvelle langue

La gestion du multilingue est gérée par [Babel](http://babel.pocoo.org/en/latest/). Son intégration à **Open-Capture** est facilitée grâce au module [Flask-Babel](https://flask-babel.tkte.ch/). Passons maintenant à la procédure pour rajouter une nouvelle langue, en plus du français et de l'anglais, présent par défaut.

## Modification côté base de données

La liste des langues est disponible dans la base de données, dans la table `languages`. Vous pouvez lancer la commande suivante pour commencer l'ajout d'une nouvelle langue :

```sql
INSERT INTO "languages"
    ("language_id", "label", "lang_code", "moment_lang_code", "date_format")
VALUES
    ('spa', 'Español', 'spa', 'spa-SPA', '%d %m %Y');

```

## Ajout d'un paquet de langue Tesseract

Si vous souhaitez que Tesseract puisse lire et comprendre également la nouvelle langue, il faut installer le paquet spécifique. Pour cela, le lien suivant recense les codes de langue Tesseract : <https://www.macports.org/ports.php?by=name&substr=tesseract->. Dans notre exemple, pour rajouter la langue espagnole la commande à taper serait :

```
sudo apt install tesseract-ocr-spa
```

## Création des fichiers Babel

Il est désormais temps de créer le dossier Babel contenant toutes les traductions. Il suffira d'une seule ligne pour tout créer, le plus long sera de traduire ensuite tous les champs. Encore une fois, nous utilisons notre exemple avec la langue espagnole.

```
cd /var/www/html/opencapture/src/assets/i18n/
pybabel init -i backend/messages.pot -d backend/translations -l spa
```

Ce qui vous donnera une arborescence comme ceci :

{% code title="/var/www/html/opencapture/src/assets/i18n/" %}

```
backend
├── messages.pot
└── translations
    ├── en
    │   └── LC_MESSAGES
    │       ├── messages.mo
    │       └── messages.po
    ├── fr
    │   └── LC_MESSAGES
    │       ├── messages.mo
    │       └── messages.po
    └── spa
        └── LC_MESSAGES
            ├── messages.mo
            └── messages.po
```

{% endcode %}

Ouvrez désormais le fichier `spa/LC_MESSAGES/message.po`. Vous aurez X traductions, présentées comme ci-dessous. Il ne vous reste plus qu'à tout traduire dans le champ `msgstr`.

{% code title="message.po" %}

```
#: src/backend/models/user.py:40
msgid "USER"
msgstr ""
```

{% endcode %}

## Modification des REGEX

Le dernier élément à modifier pour finaliser l'ajout de langue est la table contenant les REGEX. En effet, les REGEX sont liés à une langue. Situé dans la table `regex`, avoir des lignes spécifiques à la nouvelle langue est essentiel pour une bonne reconnaissance des différentes métadonnées. Vous retrouverez ci-dessous toutes les regex à modifier et à insérer dans votre base de données. Il ne vous reste qu'à modifier la colonne `lang` au besoin, le `label` ainsi que la colonne `content` qui contient la regex. Vous trouverez les regex d'origine française et anglaise dans le fichier `/var/www/html/opencapture/instance/sql/global.sql`

{% hint style="success" %}
Si vous le souhaitez, et dans le but d'améliorer continuellement **Open-Capture**, n'hésitez pas à [**fork**](https://github.com/edissyum/opencapture/fork) le projet pour ensuite ouvrir un [**Pull Request**](https://github.com/edissyum/opencapture/pulls) dans le dépot Git officiel afin d'intégrer vos modifications dans le tronc commun.
{% endhint %}

```sql
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('date', 'spa', 'Date', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('due_date', 'spa', 'Date d''échance', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('invoice_number', 'spa', 'Numéro de facture', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('delivery_number', 'spa', 'Numéro de livraison', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('quotation_number', 'spa', 'Numéro de devis', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('no_rates', 'spa', 'Montant HT', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('all_rates', 'spa', 'Montant TTC', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('vat_rate', 'spa', 'Taux de TVA', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('vat_amount', 'spa', 'Montant TVA', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('vat_rate_list', 'spa', 'Liste des taux de TVA', '[20, 19.6, 10, 5.5, 2.1]');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('format_date', 'spa', 'Format final de la date', '%d/%m/%Y');

INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('splitter_doc_loop', 'spa', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('splitter_condition', 'spa', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('splitter_xml_comment', 'spa', '');
INSERT INTO "regex" ("regex_id", "lang", "label", "content") VALUES ('splitter_empty_line', 'spa', '');

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://edissyum.gitbook.io/open-capture/technique/ajout-dune-nouvelle-langue.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
