2010-12-27 8 views
2

ich nicht Lösung für mein Problem für eine sehr lange Zeit nicht finden, hoffen hier kann jemand :)Lokalisierungsdateien Pfad in Visual Studio

helfen, wie ich in Visual Studio 2008 (C#) Anwendung bin entwickeln und ich möchte machen es ist mehrsprachig.

Es ist eine Main WinForm-Anwendung (nennen Sie es Main.exe), die Plugins zur Laufzeit laden. "Plugin" ist ein UserControl kompiliert zu DLL-Datei, wo ich alle Logik und Elemente des Plugins. Bei Bedarf lädt Main.exe Assembly aus DLL-Datei:
Assembly asm = Assembly.LoadFile (pluginFilePath);
und hängen Sie UserControl an das Panel an.

Ich übersetze Projekte folgenden Weg: im Projektmappen-Explorer Ich legte Messages.resx Datei und fügen Strings und Nachrichten in Standardsprache (z. B. Name = Grüße, Wert = Guten Morgen alle). Dann erstelle ich eine Kopie der resx-Datei und nenne sie messages.es-ES.resx, um eine Übersetzung in Spanisch zu haben. Ändern Sie alle Werte in Spanisch (Name = Grüße, Wert = Hola a Todos). Gleiches gilt für andere Sprachen.
Bei der Verwendung von Code kann ich einfach verwenden:
Messages.Greetings
lokalisierten Text zu erhalten (und IntelliSense arbeitet mit dieser Lösung, also möchte ich es auf diese Weise tun).

Wenn ich Projekt kompilieren, habe ich Struktur folgende:

C: \ APP_DIR \
| ---------------- Main.exe
| - --------------- es-ES \ Main.resources.dll < - meine Hauptprogramm-Lokalisierungsdatei in es-ES dir.
| ---------------- Plugins \ < - Verzeichnis, in dem ich Plugins halten in separaten dirs

Jetzt, mit Plugin das gleiche zu tun (myPlugin.dll) gibt mir folgende Dateien:
C: \ Plugin_dir \
| --------------- myPlugin.dll
| ------------- - es-ES \ myPlugin.resources.dll < - meine Plugin Lokalisierungsdatei

Nun, das Problem ist, wenn ich versuche zu machen es arbeiten zusammen: ich Plugin mit Lokalisierungsdatei bereitstellen möchten und sie wie folgt ausgedrückt:
C: \ APP_DIR \
| ---------------- Main.exe
| ---------------- es-ES \ Main.resources.dll
| ---------------- Plugins \ MyPlugin \ myPlugin .dll
| ---------------- Plugins \ MyPlugin \ es-ES \ myPlugin.resources.dll

In main.exe stelle ich beides:
-System. Threading.Thread.CurrentThread.CurrentUICulture.Name und System.Threading.Thread.CurrentThread.CurrentCulture.Name
zu neuer CultureInfo ("es-ES") und Programm Main.exe läuft auf Spanisch, wie ich wollte, aber wenn ich Plugin von .dll laden, ist es in Standardsprache (Englisch) ...

Beide (Main und Plugin) sind nur auf Spanisch, wenn die Struktur folgendes:
C: \ APP_DIR \
| ---------------- Main.exe
| ---------------- es-ES \ Main.resources.dll
| ---------------- es- eS \ myPlugin.resources.dll
| ---------------- Plugins \ MyPlugin \ myPlugin.dll

aber das ist nicht, wie ich es möchte - ich Ich möchte nicht, dass sich die Lokalisierungsdatei des Plugins in einem anderen Verzeichnis befindet als das Plugin selbst.

Also, meine Frage ist: weiß jemand, wie man dieses Problem löst? Gibt es eine Möglichkeit, das Laden der Lokalisierungsdatei von einem bestimmten Pfad zu erzwingen oder einige Einstellungen auf die Assembly zu setzen, wo Sie danach suchen?
Mit freundlichen Grüßen,
Marcin

+0

Fügen Sie [Tags] nicht in die Betreffzeile ein, insbesondere wenn Sie dieselben Tags in das Feld tags einfügen. – abelenky

+0

Haben Sie versucht, die verschiedenen anderen Möglichkeiten zum Laden einer Baugruppe zu verwenden? Insbesondere Assembly.Load (AssemblyName)? Das scheint unterschiedliche Regeln für die Pfad- und Kontextauflösung zu haben. – Jester

Antwort

0

Gibt es eine Möglichkeit, einige Einstellungen der Montage zu „zwingen“ Laden von Lokalisierungsdatei von bestimmten Pfad oder festgelegt, wo es zu suchen?

Nein, gibt es nicht. Die Satellitenassemblys müssen sich entweder im GAC oder in Unterverzeichnissen des App-Verzeichnisses befinden. Details finden Sie unter this page.

0

Wenn ich Ihr Problem richtig verstanden habe, können Sie den spanischen Text nicht lesen, wenn sich die spanische Ressource-DLL unter Plugins \ es-ES befindet. Es funktioniert jedoch, wenn Sie die Ressourcendatei direkt in < \ es-ES legen?

Eine einfache Möglichkeit, es zu beheben, wäre, .NET zu sagen, den Ordner MyPlugins bei der Suche nach Assemblys einzubeziehen.

Sie könnten dies durch den folgenden Code in Ihrer app.config tun.

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="myPlugin"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

http://msdn.microsoft.com/en-us/library/823z9h8w(v=VS.100).aspx

2

Ich habe in einem Plugin Szenario die gleichen Probleme hat. Nachdem Assembly.LoadFile in Assembly.LoadFrom geändert wurde, funktionierte alles wie erwartet.

Verwandte Themen