Développement d'applications Web multilingues utilisant le modèle Mvc et les techniques de localisation
Le développement d'applications web multilingues n'est plus facultatif dans le paysage numérique mondialisé d'aujourd'hui. Les utilisateurs s'attendent à interagir avec le contenu dans leur langue maternelle et à offrir cette expérience impacte directement l'engagement, la conversion et l'expansion du marché. Le modèle Model-View-Controller (MVC), combiné à de solides techniques de localisation, fournit une architecture éprouvée pour construire des applications multilingues évolutives et durables.
Le modèle MVC : un ajustement naturel pour la localisation
L'architecture MVC divise une application en trois composantes interconnectées : le Modèle, la Vue et le Contrôleur. Cette séparation des préoccupations est particulièrement utile lors de l'ajout d'un support multilingue, car chaque composante peut être étendue ou modifiée pour l'internationalisation (i18n) et la localisation (l10n) sans affecter les autres.
- Modèle: Gère les données et la logique d'affaires. Pour les applications multilingues, le modèle doit stocker ou récupérer du contenu spécifique à la langue, que ce soit à partir d'une base de données, d'une API ou de fichiers ressources.
- View: Poigne le calque de présentation. Les vues utilisent des chaînes localisées, le formatage date/numéro et les mises en page sensuelles (RTL/LTR) pour afficher correctement le contenu dans chaque langue.
- Contrôleur:[ Traite l'entrée de l'utilisateur, détecte la localisation et sélectionne les ressources ou données appropriées avant de les transmettre à la vue.
Cette séparation nette signifie que vous pouvez ajouter un nouveau langage en créant de nouveaux fichiers de ressources ou des entrées, en ajustant les modèles de vue pour les référencer, et en vous assurant que le contrôleur choisit la bonne localité — le tout sans réécrire la logique d'entreprise ou les schémas de base de données.
Principales techniques de localisation
Fichiers de ressources pour le stockage de chaînes
Les fichiers de ressources (JSON, YAML, XML ou .resx) conservent des chaînes de caractères spécifiques à la langue à l'extérieur du code. Par exemple, Laravel utilise des fichiers ; ASP.NET Core utilise des fichiers ; et de nombreux cadres JavaScript utilisent des fichiers de traduction JSON. Le modèle de base est une paire de valeurs clés :
- pour l ' anglais
- pour le français
L'utilisation de fichiers ressources rend trivial pour les traducteurs de travailler sans toucher à la logique d'application, et il maintient la base de code propre.
Détection et négociation locales
Votre application doit automatiquement détecter la langue préférée de l'utilisateur. Les stratégies communes comprennent:
- Parcourir l'en-tête Accept-Langue: Parsing pour obtenir la liste des priorités de l'utilisateur.
- Paramètre du profil utilisateur:[ Stocker la localité choisie dans une session ou une base de données après la connexion de l'utilisateur.
- préfixe ou sous-domaine URL:, p.ex., ou .
- Stockage local ou cookie :[ Persistance du choix de langue de l'utilisateur dans toutes les sessions.
Le contrôleur devrait mettre en œuvre un algorithme de négociation — par exemple, essayer la préférence exacte de l'utilisateur, puis revenir à un langage par défaut. L'activité d'internationalisation W3C (W3C i18n) fournit des conseils détaillés sur la négociation de contenu.
Pluralisation, genre et formatage
La localisation va au-delà du simple remplacement de chaînes. Différentes langues ont des règles plurielles complexes (par exemple, -1 item , vs. -2 items en anglais, mais plusieurs formes en polonais ou en arabe). De nombreux cadres offrent des règles de pluralité intégrées : Laravel , Symfony , et le format des messages ICU. De même, la date, l'heure, le nombre et le formatage des devises doivent respecter les conventions locales (par exemple, [-[FLT :9]] en Allemagne contre [-[FLT : 10]] aux États-Unis).
Stratégies de traduction du contenu
Pour les contenus dynamiques stockés dans une base de données (par exemple, descriptions de produits, billets de blog), vous avez plusieurs options:
- Colonnes de langue: Une colonne de base de données par langue (p. ex., , ). Simple mais non évolutive pour de nombreuses langues.
- Séparer les tableaux de traduction: Une table avec une relation polymorphe avec toute entité translatable.
- JSON colonnes:[ Stockez un objet JSON avec des touches de langue. Rapide pour le prototypage, mais peut devenir difficile à requêter et à maintenir.
Choisissez l'approche qui correspond à votre nombre prévu de langues et la taille du contenu.
Intégration de la CVM à la localisation : guide étape par étape
Let , suppose que vous construisez une application web multilingue dans un cadre PHP ou C# MVC typique. Les étapes suivantes montrent comment brancher la localisation dans le flux MVC.
1. Concevoir le modèle de données multilingues
Par exemple, un modèle pourrait avoir une relation de un à plusieurs avec un modèle qui stocke , et . Dans un OMM comme Laravel=S Eloquent, vous pouvez utiliser un trait ou un paquet dédié pour charger automatiquement la traduction correcte. De même, les fichiers ressources pour les chaînes d'interface utilisateur statiques doivent être organisés par des touches locales.
2. Configurer le contrôleur de détection locale
Dans le contrôleur de base (ou intergiciel), implémentez la détection locale. Définissez la locale actuelle de l'application en fonction de la préférence de l'utilisateur.
protected function setLocale(Request $request)
{
$locale = $request->segment(1); // from URL
if (in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
session(['locale' => $locale]);
}
}
Dans ASP.NET Core, vous pouvez ajouter le intergiciel pour gérer la négociation automatique. Le contrôleur utilise alors l'objet pour retourner les traductions correctes.
3. Développer des vues en utilisant des fonctions de localisation
Dans Laravel Blade, vous utilisez ; dans ASP.NET Razor, . Pour le contenu dynamique, passez l'instance de modèle traduite dans les champs de vue et d'affichage directement en fonction de la localité actuelle. Assurez-vous également que le formatage de la date et du nombre utilise ou .
Par exemple, un simple extrait de page de connexion dans Laravel Blade :
<h2>{{ __('auth.login_title') }}</h2>
<form>
<label>{{ __('auth.email') }}</label>
<input type="email" name="email">
<label>{{ __('auth.password') }}</label>
<input type="password" name="password">
<button type="submit">{{ __('auth.login_button') }}</button>
</form>
4. Activer le changement de langue
Fournissez un sélecteur de langue visible (souvent une liste déroulante dans la navigation ou le pied de page). Lorsque l'utilisateur choisit une langue, le contrôleur ou JavaScript met à jour la localité actuelle et stocke le choix. Gardez l'utilisateur sur le même itinéraire si possible, en rediriger vers la même URL avec le nouveau préfixe local.
Meilleures pratiques et considérations
Gestion cohérente du contenu
Gardez les traductions synchronisées. Utilisez le contrôle de version pour les fichiers ressources, et envisagez d'utiliser un système de gestion de la traduction (par exemple, Lokalise, Crowdin) pour les plus grandes équipes.
Expérience utilisateur pour les sites multilingues
- Sélecteur de langue:[ Utilisez un bouton clair et visible ou des icônes de drapeau (avec un texte alt pour l'accessibilité).
- Souvenez-vous du choix : Persistez la langue de l'utilisateur via session, cookie ou base de données.
- Respecter les paramètres du navigateur:[ Lors de la première visite, utilisez automatiquement la langue préférée du navigateur si disponible.
- Référencement avec hreflang:[ Mettre en œuvre l'attribut dans votre HTML pour informer les moteurs de recherche des versions linguistiques de chaque page. Par exemple: .
Optimisation des performances
- Cache translations:[ Chargez les fichiers de ressources dans la mémoire et cachez-les (p. ex., en utilisant Laravel=].
- Traduit par la revue: Lors de la requête des modèles translatables, utilisez le chargement avide pour éviter le problème de requête N+1.
- Minimisez les frais généraux de détection locale:[ Entreposez la locale résolue dans un conteneur de service ou une session, donc elle est disponible dans le monde entier sans répéter la logique de détection.
Accessibilité et inclusivité
Les attributs de langue ( et ) doivent être correctement définis sur l'étiquette . Utilisez les étiquettes ARIA appropriées dans plusieurs langues. Testez avec les lecteurs d'écran dans chaque langue prise en charge. La FAQ W3C Internationalization fournit des conseils sur la façon de définir la langue du document.
Outils et cadres appuyant le développement multilingue des CVM
La plupart des cadres modernes de CVM comportent des ensembles de localisation intégrés ou soutenus par la communauté :
- Laravel (PHP):[ Comprend les aides à la localisation, les règles de plurialisation et le support des fichiers de ressources JSON et PHP. Voir la documentation officielle Laravel sur la localisation.
- ASP.NET Core (C#):[ Offre les interfaces et , avec des fichiers de ressources et une localisation intelligente. Le ASP.NET Core location guide est complet.
- Ruby on Rails (Ruby):[ Utilise les fichiers YAML et l'API I18n avec des règles de pluralité étendues et la mise en forme de la date/numéro. Voir le ].
- Django (Python):[ Prend en charge les chaînes de texte et de traduction avec la balise de gabarit . Les documents Django d'internationalisation couvrent tout.
- Symfony (PHP):[ Utilise des composants de traduction avec le support XLIFF, YAML et PHP. Voir Symfony translation.
Pour les cadres front-end MVC comme React avec Redux, les bibliothèques telles que (basé sur le format de message ICU) s'intègrent bien à une structure de backend MVC.
Conclusion
En tirant parti de la séparation des préoccupations intrinsèques à la MVC, les développeurs peuvent introduire la localisation sans refactoriser l'ensemble de la base de données. Les fichiers de ressources, la détection locale et la conception prudente de la base de données forment la trousse d'outils de base, tandis que les cadres fournissent l'infrastructure de soutien.