Internationalisation (i18n) en C# (.NET) : Guide complet
L'internationalisation (souvent abrégée i18n — de l'anglais « internationalization », où entre la première lettre 'i' et la dernière 'n' se trouvent 18 caractères) est le processus de conception de logiciels de manière à pouvoir les adapter facilement à différentes langues et normes régionales sans modifier le code source. Dans l'écosystème C# (.NET), l'internationalisation est une fonctionnalité intégrée et puissante qui permet aux développeurs de créer des applications véritablement multilingues.
Dans cet article, nous examinerons en détail comment implémenter i18n dans .NET (y compris .NET Core, .NET 5/6/7/8 et .NET Framework). Vous découvrirez les concepts clés — cultures, fichiers de ressources (RESX), localisation de chaînes, d'images et de formatage de données.
Concepts fondamentaux
Avant de passer au code, il est important de comprendre deux termes clés :
- Globalisation (Globalization) : Processus de conception d'une application qui prend en charge des interfaces localisées et des données régionales pour des utilisateurs de différentes cultures. Dans .NET, cela est réalisé via les classes
CultureInfoetRegionInfo. - Localisation (Localization) : Processus d'adaptation d'une application déjà globalisée pour une langue/région spécifique (par exemple, traduction de textes, configuration des formats de dates et de devises).
.NET utilise les cultures (Cultures), qui sont spécifiées au format langue-région (par exemple, ru-RU — russe (Russie), en-US — anglais (États-Unis), de-DE — allemand (Allemagne)).
Étape 1 : Création des fichiers de ressources (.resx)
La principale méthode de stockage des chaînes localisées dans .NET est les fichiers de ressources (.resx). Ce sont des fichiers XML qui sont compilés dans l'assembly.
Prenons un exemple. Créons des fichiers pour les langues russe et anglaise :
- Resources.resx — fichier de ressources par défaut (généralement en anglais).
- Resources.ru.resx — fichier pour la langue russe.
- Resources.de.resx — fichier pour la langue allemande.
Dans chaque fichier, nous ajouterons des ressources de chaîne avec les mêmes noms mais des valeurs différentes :
Resources.resx (langue par défaut — en-US) :
Name: GreetingValue: Hello, World!
Name: WelcomeMessageValue: Welcome to our application!Resources.ru.resx (Russe) :
Name: GreetingValue: Привет, мир!
Name: WelcomeMessageValue: Добро пожаловать в наше приложение!Étape 2 : Accès aux ressources dans le code C#
.NET génère automatiquement une classe fortement typée pour accéder aux ressources. Supposons que les fichiers se trouvent dans le dossier Resources du projet. L'accès ressemblera alors à ceci :
using System;using System.Globalization;using System.Threading;
class Program{ static void Main(string[] args) { // Définit la culture pour le thread actuel Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU"); Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
// Obtient les chaînes localisées string greeting = Resources.Messages.Greeting; string welcome = Resources.Messages.WelcomeMessage;
Console.WriteLine(greeting); // Affiche : Привет, мир! Console.WriteLine(welcome); // Affiche : Добро пожаловать в наше приложение! }}Remarque : Resources.Messages est une classe générée automatiquement, basée sur le nom de votre fichier RESX (si le fichier s'appelle Messages.resx).
Étape 3 : Localisation dans ASP.NET Core
Dans les applications web ASP.NET Core, le processus
Aussi dans la bibliothèque
TCPDF pour PHP : guide complet avec exemples
Mise en cache en TypeScript : Redis et autres solutions pour Node.js
Event Bus et le pattern Observer en JavaScript (Node.js) : implémentation et exemples
Apprentissage automatique en C++ : aperçu des bibliothèques clés
InversifyJS : conteneur IoC pour applications TypeScript