So verwenden Sie die Lokalisierung in C #
Ich kann einfach nicht scheinen, um die Lokalisierung zu arbeiten.
Habe ich eine Klassenbibliothek. Jetzt will ich erstellen resx Dateien in es, und wieder einige Werte bezogen auf den thread-Kultur.
Wie kann ich das tun?
InformationsquelleAutor der Frage JL. | 2009-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
mit der Rechten Maustaste Eigenschaften in das Projekt, wählen Sie Hinzufügen -> New Item... in das Kontext-Menü, klicken Sie dann in der Liste der Visual C# Elemente pick "Ressourcen-Datei" und nennen es
strings.resx
.System.Threading
undSystem.Globalization
Diesen code ausführen:
Sollte es print "Hallo".
Fügen Sie nun eine neue Ressource-Datei mit dem Namen "Saiten.fr.resx" (man beachte die "fr" Teil; in diesem Fall werden die Ressourcen enthalten, die in Französisch). Hinzufügen einer string-Ressource mit dem gleichen Namen wie in Zeichenfolgen.resx, aber mit dem Wert im französischen (Name="Hello" Value="Salut"). Nun, wenn Sie den folgenden code ausführen, sollte es drucken Salut:
Was passiert, ist, dass das system suchen Sie nach einer Ressource für "fr-FR". Wird es nicht finden (da wir angegeben "fr" in Ihrer Datei"). Es wird dann wieder fallen, um die überprüfung für die "fr", die es findet (und nutzt).
Den folgenden code, wird print "Hallo":
Ist, denn es findet keine "en-US" - Ressource, und auch keine "de" Ressource, so wird wieder das Standard -, das ist die eine, die wir hinzufügen, von Anfang an.
Können Sie erstellen, Dateien mit spezifischen Ressourcen, wenn nötig (zum Beispiel strings.fr-FR.resx und strings."fr-CA".resx für Französisch in Frankreich und Kanada jeweils). In jeder solchen Datei, die Sie hinzufügen müssen, um die Ressourcen für die Zeichenfolgen, die sich aus der Ressource, dass es fallen würden, wieder zu. Wenn also der text ist der gleiche in Frankreich und Kanada, können Sie Sie in strings.fr.resx, während strings, die unterschiedlich sind in Kanadischem Französisch könnte gehen in die Saiten."fr-CA".resx.
InformationsquelleAutor der Antwort Fredrik Mörk
Es ist ganz einfach, eigentlich. Erstellen Sie eine neue Ressource-Datei, zum Beispiel
Strings.resx
. SetAccess Modifier
zuPublic
. Verwenden Sie die apprioriate template-Datei, damit Visual Studio automatisch generieren von accessor-Klasse (der name wirdStrings
in diesem Fall). Dies ist Ihre Standard-Sprache.Nun, wenn Sie wollen, um hinzuzufügen, zu sagen, Deutsche Lokalisierung, fügen Sie eine lokalisierte resx-Datei. Diese werden in der Regel
Strings.de.resx
in diesem Fall. Wenn Sie hinzufügen möchten zusätzliche Lokalisierung für, sagen wir, österreich, werden Sie zusätzlich erstellen Sie eineStrings.de-AT.resx
.Nun gehen, erstellen Sie einen string - sagen wir mal einen string mit dem Namen
HelloWorld
. In IhremStrings.resx
fügen Sie diesen string mit dem Wert "Hallo, Welt!". InStrings.de.resx
fügen Sie "Hallo, Welt!". Und inStrings.de-AT.resx
hinzufügen "Servus, Welt!". Das ist es so weit.Jetzt haben Sie diese erzeugt
Strings
Klasse, und es hat eine Eigenschaft mit einem get -HelloWorld
. Immer diese Eigenschaft wird geladen "Servus, Welt!", wenn Ihr die locale-de-AT, "Hallo, Welt! wenn Ihr Gebietsschema ist jede andere locale de (einschließlich de-DE und de-CH) und "Hallo, Welt!", wenn Ihr Gebietsschema ist etwas anderes. Wenn eine saite fehlt in der lokalisierten version der resource-manager wird automatisch zu Fuß die Kette, von der die meisten spezialisierten die invariante Ressource.Können Sie die
ResourceManager
Klasse für mehr Kontrolle darüber, wie genau Sie be-Dingen. Die generiertenStrings
- Klasse verwendet als gut.InformationsquelleAutor der Antwort OregonGhost
Super Antwort von F. Mörk. Aber wenn Sie aktualisieren möchten, übersetzung, oder neue Sprachen hinzufügen, sobald die Anwendung veröffentlicht ist, sind Sie stecken, weil Sie immer neu kompilieren zu generieren resources.dll.
Hier ist eine Lösung, um manuell kompilieren einer resource-dll. Es verwendet die resgen.exe und al.exe tools (installiert mit dem sdk).
Sagen, Sie haben einen Streicher.fr.resx Ressource-Datei, können Sie kompilieren eine Ressourcen-dll mit der folgenden batch:
Sicher sein, um die original-namespace in die Datei-Namen (hier "WpfRibbonApplication1")
InformationsquelleAutor der Antwort Eric Bole-Feysot
Neben @Fredrik Mörk ist die große Antwort auf strings, hinzufügen Lokalisierung ein Formular Folgendes tun:
"Localizable"
zutrue
Language
Eigenschaft der Sprache, die Sie möchten (von einer netten drop-down mit Ihnen allen)Diese MSDN-Artikel über das Lokalisieren von Windows Forms gibt einige mehr info auf es.
InformationsquelleAutor der Antwort noelicus
Einen fix und Ausarbeitung von @Fredrik Mörk Antwort.
Strings.resx
Ressource-Datei zu Ihrem Projekt (oder einem anderen Namen)Access Modifier
zuPublic
(im geöffnetenStrings.resx
Registerkarte "Datei")Hello
WertHello
)Visual Studio generiert automatisch eine entsprechende
Strings
Klasse, die eigentlich platziert inStrings.Designer.cs
. Die Klasse im gleichen namespace, den Sie erwarten würden, eine neu erstellte.cs
- Datei platziert werden.Dieser code druckt immer
Hello
denn dies ist die Standard-Ressource und keine sprachspezifischen Ressourcen stehen zur Verfügung:Fügen Sie nun eine neue Sprache-spezifische Ressource:
Strings.fr.resx
(für Französisch)Hello
WertSalut
)Folgende code druckt
Salut
:Welche Ressource verwendet wird, hängt von
Thread.CurrentThread.CurrentUICulture
. Es ist festgelegt, abhängig von der Windows-Benutzeroberfläche Sprache einstellen, oder kann manuell eingestellt werden, wie in diesem Beispiel. Erfahren Sie mehr über diese hier.Können Sie hinzufügen, Landes-spezifische Ressourcen wie
Strings.fr-FR.resx
oderStrings.fr-CA.resx
.Den string, der verwendet werden soll bestimmt, in dieser Reihenfolge der Priorität:
Strings.fr-CA.resx
Strings.fr.resx
Strings.resx
Beachten Sie, dass sprachspezifische Ressourcen generieren Sat-Baugruppen.
Lernen auch, wie
CurrentCulture
unterscheidet sich vonCurrentUICulture
hier.InformationsquelleAutor der Antwort Andrey Moiseev
Neben @Eric Bole-Feysot Antwort:
Dank des Satelliten-Assemblys, die Lokalisierung, die erstellt werden können, basiert auf .dll/.exe - Dateien. Auf diese Weise:
Es ist eine wenig bekannte tool namens LSACreator (kostenlos für nicht-kommerzielle Nutzung oder kaufen-option), der es Ihnen ermöglicht die Lokalisierung basiert .dll/.exe -Dateien. In der Tat, intern (in der Sprache Projekt-Verzeichnis) erstellt/verwaltet lokalisierte resx-Dateien, die Kompilierung einer assembly in ähnlicher Weise wie @Eric Bole-Feysot beschrieben.
InformationsquelleAutor der Antwort Tomasz Malik
In meinem Fall
in der AssemblyInfo.cs verhindert Dinge wie gewohnt zur Arbeit.
InformationsquelleAutor der Antwort Aleksandr