Sie entwickeln eine ASP.Net MVC-Anwendung, oder? Andere Antworten scheinen spezifisch für Desktop-Anwendungen zu sein. Lassen Sie mich gemeinsame Dinge erfassen:
Gebietsschemaerkennung
Es ist sehr wichtig, dass Ihre Anwendung das Gebietsschema des Benutzers korrekt erkennt. In der Desktop-Anwendung enthält CultureInfo.CurrentCulture das bevorzugte Formatierungsgebietsschema (das zum Formatieren von Zahlen, Datumsangaben, Währungen usw. verwendet werden sollte), während CultureInfo.CurrentUICulture das bevorzugte Gebietsschema für die Benutzeroberfläche enthält (das zum Anzeigen lokalisierter Nachrichten verwendet werden sollte). . Für Webanwendungen sollten Sie beide Kulturen auf auto setzen (um das Gebietsschema automatisch aus dem AcceptLanguage-Header zu erkennen), es sei denn, Sie möchten einen ausgefallenen Workflow für die Gebietsschemaerkennung implementieren (dh das Ändern der Sprache bei Bedarf unterstützen).
Veröffentlichen Sie Zeichenfolgen
Alle Zeichenfolgen sollten aus Ressourcen stammen, also aus Resx-Dateien. In der Winforms-App können Sie dies problemlos erreichen, indem Sie die Localizable-Eigenschaft des Formulars auf true setzen. Sie müssten (leider) auch Zeichenfolgen, die von Ihren Modellen stammen, manuell externalisieren. Es ist auch relativ einfach. In Asp.Net müssten Sie alles manuell auslagern ...
Layouts
Sie müssen auf jeden Fall die Erweiterung der Zeichenfolge berücksichtigen. In der Winforms-Welt ist dies über TableLayoutPanel möglich. Dies sollte verwendet werden, um sicherzustellen, dass das Layout automatisch an längeren Text angepasst wird. In der Web-Welt haben Sie ein bisschen Pech. Möglicherweise müssen Sie den CSS-Lokalisierungsmechanismus implementieren - eine Möglichkeit zum Ändern (Überschreiben) von CSS-Definitionen. Dies würde es Lokalisierungsleuten ermöglichen, Stilprobleme bei Bedarf zu ändern. Stellen Sie sicher, dass jedes HTML-Element in der gerenderten Seite eine eindeutige ID hat, damit es präzise ausgerichtet werden kann.
Kulturspezifische Themen
Vermeiden Sie Grafiken, Farben und Sounds, die für die westliche Kultur spezifisch sein könnten. Wenn Sie es wirklich brauchen, geben Sie bitte die Mittel zur Lokalisierung an. Vermeiden Sie richtungsabhängige Grafiken (da dies ein Problem darstellen würde, wenn Sie versuchen, Arabisch oder Hebräisch zu lokalisieren). Nehmen Sie auch nicht an, dass die ganze Welt dieselben Zahlen verwendet (dh nicht für Arabisch).
ToString () und Parse ()
Stellen Sie sicher, dass Sie CultureInfo immer übergeben, wenn Sie ToString () aufrufen, es sei denn, dies wird nicht unterstützt. Auf diese Weise kommentieren Sie Ihre Absichten. Beispiel: Wenn Sie eine Nummer intern verwenden und sie aus irgendeinem Grund in eine Zeichenfolge konvertieren müssen, verwenden Sie:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
Für Nummern, die dem Benutzer angezeigt werden sollen:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
Gleiches gilt für Parse (), TryParse () und sogar ParseExact () - einige böse Fehler könnten ohne ordnungsgemäße Verwendung von CultureInfo auftreten. Das liegt daran, dass eine arme Seele in Microsoft, die voll guter Absichten ist, entschieden hat, dass es eine gute Idee ist, CultureInfo.CurrentCulture als Standard zu behandeln (es wird verwendet, wenn Sie nichts übergeben) - schließlich, wenn jemand ToString verwendet ( ) er / sie möchte es dem Benutzer anzeigen, oder? Es stellt sich heraus, dass dies nicht immer der Fall ist. Versuchen Sie beispielsweise, die Versionsnummer Ihrer Anwendung in einer Datenbank zu speichern und anschließend in eine Instanz der Versionsklasse zu konvertieren. Viel Glück.
Daten und Zeitzonen
Achten Sie darauf, immer zu speichern und instanziiert Datetime in UTC (verwenden DateTime.UtcNow statt DateTime.Now). Konvertieren Sie es nach der Anzeige in die Ortszeit im lokalen Format:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
Wenn Sie E-Mails mit einem Zeitbezug im Hauptteil senden müssen, müssen Sie die Zeitzoneninformationen angeben - einschließlich UTC-Versatz und Liste der Städte:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
Zusammengesetzte Nachrichten
Sie wurden bereits gewarnt, keine Zeichenfolgen zu verketten. Stattdessen würden Sie wahrscheinlich String.Format () wie oben gezeigt verwenden. Ich muss jedoch darauf hinweisen, dass Sie die Verwendung von zusammengesetzten Nachrichten auf ein Mindestmaß beschränken sollten. Das liegt nur daran, dass die Grammatikregeln für das Ziel häufig unterschiedlich sind. Daher müssen Übersetzer den Satz möglicherweise nicht nur neu anordnen (dies würde durch die Verwendung von Platzhaltern und String.Format () behoben), sondern den gesamten Satz auf unterschiedliche Weise basierend auf übersetzen was ersetzt wird. Lassen Sie mich einige Beispiele nennen:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
Andere Verkettungsprobleme
Die Verkettung ist nicht auf Zeichenfolgen beschränkt. Vermeiden Sie das gemeinsame Anordnen von Steuerelementen, sagen Sie:
Erinnern Sie mich noch einmal in [Textfeld mit Nummer] Tagen.
Dies sollte in etwa wie folgt umgestaltet werden: Erinnere mich in dieser Anzahl von Tagen erneut an: [Textfeld].
Zeichenkodierung und Schriftarten
Speichern und übertragen Sie jeden Text in Unicode (dh in UTF-8). Keine hartcodierten Schriftarten - Möglicherweise muss die Lokalisierung sie ändern, und der Standard-Fallback-Mechanismus für Schriftarten wird deaktiviert (im Fall von Winforms). Denken Sie daran, in den meisten Feldern "seltsame" Zeichen (z. B. Benutzername) zuzulassen.
Prüfung
Sie müssen wahrscheinlich eine sogenannte Pseudo-Übersetzung implementieren, dh Ressourcen für die deutsche Kultur erstellen und Ihre englischen Zeichenfolgen kopieren, indem Sie Präfix und Suffix hinzufügen. Sie können auch Platzhalter umbrechen, um zusammengesetzte Zeichenfolgen leicht zu erkennen. Der Zweck der Pseudoübersetzung besteht darin, Lokalisierungsprobleme wie hartcodierte Zeichenfolgen, Layoutprobleme und die übermäßige Verwendung zusammengesetzter Nachrichten zu erkennen.