.NET 资源与动态 NAV
.NET Resources & Dynamics NAV
我有一个项目旨在用作 Dynamics NAV 的加载项。
它应该以当前使用的语言显示,以英语为标准。
为了确保这一点,我有一个设置 CurrentCulture 和 CurrentUICulture.
的方法
在 Dynamics NAV 之外运行的测试项目中,表格显示有适当的翻译。
尽管在 Dynamics NAV 中使用加载项时,表单始终为英文,尽管当前文化和当前 UI 文化被设置为正确的语言(我通过调试在多种情况下检查了这一点).
我尝试了两种设置:
- 可本地化的表单,其中 form1 包含 form1.resx 和 form1.de.resx
- resx 文件 resources.resx 和 resources.de.resx 与 Form1 分开并在 InitializeComponent 之后立即在代码中调用。
两种情况的结果是一样的:
在 NAV 外启动程序:翻译成功
从 NAV 内部启动程序:始终使用标准资源
有人知道我是否遗漏了什么细节吗?
这个问题很常见:去资源被编译到一个 "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。
我有一个项目旨在用作 Dynamics NAV 的加载项。 它应该以当前使用的语言显示,以英语为标准。 为了确保这一点,我有一个设置 CurrentCulture 和 CurrentUICulture.
的方法在 Dynamics NAV 之外运行的测试项目中,表格显示有适当的翻译。
尽管在 Dynamics NAV 中使用加载项时,表单始终为英文,尽管当前文化和当前 UI 文化被设置为正确的语言(我通过调试在多种情况下检查了这一点).
我尝试了两种设置:
- 可本地化的表单,其中 form1 包含 form1.resx 和 form1.de.resx
- resx 文件 resources.resx 和 resources.de.resx 与 Form1 分开并在 InitializeComponent 之后立即在代码中调用。
两种情况的结果是一样的:
在 NAV 外启动程序:翻译成功
从 NAV 内部启动程序:始终使用标准资源
有人知道我是否遗漏了什么细节吗?
这个问题很常见:去资源被编译到一个 "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。