Ich kann die Lokalisierung einfach nicht zum Laufen bringen.
Ich habe eine Klassenbibliothek. Jetzt möchte ich dort Resx- Dateien erstellen und einige Werte basierend auf der Thread-Kultur zurückgeben.
Wie kann ich das machen?
c#
localization
cultureinfo
J L.
quelle
quelle
Antworten:
Klicken Sie im Projekt mit der rechten Maustaste auf Eigenschaften , wählen Sie im Kontextmenü Hinzufügen -> Neues Element ... und dann in der Liste von Visual C # -Elemente wählen "Ressourcendatei" und benennen sie
strings.resx
.System.Threading
undSystem.Globalization
Führen Sie diesen Code aus:
Es sollte "Hallo" drucken.
Fügen Sie nun eine neue Ressourcendatei mit dem Namen "strings.fr.resx" hinzu (beachten Sie den Teil "fr"; dieser enthält Ressourcen in französischer Sprache). Fügen Sie eine Zeichenfolgenressource mit demselben Namen wie in strings.resx hinzu, jedoch mit dem Wert in Französisch (Name = "Hallo", Wert = "Salut"). Wenn Sie nun den folgenden Code ausführen, sollte Salut gedruckt werden:
Was passiert ist, dass das System nach einer Ressource für "fr-FR" sucht. Es wird keine gefunden (da wir "fr" in Ihrer Datei angegeben haben "). Es wird dann auf die Suche nach" fr "zurückgegriffen, die es findet (und verwendet).
Der folgende Code gibt "Hallo" aus:
Dies liegt daran, dass keine "en-US" -Ressource und auch keine "en" -Ressource gefunden wird, sodass auf die Standardeinstellung zurückgegriffen wird, die wir von Anfang an hinzugefügt haben.
Bei Bedarf können Sie Dateien mit spezifischeren Ressourcen erstellen (z. B. strings.fr-FR.resx und strings.fr-CA.resx für Französisch in Frankreich bzw. Kanada). In jeder dieser Dateien müssen Sie die Ressourcen für die Zeichenfolgen hinzufügen, die sich von der Ressource unterscheiden, auf die zurückgegriffen werden würde. Wenn ein Text in Frankreich und Kanada identisch ist, können Sie ihn in strings.fr.resx einfügen, während Zeichenfolgen, die sich in kanadischem Französisch unterscheiden, in strings.fr-CA.resx eingefügt werden können.
quelle
Access Modifier
solltePublic
für die zu generierende Ressourcenklasse festgelegt werden. Die Klasse befindet sich nicht unbedingt im Eigenschaften-Namespace. Hier platzieren Sie die .resx-Datei.Eigentlich ist es ganz einfach. Erstellen Sie beispielsweise eine neue Ressourcendatei
Strings.resx
. SetAccess Modifier
zuPublic
. Verwenden Sie die entsprechende Dateivorlage, damit Visual Studio automatisch eine Accessor-Klasse generiert (Strings
in diesem Fall lautet der Name ). Dies ist Ihre Standardsprache.Wenn Sie beispielsweise die deutsche Lokalisierung hinzufügen möchten, fügen Sie eine lokalisierte Resx-Datei hinzu. Dies ist normalerweise
Strings.de.resx
in diesem Fall der Fall. Wenn Sie beispielsweise für Österreich eine zusätzliche Lokalisierung hinzufügen möchten, erstellen Sie zusätzlich eineStrings.de-AT.resx
.Erstellen Sie nun eine Zeichenfolge - sagen wir eine Zeichenfolge mit dem Namen
HelloWorld
. Fügen Sie in IhremStrings.resx
diesen String mit dem Wert "Hallo Welt!" Hinzu. InStrings.de.resx
, fügen Sie "Hallo, Welt!". UndStrings.de-AT.resx
fügen Sie "Servus, Welt!" Hinzu. Das war's soweit.Jetzt haben Sie diese generierte
Strings
Klasse und sie hat eine Eigenschaft mit einem GetterHelloWorld
. Wenn Sie diese Eigenschaft erhalten, wird "Servus, Welt!" Wenn Ihr Gebietsschema de-AT ist, "Hallo Welt! Wenn Ihr Gebietsschema ein anderes Gebietsschema ist (einschließlich de-DE und de-CH), und" Hallo Welt! ", wenn Ihr Gebietsschema etwas anderes ist. Wenn eine Zeichenfolge ist In der lokalisierten Version fehlt der Ressourcenmanager automatisch die Kette, von der spezialisiertesten zur invarianten Ressource.Sie können die
ResourceManager
Klasse verwenden, um mehr Kontrolle darüber zu erhalten, wie genau Sie Dinge laden. Die generierteStrings
Klasse verwendet es ebenfalls.quelle
Um die Lokalisierung zu einem Formular hinzuzufügen , gehen Sie wie folgt vor: @Fredrik Mörks großartige Antwort auf Zeichenfolgen :
"Localizable"
auftrue
Language
Eigenschaft des Formulars in die gewünschte Sprache (aus einem netten Dropdown-Menü mit allen in).Bearbeiten: Dieser MSDN-Artikel zum Lokalisieren von Windows Forms ist nicht der ursprüngliche, den ich verlinkt habe ... kann aber bei Bedarf mehr Licht ins Dunkel bringen. (der alte wurde weggenommen)
quelle
Tolle Antwort von F.Mörk. Wenn Sie jedoch die Übersetzung aktualisieren oder neue Sprachen hinzufügen möchten, sobald die Anwendung veröffentlicht wurde, stecken Sie fest, da Sie sie immer neu kompilieren müssen, um die resources.dll zu generieren.
Hier ist eine Lösung zum manuellen Kompilieren einer Ressourcen-DLL. Es verwendet die Tools resgen.exe und al.exe (mit dem SDK installiert).
Angenommen, Sie haben eine Strings.fr.resx-Ressourcendatei. Sie können eine Ressourcen-DLL mit dem folgenden Stapel kompilieren:
Achten Sie darauf, den ursprünglichen Namespace in den Dateinamen beizubehalten (hier "WpfRibbonApplication1").
quelle
Eine Korrektur und Ausarbeitung der Antwort von @Fredrik Mörk .
strings.resx
Ihrem Projekt eine Ressourcendatei hinzu (oder einen anderen Dateinamen).Access Modifier
aufPublic
(in der geöffnetenstrings.resx
Datei tab)Hello
, WertHello
)Visual Studio generiert automatisch eine entsprechende
strings
Klasse, in die tatsächlich eingefügt wirdstrings.Designer.cs
. Die Klasse befindet sich im selben Namespace, in dem eine neu erstellte.cs
Datei abgelegt werden soll.Dieser Code wird immer gedruckt
Hello
, da dies die Standardressource ist und keine sprachspezifischen Ressourcen verfügbar sind:Fügen Sie nun eine neue sprachspezifische Ressource hinzu:
strings.fr.resx
(für Französisch)Hello
, WertSalut
)Der folgende Code wird gedruckt
Salut
:Welche Ressource verwendet wird, hängt davon ab
Thread.CurrentThread.CurrentUICulture
. Sie wird abhängig von der Spracheinstellung der Windows-Benutzeroberfläche festgelegt oder kann wie in diesem Beispiel manuell festgelegt werden. Mehr dazu hier .Sie können länderspezifische Ressourcen wie
strings.fr-FR.resx
oder hinzufügenstrings.fr-CA.resx
.Die zu verwendende Zeichenfolge wird in dieser Prioritätsreihenfolge festgelegt:
strings.fr-CA.resx
strings.fr.resx
strings.resx
Beachten Sie, dass sprachspezifische Ressourcen Satellitenassemblys generieren .
Erfahren Sie auch, wie
CurrentCulture
sich vonCurrentUICulture
hier unterscheidet .quelle
In meinem Fall
in der AssemblyInfo.cs verhinderte, dass die Dinge wie gewohnt funktionierten.
quelle
Zusätzlich zu @Eric Bole-Feysot Antwort:
Dank Satelliten-Assemblys kann die Lokalisierung basierend auf DLL- / EXE- Dateien erstellt werden. Diesen Weg:
Es gibt ein wenig bekanntes Tool namens LSACreator (kostenlos für nichtkommerzielle Zwecke oder Kaufoptionen), mit dem Sie eine Lokalisierung basierend auf DLL- / EXE-Dateien erstellen können. Intern (im Verzeichnis des Sprachprojekts) werden lokalisierte Versionen von Resx-Dateien erstellt / verwaltet und eine Assembly auf ähnliche Weise wie bei @Eric Bole-Feysot beschrieben kompiliert .
quelle
ResourceManager und .resx sind etwas chaotisch.
Sie können Lexical.Localization ¹ verwenden, mit dem Standardwerte und kulturspezifische Werte in den Code eingebettet und in externe Lokalisierungsdateien für weitere Kulturen (wie .json oder .resx) erweitert werden können.
¹ (Ich bin Betreuer dieser Bibliothek)
quelle
Im Allgemeinen legen Sie Ihre Übersetzungen in Ressourcendateien ab, z. B. resources.resx.
Jede spezifische Kultur hat einen anderen Namen, z. B. resources.nl.resx, resources.fr.resx, resources.de.resx,…
Der wichtigste Teil einer Lösung besteht nun darin, Ihre Übersetzungen zu pflegen. Installieren Sie in Visual Studio das Microsoft MAT-Tool: Multilingual App Toolkit (MAT). Funktioniert mit winforms, wpf, asp.net (core), uwp,…
Im Allgemeinen, z. B. für eine WPF-Lösung, im WPF-Projekt
[assembly: System.Resources.NeutralResourcesLanguage("en")]
Sie werden sehen, dass ein neuer Ordner mit dem Namen "MultilingualResources" erstellt wird, der eine
....nl.xlf
Datei enthält.Jetzt müssen Sie nur noch Folgendes tun:
(Die XLF-Dateien sollten mit dem "Mehrsprachigen Editor" geöffnet werden. Wenn dies nicht der Fall ist, klicken Sie mit der rechten Maustaste auf die XLF-Datei, wählen Sie "Öffnen mit ..." und wählen Sie "Mehrsprachiger Editor".
Habe Spaß! Jetzt können Sie auch sehen, was nicht übersetzt wurde, Übersetzungen in xlf an externe Übersetzungsunternehmen exportieren, erneut importieren, Übersetzungen aus anderen Projekten recyceln usw.
Mehr Info:
quelle