Ajout d'une nouvelle langue

La gestion du multilingue est gérée par Babel. Son intégration à Open-Capture est facilitée grâce au module Flask-Babel. 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 :

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 :

/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

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.

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

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

Si vous le souhaitez, et dans le but d'améliorer continuellement Open-Capture, n'hésitez pas à fork le projet pour ensuite ouvrir un Pull Request dans le dépot Git officiel afin d'intégrer vos modifications dans le tronc commun.

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', '');

Last updated