2017-06-21 4 views
1

Ich habe ein Projekt, das als Add-In für Dynamics NAV verwendet werden soll. Es soll in der aktuell verwendeten Sprache angezeigt werden, wobei Englisch der Standard ist. Um dies sicherzustellen, habe ich eine Methode, die CurrentCulture und CurrentUICulture setzt..NET Resources & Dynamics NAV

Innerhalb eines Testprojekts, das außerhalb von Dynamics NAV ausgeführt wird, werden die Formulare mit den entsprechenden Übersetzungen angezeigt.

Wenn Sie das Add-In in Dynamics NAV verwenden, sind die Formulare immer in Englisch, obwohl die aktuelle Kultur und die aktuelle UI-Kultur auf die richtige Sprache eingestellt sind (dies wurde in mehreren Fällen durch Debugging überprüft).

Ich habe zwei Setups versucht:

  • lokalisierbaren Formen, wo form1 Form1.resx enthält und form1.de.resx
  • resx-Dateien Resources.resx und resources.de.resx, die aus getrennt sind Form1 und rief den Code direkt nach InitializeComponent auf.

Das Ergebnis ist die in beiden Fällen gleich:
Starten des Programms außerhalb NAV: Übersetzung
gelingt es von innen NAV Programm starten: Immer Standardressourcen

Wer weiß, ob es ein Detail ich vermisse?

Antwort

0

Das Problem war sehr verbreitet: Die De-Resources wurden in einen "de" -Ordner kompiliert und dadurch konnte NAV - wie so oft - die Dateien nicht finden.

AssemblyResolve fixierte dieses Problem:

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    var location = Path.Combine(
     Path.GetDirectoryName(typeof(MyForm).Assembly.Location), 
     CultureInfo.CurrentCulture.Parent.Name, 
     args.Name.Substring(0, args.Name.IndexOf(",", StringComparison.OrdinalIgnoreCase)) + ".dll"); 

    if (File.Exists(location)) 
    { 
     return Assembly.LoadFrom(location); 
    } 

    return null; 
    } 
} 

Das einzige Detail im Auge zu behalten ist zu AssemblyResolve zu abonnieren, bevor die InitializeComponent Funktion ausgeführt wird.

Verwandte Themen