Effektive Lokalisierungsstrategien in .NET [geschlossen]

121

Ich entwickle die Benutzeroberfläche für eine .NET MVC-Anwendung, die in naher Zukunft eine internationale Lokalisierung aller Inhalte erfordert. Ich kenne .NET im Allgemeinen sehr gut, hatte aber noch nie ein Projekt, bei dem ein so starker Fokus auf die internationale Erreichbarkeit gelegt wurde.

Die Projektion erfolgt zunächst in englischer Sprache. Welche Maßnahmen sollte ich an dieser Stelle ergreifen, um die zukünftige Implementierung der Lokalisierung zu vereinfachen?

Smartcaveman
quelle
2
Gute Frage! Ich stehe vor einer ähnlichen Situation und würde gerne sehen, wie die Experten dies abwägen.
Hat jemand gute Standards für das Ressourcenmanagement? Der lokalisierte Wert kann auch Bilder und nicht nur Zeichenfolgen enthalten.
1
Ist dies eine WPF / Silverlight-Benutzeroberfläche oder Winforms? Aus meiner (begrenzten) Erfahrung ist die WinForms-Erfahrung für die Lokalisierung viel einfacher als WPF / Silverlight.
Pete Stensønes
1
Wenn Sie am Ende Ihre lokalisierten Zeichenfolgen in der Datenbank statt in Ressourcendateien speichern, sollten Sie sich diese Diskussion ansehen
1
@Pete, @smartcaveman sagte, dass er "die Benutzeroberfläche für eine .NET MVC-Anwendung entwickelt", also ...
BrunoSalvino

Antworten:

74

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.

Paweł Dyda
quelle
5
In Bezug auf zusammengesetzte Nachrichten - Ich musste einmal mehrere Pluralformen ausführen. Ich erweitert , String.Formatso dass es dieses coole Syntax unterstützen könnte: "There {0:was|were} {0} {0:virus|viruses} found."Jede Sprache kann seine eigenen Regeln laden, so dass Sie könnte "Znaleziono {0} {0:wirusy|wirusów}." die Quelle auf GitHub ist: github.com/scottrippey/SmartFormat/wiki
Scott Rippey
2
@ Scott Rippey Haben Sie bemerkt, dass das polnische Beispiel lautet "Znaleziono 4 wirusy. OR Znaleziono 5 wirusów." <- Polnisch hat wie viele andere Sprachen mehr als zwei Pluralformen und die Regeln zur Unterscheidung können auch komplex sein. Hier muss ich Polnisch verlassen, da ich es nicht spreche, aber in meiner Sprache ist die Pluralform für 101 Dinge dieselbe wie für 1 Sache. Sie können sich ansehen, wie GNU gettext dieses Problem löst
gregopet
2
@gregopet Mein polnisches Beispiel wurde erfunden, weil ich es nicht spreche, aber genau das macht das SmartFormat-Projekt. Hier ist ein besseres Beispiel: "{0} {0:plik|pliki|plików}". Der Formatierer hat eine polnische Regel, die festlegt, welche der drei Formen verwendet werden sollen, und die Sonderfälle korrekt festlegt. Ich arbeite derzeit daran, weitere Regeln hinzuzufügen, sodass sich der gettextArtikel als sehr nützlich erweisen wird. Danke.
Scott Rippey
Für die Pseudolokalisierung habe ich unter pseudolocalize.com ein kostenloses Online- Pseudolokalisierungstool erstellt
JerSchneid
74

Einige grundlegende Dinge, die Sie berücksichtigen sollten:

Veröffentlichen Sie alle Zeichenfolgenressourcen

Alle Ihre Ressourcen sollten in externen Dateien enthalten sein, die zur Lokalisierung übergeben werden können. Vergessen Sie die Fehlermeldungen nicht, wenn Sie diese auch lokalisieren möchten.

Lassen Sie ausreichend Platz für die Erweiterung der Zeichenfolge

Zeichenfolgen in einigen Sprachen sind in der Regel bis zu 30% länger (z. B. Griechisch). Stellen Sie daher sicher, dass Sie die Benutzeroberfläche so gestalten, dass Zeichenfolgen bei Bedarf erweitert werden können. Hier ist ein ziemlich extremes Beispiel für Französisch:

Ok -> Accepter (Französisch - 400% Expansion)

