Files
FreshRSS/docs/fr/internationalization.md
2023-05-11 23:26:20 +02:00

3.6 KiB
Raw Permalink Blame History

Gestion de la traduction

Grâce à nos contributeurs, FreshRSS est traduit dans plus de 20 langues. 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
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 :

<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.