不同部署的不同resx c#

时间:2018-03-05 14:38:41

标签: c# deployment localization embedded-resource resourcemanager

我正在使用由' PublicResXFileGenerator'生成的嵌入式资源。它生成我的ResourceManager类。 我试图找到一种方法来支持相同语言的多个resx文件,或者以某种方式能够从已部署的应用程序修改它,但这似乎不可行。

例如客户' x'正在使用en-US翻译:

和另一位客户' y'正在使用en-US翻译:

  • 公寓房

也许上面的例子很愚蠢,但我希望你明白我的观点。 不同的用户对同一件事使用不同的命名,我想支持这一点。

有可能吗?

注意: 我的代码是用C#编写的。

1 个答案:

答案 0 :(得分:0)

默认资源文件中的字符串(可能是Resources.resx)嵌入在您的可执行文件中。

如果您定义特定于语言的资源文件(例如Resources.en-US.resx),则Visual Studio将自动生成包含本地化资源的附属DLL。

如果您将本地化资源添加到WinForms表单,则同样适用,如此处针对Form1所示。

enter image description here

卫星DLL在bin目录的子目录中生成。 DLL必须部署在具有完全相同名称的子目录中的目标计算机上。

enter image description here

这适用于任何语言的本地化字符串,但对于当前默认语言的字符串完全相同。

如果当前默认值为en-US,并且有en-US的附属DLL,并且它包含所需的资源,则.NET Framework将自动使用来自附属DLL的资源。

如果您不想从卫星DLL获取资源,没问题。不要将其部署到目标计算机。然后.NET框架将使用嵌入在可执行文件中的默认资源。

如果您只有两个版本,则可以使用默认资源文件和en-US资源文件在Visual Studio中轻松管理。如果您有两个以上的变体,那么您将需要一个策略来生成资源。最简单的方法可能是滥用另一种语言。

或者,您可以使用其他一些工具。 Winres可能会完成这项工作,但我并非100%确定。

从技术上讲,您可以定义自定义文化,例如en-US-medical,或en-US-legal,但根据我的经验,这比它的价值更令人烦恼。我不认为(仅仅是我的观点)微软坚决承诺这个概念。