Ich würde empfehlen, eine Art Pseudoübersetzung als Ausgangspunkt zu verwenden ( http://en.wikipedia.org/wiki/Pseudolocalization ). Oder Sie können Ihre Ressourcen über Google Translate oder Bing übersetzen. Dies gibt Ihnen einen guten Hinweis darauf, wie die tatsächlichen Übersetzungen aussehen werden.

Achten Sie auf Text in Bildern

Wenn Sie Bilder in Ihrer Anwendung verwenden - stellen Sie sicher, dass sie keinen Text enthalten -, kann dies offensichtlich nicht übersetzt werden.

Codieren Sie niemals Pfade zu Windows-Ordnern fest

Natürlich, aber ich habe es in der Vergangenheit gesehen. Beispielsweise wird C:\Program Fileses auf einigen internationalen Windows-Versionen übersetzt, z. B. C:\Programmeauf einem deutschen Betriebssystem.

Vermeiden Sie länderspezifische Begriffe

Wenn Sie zum Beispiel jemanden in einem Formular nach seiner "High School" fragen, hat dies in Westeuropa nur eine geringe Bedeutung.

Vermeiden Sie das Erstellen von Zeichenfolgen durch Verketten von Zeichenfolgen

Das sieht zum Beispiel harmlos aus:

strWelcome = ReadExternalString("Welcome"); 
strMessage = strWelcome + ", " + UserName;

Die Wortreihenfolge für Japanisch wäre jedoch anders, sodass dies möglicherweise keinen Sinn ergibt.

Zeit- / Datumseinstellungen

Stellen Sie immer sicher, dass das Uhrzeit- / Datumsformat aus dem Betriebssystem stammt.

Jimmy Collins
quelle
@ Jimmy C, wie gehen Sie vor, um Zeichenfolgen für sprachunabhängige logische Konsistenz zu erstellen?
Smartcaveman
14
@Smart Nehmen Sie etwas in Ihrer Ressource vor, z. B. "{0}, {1}". Wenn Sie es dann lokalisieren, verwenden Sie string.format und übergeben Sie die Begrüßung und den Benutzernamen. Außerdem haben Sie den Vorteil, dass "Die aktuelle Geschwindigkeit {0} ist {1} {2}", und Sie können "Motor", "50" und "MPH" eingeben. Wenn Sie Ihren Satz übersetzen, können Sie sich bewegen { 0} etc herum, wo sie Sinn in dieser Sprache
Taylonr
4
Gute Liste JimmyC. "Niemals Pfade zu Windows-Ordnern fest codieren" erinnerte mich an "Immer Path.Combine verwenden" anstelle der Verkettung von Zeichenfolgen für Windows-Pfade.
@ Jimmy-C Tolle Antwort!
1
Environment.GetFolderPath kann verwendet werden, um gültige Pfade zu allgemeinen Pfaden wie Eigene Dateien abzurufen, ohne vom englischen Namen für diese Ordner abzuhängen.
Crippledsmurf
24

Besondere Überlegungen für asiatische Sprachen

Neben all den tollen Antworten hier gibt es auch einige Tipps für asiatische Sprachen:

Achten Sie auf unterschiedliche Textlängen

Chinesischer und koreanischer Text sind in der Regel viel kürzer als der entsprechende englische Text (da Sie normalerweise weniger blockartige Zeichen benötigen, um dasselbe zu schreiben), sodass eine Seite auf Chinesisch möglicherweise leer , auf Deutsch jedoch voll gestaut aussieht ... Das müssen Sie tun Einige dynamische Größen hier, um gut auszusehen.

Japanischer Text ist jedoch in der Regel viel länger als der entsprechende englische Text in Bezug auf die Anzahl der Zeichen.

Achten Sie auf das Grundlinienlayout und den "nach oben geschobenen" Look

In der Grundlinie werden normalerweise asiatische Zeichen angeordnet , die keine Unterstriche enthalten (dh den unteren Teil von y, g, q, j usw.) Bei Text handelt es sich nur um asiatische Sprachen (dh keine westlichen Alphabete). Der Text sieht dann so aus, als wäre er nach oben verschoben.

Formatierung von Zahlen und lokalisierten numerischen Einheiten

Behandeln Sie die Zahlenformatierung anders. Verschiedene asiatische Länder haben unterschiedliche Möglichkeiten, Zahlen zu formatieren. Gleiches gilt für Währungen. In Ostasien sind beispielsweise 10.000 (WAN) eine übliche Einheit. In Indien sind 100.000 (Lakhs) üblich.

Lokale Währungen

Die Währungen einiger Länder haben viele Nullen und keinen Dezimalpunkt (z. B. Japan, Indonesien, Italien), während andere bis zu zwei Nachkommastellen haben.

Hüten Sie sich vor unterschiedlichen Wortfolgen

Die Wortreihenfolge ist möglicherweise nicht immer gleich. Verwenden Sie am besten {0}, {1} usw. für die Formatierung von Zeichenfolgen anstelle der hartcodierten Wortreihenfolge, wenn Ihre Zeichenfolge aus einer Kombination verschiedener Daten stammt.

Verwenden Sie eine länderspezifische Sortierung

Die Sortierung ist je nach Sprache und Gebietsschema unterschiedlich - Sie sollten sich immer auf die länderspezifische Sortierung des Betriebssystems verlassen.

Seien Sie sehr vorsichtig mit Zeichen voller Breite / halber Breite

Beachten Sie die Unterschiede zwischen "Zeichen voller Breite" und "Zeichen halber Breite". Klammern, Satzzeichen usw. können Versionen mit "voller Breite" aufweisen, die sich von Standard-ASCII unterscheiden. Wenn Sie anhand dieser Buchstaben suchen oder Zeichenfolgen aufteilen, müssen Sie zuerst alle Symbole mit voller Breite in Entsprechungen mit halber Breite konvertieren.

Ein Punkt ist kein Punkt ... ein Komma ist kein Komma ...

Hüten Sie sich vor Dateneingaben, beispielsweise ist ein Punkt auf Chinesisch kein Punkt ".". Ein Komma ist in voller Breite, nicht ",". Versuchen Sie nicht, nach westlichen Interpunktionszeichen zu suchen, wenn der Benutzer, der die Dateneingabe vornimmt, versehentlich IME in asiatischer Sprache aktiviert.

Telefonnummern

Nehmen Sie bei der Formatierung der Telefonnummer nichts an. Es gibt nicht immer eine Ortsvorwahl usw. und diese kann unterschiedlich formatiert werden. Verwenden Sie normalerweise eine Formatzeichenfolge pro Land.

Gehen Sie nicht davon aus, dass die Leute nur eine Handynummer oder eine Faxnummer usw. haben. In Asien ist dies nicht der Fall.

Adressen - dichter als Sie vielleicht denken

Nehmen Sie für Adressen nichts an . Möglicherweise gibt es nicht immer eine Postleitzahl. Postleitzahlen müssen nicht immer Zahlen sein. Ein Land darf keine Provinzen / Staaten haben. Ein Land kann nur eine große Stadt sein (zB Singapur). In bestimmten asiatischen Ländern ist die kleinste Wohneinheit möglicherweise "Raum X, Einheit Y, Abschnitt Z, Etage A, Block B, Gruppe C, Anwesen D". Im Allgemeinen wird sehr liberal in der Anzahl der Felder und die Anzahl der Zeichen in Adressen erlaubt.

Anreden

Anreden sind nicht nur auf Mr., Mrs. usw. beschränkt. Obwohl Sie wahrscheinlich sicher sind, "M" und "F" für Sex zu verwenden - wir sind noch nicht so seltsam ...


quelle
1
Der letzte Absatz brachte mich zum Lächeln.
BoltClock
Oh, wir (i18n Jungs) haben noch nicht einmal angefangen ... Wir konnten nur die Oberfläche zerkratzen :) Wenn wir über bestimmte Probleme wie den GB18030-Support sprechen würden, wäre unser Beitrag zu lang, um SO zu behandeln :) Danke Trotzdem habe ich für Ihre Notiz einiges verpasst.
Paweł Dyda
Ungefähr zum letzten Mal, glaube ich, akzeptiert Großbritannien jetzt offiziell "Andere" als Geschlecht. Denken Sie an Transgender.
Bart Friederichs
11

