2017-06-21 84 views
1

我有一个项目是为了用作动态导航的加载项。 它应该显示在当前使用的语言中,英语为标准。 为了确保这一点,我有一个设置CurrentCulture和CurrentUICulture的方法。.NET资源&动态NAV

在Dynamics NAV之外运行的测试项目中,表单显示了相应的翻译。

尽管在Dynamics NAV中使用加载项,但表单总是以英文显示,尽管当前的文化和当前的UI文化被设置为正确的语言(我通过在多种情况下进行调试来检查这一点)。

我已经尝试了两种设置:

  • 本地化的形式,在Form1有Form1.resx中和form1.de.resx
  • RESX-文件resources.resx以及从分隔resources.de.resx Form1并在InitializeComponent之后的代码中调用。

结果是在这两种情况下是相同的:
启动程序外NAV:翻译成功
从内NAV启动程序:请始终使用标准的资源

有谁知道是否有一个细节我错过了?

回答

0

这个问题非常常见:解压缩资源被编译到“de”文件夹中,结果导致NAV无法找到文件。

AssemblyResolve修复了这个问题:

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; 
    } 
} 

唯一的细节要记住的是执行InitializeComponent函数之前订阅AssemblyResolve。