C#-Code für die globale Welt vorbereiten: Internationalisierung von Anwendungen

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

Warum Ihre C#-Anwendung Internationalisierung braucht?

\n

Stellen Sie sich vor: Sie haben einen tollen Dienst zur Notizverwaltung geschrieben. Alles funktioniert, die Oberfläche ist schlank, die Benutzer sind zufrieden. Aber nur die russischsprachigen. Sobald Sie auf den Markt der USA oder Deutschlands gehen, steht das Projekt still. Nicht weil der Code schlecht ist, sondern weil der Button „Speichern“ sich nicht in „Save“ verwandelt und die Meldung „Eingabefehler“ den Ausländer erschreckt.

\n

Das ist das Problem der Lokalisierung. In der .NET-Welt heißt die Lösung Internationalisierung von C# (oder i18n – vom Wort „internationalization“, wobei 18 die Anzahl der Buchstaben zwischen i und n ist). Wenn Sie C# und die Plattform .NET (Core, 5/6/7/8/9) verwenden, haben Sie unter der Haube bereits ein mächtiges Werkzeugset, um Ihre Anwendung mehrsprachig zu machen. In diesem Artikel werden wir es in der Praxis durchgehen: von einfachen Ressourcen bis zum Sprachwechsel „im laufenden Betrieb“.

\n\n

Grundlagen: Was ist Kultur und neutrale Sprache?

\n

Bevor wir Code schreiben, klären wir die Begriffe. In .NET sind für die Lokalisierung zwei Schlüsselklassen aus dem Namensraum System.Globalization verantwortlich:

\n
    \n
  • CultureInfo – ein Objekt, das die Sprache und regionale Einstellungen beschreibt (z. B. ru-RU, en-US, de-DE).
  • \n
  • CurrentUICulture – die aktuelle Kultur der Benutzeroberfläche. Danach richtet sich das System bei der Suche nach Übersetzungen.
  • \n
  • CurrentCulture – das Format von Datumsangaben, Zahlen, Währungen. Auch das kann geändert werden, aber für Übersetzungen ist das erste wichtig.
  • \n
\n

In C#-Anwendungen verwenden wir normalerweise Ressourcendateien (.resx). Das sind XML-Dateien, in denen Zeichenfolgen, Bilder und andere Daten gespeichert werden, die an eine bestimmte Kultur gebunden sind. Zum Beispiel:

\n
    \n
  • Messages.resx – Standard-Zeichenfolgen (normalerweise Englisch).
  • \n
  • Messages.ru.resx – Russische Übersetzung.
  • \n
  • Messages.de.resx – Deutsche Übersetzung.
  • \n
\n

Wenn die Anwendung startet, wählt .NET automatisch die Datei aus, die der aktuellen UICulture entspricht. Wenn es keine genaue Übereinstimmung gibt, wird die neutrale (Basis-)Datei verwendet.

\n\n

Erstellen der ersten Ressourcendatei in Visual Studio

\n

Angenommen, wir haben eine Konsolenanwendung oder ein ASP.NET Core-Projekt. Fügen wir einen Ordner Resources und darin eine Datei Strings.resx hinzu. Füllen wir sie aus:

\n
Name         | Wert\n-------------|-------------------\nWelcomeMsg   | Welcome to our app!\nGoodbyeMsg   | Goodbye!\n
\n

Jetzt erstellen wir Strings.ru.resx:

\n
Name         | Wert\n-------------|-------------------\nWelcomeMsg   | Добро пожаловать в наше приложение!\nGoodbyeMsg   | До свидания!\n
\n

Beachten Sie: Die Schlüsselnamen müssen übereinstimmen. Nach dem Speichern generiert Visual Studio automatisch die Klasse Strings mit Zugriff auf die Zeichenfolgen über statische Eigenschaften.

\n\n

Programmgesteuerter Sprachwechsel

\n

Damit die Internationalisierung von C# funktioniert, muss zu Beginn der Ausführung der Anwendung (z. B. in Main oder Startup) die gewünschte Kultur festgelegt werden. So sieht das aus:

\n
using System.Globalization;\nusing System.Threading;\n\n// Russisch als UI-Sprache festlegen\nCultureInfo culture = new CultureInfo("ru-RU");\nThread.CurrentThread.CurrentUICulture = culture;\nThread.CurrentThread.CurrentCulture = culture; // für Datums-/Zahlenformate\n\n// Jetzt auf die Ressourcen zugreifen\nConsole.WriteLine(Strings.WelcomeMsg);  // Ausgabe: Добро пожаловать в наше приложение!\n
\n

Wenn Sie dem Benutzer die Möglichkeit geben möchten, die Sprache „im laufenden Betrieb“ (ohne Neustart) zu wechseln, rufen Sie diese Zeilen einfach nach dem Ändern der Kultur erneut auf. In ASP.NET Core verwendet man dafür Middleware:

\n
app.UseRequestLocalization(new RequestLocalizationOptions\n{\n    DefaultRequestCulture = new RequestCulture("en-US")                

Blogs

Buchempfehlungen