Einige grundlegende Schritte sind, um sicherzustellen, dass eine Zeichenfolge, die auf dem Bildschirm angezeigt wird, kein Literal in Ihrem Code ist. Wenn Sie Winforms ausführen, verfügt jedes Formular über eine UI-Ressource. Stellen Sie für Dialoge, Berichte usw. sicher, dass Sie die Projektressourcendateien verwenden.

Anstelle von "Hochladen fehlgeschlagen" in Ihrem Code haben Sie möglicherweise so etwas wie Resources.UploadFailed

Auf diese Weise können Sie eine neue Ressourcendatei für jede von Ihnen verwendete Sprache erstellen (und .Net hilft Ihnen dabei.) Und die lokalisierte Zeichenfolge in jeder Datei haben.

BEARBEITEN Ich habe vergessen zu erwähnen, wenn Sie Ihre Benutzeroberfläche tun, stellen Sie sicher, dass Sie nicht nur Dinge drin stopfen. Abhängig von den Sprachen, in die Sie lokalisieren, kann Immobilien ein Problem sein. Ich habe an einem Projekt gearbeitet, bei dem Deutsch und Portugiesisch die 2 größten Straftäter für das Saitenwachstum waren. Wenn wir nicht aufpassen würden, dass die Zeichenfolgen in Englisch in Ordnung sind, würden Französisch und Italienisch in Deutsch in die Luft jagen.

