C# .NET全球化&;卫星DLL';s

C# .NET全球化&;卫星DLL';s,c#,.net,localization,resources,globalization,C#,.net,Localization,Resources,Globalization,我正在本地化我用C#编写的一个应用程序 使用附属资源程序集翻译每个表单的字符串(根据本教程:)似乎一切都很顺利 然而,应用程序最终将需要相当多的语言,这意味着在我的工作目录中加载目录(即/zh-tw、/zh-cn、/fr-fr、/ja-JP等)。我想通过将它们定位在/languages或/resources子目录中(换句话说,设置“附属程序集的基本路径”)来清理一下。但我已经到处搜索,找不到任何方法来定制这些卫星组件的位置 任何提示都将不胜感激 嗯,我不会在这里改变任何事情。NET中有一种标准的

我正在本地化我用C#编写的一个应用程序

使用附属资源程序集翻译每个表单的字符串(根据本教程:)似乎一切都很顺利

然而,应用程序最终将需要相当多的语言,这意味着在我的工作目录中加载目录(即/zh-tw、/zh-cn、/fr-fr、/ja-JP等)。我想通过将它们定位在/languages或/resources子目录中(换句话说,设置“附属程序集的基本路径”)来清理一下。但我已经到处搜索,找不到任何方法来定制这些卫星组件的位置


任何提示都将不胜感激

嗯,我不会在这里改变任何事情。NET中有一种标准的本地化机制,它基于卫星DLL和这些子目录。如果您使用一个用于本地化的工具,例如Passolo,它也将完全支持此结构,而不支持其他任何东西


将会有很多子目录。。。那又怎么样?其他一切都将非常复杂。

找到了更简单的解决方案-在app.config中:

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


然后,你可以把所有这些dir都扔到“Lang”子目录中,它就可以开箱即用了!编译后,生成后事件也可以方便地将它们自动复制到其中:)

将所有资源文件(即.*.resx)添加到/resource文件夹,并创建ResourceManager的对象,如下所示

System.Resources.ResourceManager rm=new System.Resources.ResourceManager(“ApplicationName.Resources.MyResource”,Assembly.getExecutingGassembly())

这里说,对于lang de,您的resx文件将命名为MyResource.de-de.resx