Files
FreshRSS/docs/fr/internationalization.md

84 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gestion de la traduction
Grâce à nos contributeurs, FreshRSS est traduit dans [plus de 20 langues](./users/05_Configuration.md#language).
Cette section expliquera les bases de linternationalisation dans FreshRSS, de la traduction de lapplication dans votre propre langue à la réalisation dun changement spécifique.
## Aperçu
Il est fréquent (et cest un euphémisme) de vouloir afficher des phrases à
lutilisateur. Dans lexemple précédent par exemple, nous affichions un
feedback à lutilisateur en fonction du résultat dune validation de
formulaire. Le problème est que FreshRSS possède des utilisateurs de
différentes nationalités. Il est donc nécessaire de pouvoir gérer
différentes langues pour ne pas rester cantonné à lAnglais ou au Français.
La solution consiste à utiliser la classe `Minz_Translate` qui permet de
traduire dynamiquement FreshRSS (ou toute application basée sur Minz). Avant
dutiliser ce module, il est nécessaire de savoir où trouver les chaînes de
caractères à traduire. Chaque langue possède son propre sous-répertoire dans
un répertoire parent nommé `i18n`. Par exemple, les fichiers de langue en
Français sont situés dans `i18n/fr/`. Il existe sept fichiers différents :
* `admin.php` pour tout ce qui est relatif à ladministration de FreshRSS ;
* `conf.php` pour laspect configuration ;
* `feedback.php` contient les traductions des messages de feedback ;
* `gen.php` stocke ce qui est global à FreshRSS (gen pour « general ») ;
* `index.php` pour la page principale qui liste les flux et la page « À propos » ;
* `install.php` contient les phrases relatives à linstallation de FreshRSS ;
* `sub.php` pour laspect gestion des abonnements (sub pour « subscription »).
Cette organisation permet de ne pas avoir un unique énorme fichier de
traduction.
Les fichiers de traduction sont assez simples : il sagit seulement de
retourner un tableau PHP contenant les traductions. Extrait du fichier
`app/i18n/fr/gen.php` :
```php
<?php
return array(
'action' => array(
'actualize' => 'Actualiser',
'back_to_rss_feeds' => '← Retour à vos flux RSS',
'cancel' => 'Annuler',
'create' => 'Créer',
'disable' => 'Désactiver',
),
'freshrss' => array(
'_' => 'FreshRSS',
'about' => 'À propos de FreshRSS',
),
);
```
Pour accéder à ces traductions, `Minz_Translate` va nous aider à laide de
sa méthode `Minz_Translate::t()`. Comme cela peut être un peu long à taper,
il a été introduit un raccourci qui **doit** être utilisé en toutes
circonstances : `_t()`. Exemple de code :
```html
<p>
<a href="<?= _url('index', 'index') ?>">
<?= _t('gen.action.back_to_rss_feeds') ?>
</a>
</p>
```
La chaîne à passer à la fonction `_t()` consiste en une série didentifiants
séparés par des points. Le premier identifiant indique de quel fichier on
veut extraire la traduction (dans notre cas présent, de `gen.php`), tandis
que les suivantes indiquent des entrées de tableaux. Ainsi `action` est une
entrée du tableau principal et `back_to_rss_feeds` est une entrée du tableau
`action`. Cela permet dorganiser encore un peu plus nos fichiers de
traduction.
Il existe un petit cas particulier qui permet parfois de se simplifier la
vie : le cas de lidentifiant `_`. Celui-ci doit nécessairement être présent
en bout de chaîne et permet de donner une valeur à lidentifiant de niveau
supérieur. Cest assez dur à expliquer mais très simple à comprendre. Dans
lexemple donné plus haut, un `_` est associé à la valeur `FreshRSS` : cela
signifie quil ny a pas besoin décrire `_t('gen.freshrss._')` mais
`_t('gen.freshrss')` suffit.
> Voir [`freshrss-i18n/SKILL.md`](https://github.com/FreshRSS/FreshRSS/blob/edge/.github/skills/freshrss-i18n/SKILL.md) pour les conventions de code (à la fois pour les humains et agents IA).