了解如何本地化资源

时间:2011-05-19 09:22:55

标签: c# .net resources localization embedded-resource

我知道有很多例子,但我没有理解它...我只想本地化一些字符串和文本文件。这就是我目前接收字符串或文件内容的方法

MyResources.ResourceManager.GetString(name + "IdentString");

现在我正在寻找一种存储其他语言的方法。资源被包装到ASP.Net MVC应用程序使用的提供程序(目前大约有12个提供程序,但将来会增长)(没有附加视图!)

据我所知,有两种方法可以存档:

  • 包含资源的每种语言的附属程序集
  • 基于文件的ResourceManager,其中每种语言都有自己的二进制资源文件

据我了解,我必须在两种情况下使用外部工具,并且必须将一些附属程序集链接到源资源(每种语言一种语言),这些资源由资源自动加载经理或我必须使用 FilebasedResourceManager 从外部位置加载资源文件(每种语言的二进制版本)。这意味着在这两种情况下,只有源资源嵌入到项目中,而其他资源只是附加。我做对了还是完全错了?

一些其他信息

无需说我不知道​​应该采取哪种措施或者它们如何运作,或者是否有其他方式。当我开始寻找这个时,我想到在fr-resource.resxde-resource.resx之类的约定之后命名我的资源文件,以便资源管理器可以获取线程文化或给定的文件并尝试获取字符串从此资源或回退到默认值。但是我发现了一些关于卫星的东西(只是让我想起一首该死的歌)应该注册到web.config,但需要只用外部工具来构建...

1 个答案:

答案 0 :(得分:10)

根据文化重命名resx文件,您走在正确的道路上。但是,您可以将它们命名为以下

  • resources.resx(这将是默认的后备。)
  • resources.de.resx(这将是文化中立的德国资源。)

如果将这些文件放在默认resx旁边并将它们包含在项目中,那么编译器将负责构建sattelite程序集,资源管理器将负责查找它们。

Sattelite的组合将被放在一个带有文化名称的子文件夹中。因此,如果您输出\myApp.exe,则还会获得\de\myApp.resources.dll

您无需执行任何操作即可将这些文件链接到原始程序集。如果你“忘记”提供这些sattelite程序集,你的应用程序就没有德国资源并且会回到默认状态。