Internationalisation (i18n) en C# (.NET) : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Internationalisation (i18n) en C# (.NET)

\n

L'internationalisation (abrégée i18n — de l'anglais "internationalization", où 18 est le nombre de lettres entre le premier "i" et le dernier "n") est le processus de conception de logiciels permettant de les adapter à différentes langues, régions et particularités culturelles sans modifier le code source. Dans la plateforme .NET (C#), l'i18n est implémentée via les mécanismes de localisation et de globalisation, intégrés au cœur du framework.

\n\n

Concepts clés de l'i18n dans .NET

\n
    \n
  • Globalisation — conception d'une application prenant en charge plusieurs cultures (par exemple, formatage des dates, nombres, devises).
  • \n
  • Localisation — adaptation de l'interface à une culture spécifique (traduction des textes, images, sons).
  • \n
  • Culture (Culture) — combinaison de la langue et des paramètres régionaux, désignée par un code comme ru-RU, en-US, de-DE.
  • \n
  • Fichiers de ressources (.resx) — fichiers XML contenant des paires "clé-valeur" pour chaque locale.
  • \n
\n\n

Comment fonctionne l'i18n en C# (.NET)

\n

Dans .NET, la localisation utilise des fichiers de ressources. Le fichier principal (par exemple, Strings.resx) contient les chaînes dans la langue par défaut (généralement l'anglais). Pour chaque langue supplémentaire, un fichier séparé est créé avec le suffixe du code de culture : Strings.ru.resx (russe), Strings.de.resx (allemand). Lors de la compilation, ces fichiers sont transformés en assemblys satellites, chargés en fonction de la culture actuelle du thread.

\n\n
// Exemple de fichier de ressources (Strings.resx)\n// Key: HelloMessage, Value: "Hello, World!"\n// Strings.ru.resx\n// Key: HelloMessage, Value: "Привет, мир!"\n
\n\n

Implémentation pas à pas de la localisation dans une application console

\n
    \n
  1. Créez un fichier de ressources dans le projet : clic droit sur le projet → Add → New Item → Resources File. Nommez-le Strings.resx.
  2. \n
  3. Ajoutez des chaînes : insérez la clé Greeting et la valeur Hello, user!.
  4. \n
  5. Créez un fichier pour la langue russe : Strings.ru.resx avec la même clé et la valeur Привет, пользователь!.
  6. \n
  7. Écrivez le code pour définir la culture et obtenir la chaîne localisée :
  8. \n
\n\n
using System.Globalization;\nusing System.Resources;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        // Définit la culture russe\n        Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");\n        Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");\n\n        // Obtient le gestionnaire de ressources\n        ResourceManager rm = new ResourceManager("YourNamespace.Strings", typeof(Program).Assembly);\n        string greeting = rm.GetString("Greeting");\n\n        Console.WriteLine(greeting); // Affiche : "Привет, пользователь!"\n    }\n}\n
\n\n

Localisation des applications web ASP.NET Core

\n

Dans ASP.NET Core, l'i18n est implémentée via un middleware et des services intégrés. Regardons un exemple de configuration pour MVC ou Razor Pages.

\n\n

1. Configuration dans Program.cs

\n
using Microsoft.AspNetCore.Localization;\nusing System.Globalization;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddLocalization(options => options.ResourcesPath = "Resources");\nbuilder.Services.AddControllersWithViews()\n    .AddViewLocalization()\n    .AddDataAnnotationsLocalization();\n\nvar app = builder.Build();\n\nvar supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("ru-RU") };\napp.UseRequestLocalization(new RequestLocalizationOptions\n{\n    DefaultRequestCulture = new RequestCulture("en-US"),\n    SupportedCultures = supportedCultures,\n    SupportedUICultures = supportedCul                    

Recommendations