2009-04-28 10 views
6

Ich habe mehrere Sprachen mit dem folgenden kurzen Artikel hinzugefügt.C# Erstellen eines Setups für mehrsprachige

Wenn Sie zum Beispiel deutscher Sprache hinzufügen, werden Sie diese Dateien haben: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

In erster Datei finden Sie Ressourcen für neutrale Sprache, wie Strings, Bilder, ..

So müssen Sie jetzt auch Ressourcen für Zeichenfolgen im Code verwendet. Fügen Sie eine neue Ressourcendatei hinzu und nennen Sie sie formMain.Strings.resx Dann gebe ich Name, Wert-Paar für jede Zeichenfolge, die übersetzt werden soll. Wenn Sie eine Ressourcendatei hinzufügen, wird sie automatisch eingegeben, da bei jedem Schließen des Resx-Designers automatisch eine andere Datei mit dem Namen formMain.Strings.Designer.cs generiert wird.

Fügen Sie eine weitere Ressource mit dem Namen formMain.Strings.de-DE.resx hinzu. Fügen Sie denselben Namenschlüssel aus der vorherigen Ressource hinzu und ändern Sie einfach den Wert mit entsprechenden deutschen Wörtern. Um nun auf die erstellte Ressource von der Quelle zuzugreifen, wird es so aussehen.

MessageBox.Show (formMain_Strings.SameStringName);

Allerdings habe ich meine Thai-Sprache geändert. Alles funktioniert gut, wenn ich meine App in VS laufen lasse.

Sobald ich jedoch ein Setup-Projekt hinzufüge und auf dem Client-Rechner installiere, wird die Sprache nicht in Thai geändert und nur die Standardsprache beibehalten.

Also habe ich die Ressourcendateien und die TH-TH-DLL zum Projekt-Setup hinzugefügt. Und ich bekomme immer noch das gleiche Problem.

Packaging file 'Lang.Strings.resx'... 
Packaging file 'MultiLanguage.resources.dll'... 
Packaging file 'MultiLanguage.exe'... 
Packaging file 'Lang.Strings.th-TH.resx'... 

Da läuft alles gut, wenn in Visual Studio ausgeführt wird. Gibt es etwas, was ich tun muss, damit es ausgeführt wird, sobald es installiert wurde? Alle Eigenschaften für jede Datei, die ich habe, behalten den Standard bei.

Vielen Dank,

=========

static void Main() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH"); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

Antwort

10

fand ich die Antwort

das Setup-Projekt in Projektmappen-Explorer klicken und dann klicken sie auf hinzufügen \ Projektausgabe \ Wählen Sie aus dem Dialog das Projekt aus, für das Sie die Lokalisierung (sat elite) Assemblies und dann Localized resources.

Nach der Installation in dem Ordner, den ich installieren, habe ich den Th-TH-Ordner, der die Satelliten-Baugruppe enthält.

Danke,

+0

Wenn ich kann, sind Sie besser dran, Setup-Projekt so bald wie möglich zu ditching und Wechsel zu Windows Installer XML (WiX). Ich habe ein Produkt einmal mit einem Setup-Projekt ausgeliefert. Nie wieder. Niemals wieder. – Promit

+0

Ich habe mich kurz mit WiX beschäftigt und es enthält auch nicht die lokalisierte Ressourcen-DLL im Setup-Paket. Es scheint, dass lokalisierte Ressourcen in jeder Art von Setup-Projekt einfach nicht funktionieren (ich arbeite hier an einem VC++ - Projekt). – galmok

1

Versuchen in diese beim Start der App das Hinzufügen (wenn er nicht da ist):

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 

Hier ist ein short article diskutieren einige der Möglichkeiten, wie dies funktioniert, und Optionen für die Auswahl des Gebietsschemas zur Laufzeit.


bearbeiten nach Kommentare:

Achten Sie darauf, Ihre Satelliten Montage an der entsprechenden Stelle ist, und richtig gebaut. Von diesem Artikel referenzierte ich:

"Wenn .NET Runtime eine Anwendung startet, sucht es nach einer möglichen Satellitenassemblierungsdatei. Eine Satellitenassemblydatei ist eine Nur-Ressourcen-Assemblydatei mit der Erweiterung .resources.dll anstelle von .exe ir. dll (wenn die Hauptbaugruppe eine Bibliothek ist.) Satellitenassemblydateien befinden sich immer in einem sprachenspezifischen Unterverzeichnis des Hauptverzeichnisses der Anwendung.Wenn die Anwendungsdatei Converter.exe ist, dann ist die japanische Satellitenassemblydatei ja \ Converter.resources.dll."

Es gibt ein paar Dinge, die Sie hier überprüfen sollten. Überprüfen Sie den Namen der Baugruppe. Stellen Sie auch sicher, dass es an der richtigen Stelle ist. In Ihrem Fall sollte es in einem th-TH-Unterverzeichnis mit dem entsprechenden Namen sein unter dem ausführbaren Datei. Wenn es da ist, sollte es richtig gefunden und verwendet werden.

Hier another good source of information zu diesem Thema.

+0

Hallo. Ich habe dies bereits zu meinem Formular Ladevorgang hinzugefügt. Im Visual Studio funktioniert alles gut. Nur wenn ich auf dem Computer des Kunden installiere. public Form1() { System.Threading.Thread.CurrentThread.CurrentUICulture = neu System.Globalization.CultureInfo ("th-TH"); InitializeComponent(); } – ant2009

+0

Versuchen Sie, es in Ihre Main() - Routine zu verschieben, bevor Sie Ihr Formular laden. Ich glaube, es ist zu spät bei form_load ... zu diesem Zeitpunkt wurden die Assemblys bereits geladen und ausgewählt. –

+0

Hallo. Ich habe es aus dem Formular_Load entfernt und in meinem Hauptverzeichnis abgelegt. Es funktioniert jedoch im visuellen Studio. Aber sobald ich auf dem Client-Computer installiert habe, wird nur die Standardsprache und nicht die Thai angezeigt. In meinem ersten Beitrag habe ich meine Ressourcendateien und resource.dll hinzugefügt. Soll ich das tun? – ant2009