Multilingue
Définition
Osuny est une application multilingue : chaque contenu peut être traduit dans plusieurs langues, permettant aux universités de publier des informations dans les langues de leur choix. Le système gère automatiquement les traductions et propose la version linguistique appropriée selon le contexte de l’utilisateur.
Caractéristiques principales
Gestion des langues : Chaque université définit ses propres langues disponibles parmi celles supportées par la plateforme. Une langue par défaut est configurée pour chaque tenant.
Contenus traduisibles : La plupart des contenus (pages, articles, programmes, événements, etc.) peuvent être traduits. Chaque traduction est stockée comme une “localisation” du contenu original.
Interface d’administration multilingue : L’interface administrative et les composants Vue supportent également le multilingue via Vue I18n et Rails I18n.
Implémentation concrète
D’une façon générale, les langues se gèrent en 2 phases :
- l’internationalisation (i18n) qui vise à rendre possible les langues multiples
- la localisation (l10n) qui vise à intégrer une langue spécifique
Dans Osuny, le système a 2 facettes :
- l’admin en Ruby on Rails, qui permet d’écrire les contenus
- le site en Hugo, qui permet de lire les contenus
L’aspect front du multilingue est documenté dans la partie thème.
L’aspect back du multilingue est documenté dans la partie admin.
Modèle de localisation : Chaque contenu traduisible a des “localisations” associées. Une localisation représente la version d’un contenu dans une langue spécifique.
Structure des données :
- Table
languages: Liste des langues disponibles (fr, en, es, etc.) - Table
localizations: Tradutions des contenus, liées à un contenu source et à une langue - Chaque localisation contient les champs traduisibles (titre, contenu, slug, etc.)
- Table
Concern Localizable : Les modèles traduisibles incluent le concern
Localizablequi ajoute :- Association
has_many :localizations - Méthodes pour gérer les traductions (
localization_for,best_localization_for) - Portées pour filtrer par langue (
for_language,published_in)
- Association
Concern AsLocalization : Les modèles de localisation incluent
AsLocalizationqui gère :- L’association à une langue et à un contenu source
- La duplication des contenus pour créer de nouvelles traductions
- La gestion des pièces jointes traduisibles
Vue I18n : Pour l’interface utilisateur, Osuny utilise Vue I18n et Rails I18n qui permettent :
- La traduction des interfaces Vue
- Le chargement dynamique des traductions
- Le basculement entre langues sans rechargement
Conséquences pratiques
- Un contenu peut exister en plusieurs versions linguistiques simultanément
- Chaque version linguistique a son propre cycle de vie (brouillon/publié)
- Les utilisateurs voient automatiquement la version dans leur langue préférée
- Les administrateurs peuvent gérer les traductions via une interface dédiée
- Les URL sont adaptées à la langue (slugs traduits, préfixes de langue)
Avantages Techniques
- Flexibilité : Chaque université choisit ses langues sans impact sur les autres
- Maintenance simplifiée : Les traductions sont gérées comme des contenus à part entière
- SEO optimisé : Chaque version linguistique a ses propres métadonnées et URLs
- Expérience utilisateur : Basculement transparent entre les langues disponibles
- Extensibilité : Ajout de nouvelles langues sans modification du code
Limites et Contraintes
- Contenu dupliqué : Chaque traduction stocke une copie des données, augmentant le volume
- Synchronisation : Les modifications du contenu original doivent être reportées manuellement
- Complexité : Gestion des états de publication par langue
- Performances : Requêtes supplémentaires pour récupérer la bonne version linguistique
Exemple de Fonctionnement
- Création de contenu : Un administrateur crée un article en français (langue par défaut)
- Traduction : Il localise l’article pour créer une version anglaise
- Publication : Chaque version est publiée indépendamment
- Affichage : Un visiteur anglais voit la version anglaise, un visiteur français voit la version française