taylonr
quelle
1
Aus meiner L10n-Erfahrung ist Russisch der schlimmste Fall. Wie auch immer, in Winforms kann man mit dem richtigen Benutzer von TableLayoutPanels problemlos mit dem Wachstum von Zeichenfolgen umgehen.
Paweł Dyda
Ja, meine Erfahrung war auf 7 Sprachen beschränkt: Englisch, Deutsch, Portugiesisch, Italienisch, Französisch, Spanisch und Japanisch. Aber ich kann sehen, dass Russisch schlecht ist, da es dazu neigt, viele Suffixe und Präfixe zu haben
taylonr 08.04.11
9

Ich schlage vor, Sie führen FXCop oder Visual Studio Code Analysis (sie sind ziemlich gleich) auf Ihren Assemblys aus.

Sie sind gut darin, .NET-Code zu erkennen, der nicht die richtigen kulturbezogenen Überladungen verwendet, z . B . : CA1305: Geben Sie IFormatProvider an .

Ich muss hinzufügen, dass diese Tools ebenfalls frustrierend sind, da sie normalerweise Millionen von Problemen in Ihrem Code erkennen. Aber auch wenn Sie nicht jede Regel befolgen, sollten Sie eine Menge lernen.

Simon Mourier
quelle
Ist dies die Standardeinstellung oder muss eine Einstellung angegeben werden, um nach globalisierungsspezifischen Regeln zu suchen?
Smartcaveman
@smartcaveman - es ist die Standardeinstellung (hmm .. tatsächlich denken einige Leute, es gibt zwei Standardregeln in diesen Tools :-)
Simon Mourier
7

Zusätzlich zum spezifischen Laden von Ressourcen stelle ich sicher, dass Sie zunächst mit einer pseudolokalisierten Version testen. Andernfalls werden Sie wahrscheinlich die Stellen nicht bemerken, an denen Internationalisierungsüberlegungen bis zum Ende weggelassen wurden.

Jeremy
quelle
Für eine schnelle, einfache Art und Weise pseudolocalize, baute ich ein kostenloses Online - Tool bei pseudolocalize.com
JerSchneid
6

Neben all den anderen hilfreichen Hinweisen fehlen hier einige:

Beachten Sie, dass einige Länder mehr als eine Sprache verwenden. In Kanada würde ein Benutzer beispielsweise erwarten, dass er problemlos zwischen Englisch und Französisch wechseln kann.

Wenn Sie dem Benutzer eine Frage stellen, die eine Antwort mit einem Buchstaben erwartet, dürfen Sie nicht erwarten, dass der Benutzer die Taste "Y" drückt, um Ja zu sagen.

Beachten Sie in gespeicherten Prozessen, dass Datumsangaben in der SQL-Datenbank im USA-Format vorliegen

Durch das Platzieren von Textzeichenfolgen in der Datenbank können Sie später weitere Sprachen hinzufügen, ohne sie erneut bereitstellen zu müssen.

Wenn Sie geschriebene Textdateien zur Übersetzung senden, geben Sie immer eine Beschreibung des Kontexts an, um sicherzustellen, dass der Übersetzer das richtige Wort auswählt. ZB ohne Kontext könnten Sie "Tonhöhe:" in etwas übersetzen, das mit Ton oder einem Ort zu tun hat, an dem Sie Fußball spielen

Adressetiketten müssen immer konvertiert werden. Provinz in Kanada, Bundesstaat in Amerika, Grafschaft in Großbritannien

Brian Leeming
quelle
5

Sie müssen berücksichtigen:

  1. Routing für Mehrsprachigkeit

  2. Verschieben Sie alle Hardcode-Zeichenfolgen in die Ressourcendatei

Ein Beispiel für eine Immobilie:

Modell:

