.NET全球化和卫星DLL

6

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

一切似乎都很顺利,使用卫星资源程序集来翻译每个表单的字符串(根据这个教程:http://msdn.microsoft.com/en-us/library/y99d1cd3%28VS.71%29.aspx

然而,该应用程序最终将需要相当多的语言,这意味着我的工作目录中会有大量的目录(即/zh-tw,/zh-cn,/fr-FR,/ja-JP等)。我想通过将它们全部放在/languages或/resources子目录中来清理一下(换句话说,设置“卫星程序集的基路径”)。但是我已经四处搜索了,无法找到任何自定义这些卫星程序集位置的方法。

如果有任何提示,将不胜感激!

4个回答

11

我发现了一种更简单的解决方案 - 在 app.config 文件中:

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

那么你只需将所有这些目录放入 "Lang" 子目录中,它就可以直接运行!一个后期构建事件也很方便,可以在编译后自动复制它们到那个目录中 :)



1

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

会有很多子目录...那又怎样?其他所有事情都会变得非常复杂。


0
将所有资源文件(即*.resx)添加到/Resource文件夹中,并按以下方式创建ResourceManager对象:
System.Resources.ResourceManager rm = new System.Resources.ResourceManager("ApplicationName.Resources.MyResource", Assembly.GetExecutingAssembly());
这里以语言de-DE为例,您的resx文件将被命名为MyResource.de-DE.resx。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接