Internationalisierung (i18n) in C# (.NET): Vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Internationalisierung (i18n) in C# (.NET)

\n

Internationalisierung (abgekürzt i18n – vom englischen "internationalization", wobei 18 die Anzahl der Buchstaben zwischen dem ersten "i" und dem letzten "n" ist) ist der Prozess des Softwareentwurfs, der es ermöglicht, Software an verschiedene Sprachen, Regionen und kulturelle Besonderheiten anzupassen, ohne Änderungen am Quellcode vorzunehmen. In der .NET-Plattform (C#) wird i18n durch die Mechanismen der Lokalisierung und Globalisierung implementiert, die in den Kern des Frameworks integriert sind.

\n\n

Grundlegende Konzepte von i18n in .NET

\n
    \n
  • Globalisierung – Entwurf einer Anwendung unter Berücksichtigung der Unterstützung mehrerer Kulturen (z. B. Formatierung von Datumsangaben, Zahlen, Währungen).
  • \n
  • Lokalisierung – Anpassung der Benutzeroberfläche an eine bestimmte Kultur (Übersetzung von Texten, Bildern, Tönen).
  • \n
  • Kultur (Culture) – Kombination aus Sprache und regionalen Einstellungen, gekennzeichnet durch einen Code wie ru-RU, en-US, de-DE.
  • \n
  • Ressourcendateien (.resx) – XML-Dateien, die Schlüssel-Wert-Paare für jedes Gebietsschema enthalten.
  • \n
\n\n

Wie funktioniert i18n in C# (.NET)

\n

In .NET werden für die Lokalisierung Ressourcendateien verwendet. Die Hauptdatei (z. B. Strings.resx) enthält Zeichenfolgen in der Standardsprache (normalerweise Englisch). Für jede zusätzliche Sprache wird eine separate Datei mit dem Suffix des Kulturcodes erstellt: Strings.ru.resx (Russisch), Strings.de.resx (Deutsch). Bei der Kompilierung werden diese Dateien in Satellitenassemblys umgewandelt, die abhängig von der aktuellen Kultur des Threads geladen werden.

\n\n
// Beispiel einer Ressourcendatei (Strings.resx)\n// Key: HelloMessage, Value: "Hello, World!"\n// Strings.ru.resx\n// Key: HelloMessage, Value: "Привет, мир!"\n
\n\n

Schrittweise Implementierung der Lokalisierung in einer Konsolenanwendung

\n
    \n
  1. Erstellen Sie eine Ressourcendatei im Projekt: Rechtsklick auf das Projekt → Hinzufügen → Neues Element → Ressourcendatei. Nennen Sie sie Strings.resx.
  2. \n
  3. Fügen Sie Zeichenfolgen hinzu: Fügen Sie den Schlüssel Greeting und den Wert Hello, user! ein.
  4. \n
  5. Erstellen Sie eine Datei für die russische Sprache: Strings.ru.resx mit demselben Schlüssel und dem Wert Привет, пользователь!.
  6. \n
  7. Schreiben Sie den Code zum Festlegen der Kultur und Abrufen der lokalisierten Zeichenfolge:
  8. \n
\n\n
using System.Globalization;\nusing System.Resources;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        // Russische Kultur festlegen\n        Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");\n        Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");\n\n        // Ressourcen-Manager abrufen\n        ResourceManager rm = new ResourceManager("YourNamespace.Strings", typeof(Program).Assembly);\n        string greeting = rm.GetString("Greeting");\n\n        Console.WriteLine(greeting); // Gibt aus: "Привет, пользователь!"\n    }\n}\n
\n\n

Lokalisierung von ASP.NET Core Webanwendungen

\n

In ASP.NET Core wird i18n durch Middleware und integrierte Dienste implementiert. Betrachten wir ein Beispiel für die Konfiguration für MVC oder Razor Pages.

\n\n

1. Konfiguration in 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                    

Empfehlungen