[Display(Name = <Resource for display name>.<field for this property>)]
[Required(ErrorMessage = <Resource for error message>.<field for this validate message>)]
public string TestProperty { get; set; }

Aussicht:

@Html.LabelFor(m=>m.TestProperty)
@Html.EditorFor(m => m.TestProperty)
@Html.ValidationMessageFor(m => m.TestProperty)

quelle
5

Hier ist etwas, das in den restlichen Antworten nicht erwähnt wird.

Abhängig von der Komplexität Ihrer Anwendung und ihrer Lokalisierung würde ich dringend empfehlen, einen alternativen Ressourcenanbieter zu implementieren und lokalisierte Ressourcen in einer Datenbank zu halten. Mit dem Standardschema für die ASP.NET-Lokalisierung werden alle Ressourcen in RESX-Dateien gespeichert.

  1. Sind ein Schmerz im Hintern, um in Visual Studio zu bearbeiten
  2. Begrenzen Sie die Verteilung und Verwaltung lokalisierter Ressourcen, nachdem die Anwendung kompiliert / versendet / ausgeführt wurde.

Ziehen Sie als möglichen Anwendungsfall in Betracht, Sprachpakete für Ihre Anwendung bereitzustellen und Sprachen über die Benutzeroberfläche zu importieren und zu exportieren. RESX-Dateien würden hier nicht helfen.

In solchen Szenarien ist ein alternativer Ressourcenanbieter sehr hilfreich. Weitere Informationen zur Implementierung finden Sie hier . Natürlich ist dies ein seltener Fall, der in Unternehmensanwendungen häufiger vorkommt, aber immer noch gültig ist.

Slavo
quelle
1
Vielen Dank, dass Sie sich die Zeit genommen haben, diese tollen Antworten zu lesen und dennoch etwas Neues und Nützliches beizutragen.
Smartcaveman
+1; Ich habe eine umfangreiche Webanwendung in Asp.NET erstellt und am Ende haben wir Übersetzungen über die Datenbank erstellt. Oft wurden neue Funktionen hinzugefügt, aber da unsere Übersetzer keine Experten für die verwendete Terminologie waren, konnten wir schnell verärgerte Kunden-E-Mails der Art "Warum verwenden Sie das Wort Y für X, was eindeutig falsch ist?" Adressieren.
Gregopet
3

Das Wichtigste ist, den Inhalt in verschiedenen Sprachen zu verwalten. Ich habe selbst einige Web-Sites entwickelt und die Verwaltung der Inhalte in verschiedenen Sprachen ist die größte Herausforderung.

Ich verwende die Datenbank zum Speichern der Ressourcen / Inhalte. Es gibt mir die Flexibilität, jede gewünschte Sprachunterstützung hinzuzufügen. Ich habe die Logik implementiert, auf die englische Sprache zurückzugreifen, wenn eine Ressource in einer bestimmten Sprache nicht gefunden wird.

Sie können später einen Übersetzer verwenden, um den englischen Wert in eine beliebige Sprache zu konvertieren.


quelle
2

Zusammenfassung der bei der Internationalisierung zu berücksichtigenden Punkte:

  • Alle Informationen sollten internationalisiert werden. Beachten Sie, dass die Grafiken möglicherweise Informationen enthalten, die wir internationalisieren möchten.

  • Die Größe der Felder oder Zeichenfolgen hängt von der Sprache ab, da dies zu Problemen führen kann.

  • Die Reihenfolge der Wörter hängt von der Sprache ab, in der wir uns befinden. Daher ist die Reihenfolge in einer Sprache in einer anderen gleich.

  • Wir müssen berücksichtigen, dass sich das Datumsformat von einer Sprache in eine andere ändert


quelle
1

Machen Sie den Türkei-Test :

Die Internationalisierung von Software ist unter den besten Umständen schwierig , aber es hat mich immer wieder überrascht, wie oft ein bestimmtes Land über Internationalisierungsprobleme diskutiert hat: die Türkei ...

Wenn Sie sich für Lokalisierung oder Internationalisierung interessieren, zwingen Sie Ihren Code, so schnell wie möglich unter dem türkischen Gebietsschema zu laufen . Es ist ein starkes Signal für Ihren Code, der in den meisten - aber keineswegs allen - Kulturen und Regionen ausgeführt wird ...

Wenn Ihre Site / Ihr Programm mit einem türkischen Client gut läuft, können Sie sicher sein, dass es auf den meisten anderen Plattformen läuft.

Carra
quelle