【问题标题】:Why is it better to call the ResourceManager class as opposed to loading resources directly by name?为什么调用 ResourceManager 类比直接按名称加载资源更好?
【发布时间】:2013-01-24 13:51:36
【问题描述】:

我正在对一个大型项目进行本地化,为此我手动创建了一个大型资源文件,并在代码中按名称调用每个字符串。我没有调用ResourceManager 并使用GetString(用于对话框等),而是简单地将每个字符串替换为Resources.ClassName_MethodName_StringName

我觉得我应该使用ResourceManager,但我想了解为什么在我更改所有代码以使用它之前更好。

【问题讨论】:

  • 不,你应该通过Properties.Resources.NameOfStringResource。你做对了。这就是为您创建 Resources.Designer.cs 的原因。
  • 例如,在 Razor 中,资源是“强类型”的。也就是说,您可以使用 RessourceName.StringName 而不是 RessourManager.GetString("StringName")。智能感知可以帮助您。
  • 很高兴知道我不必回去更改任何内容。 MSDN 说要为所有事情调用 ResourceManager,所以这就是为什么我认为我做错了。

标签: c# resourcemanager


【解决方案1】:

好吧,没有理由直接使用 ResourceManager(会有一些例外情况),因为如果您使用从 resx-Files 生成的代码,它所做的一切如下:

public static string MyResourceName {
    get {
        return ResourceManager.GetString("MyResourceName", resourceCulture);
    }
}

这很棒,因为您可以免费获得资源名称的编译时验证!

【讨论】:

    【解决方案2】:

    http://www.c-sharpcorner.com/uploadfile/prvn_131971/chapter-i-resources-and-localization/

    在内部,生成的类使用 ResourceManager 类,在 System.Resources 中定义 命名空间。这个类的实例可以通过 生成类的 ResourceManager 属性。 在内部,属性 访问嵌入式资源本身的过程只是 对 GetXxx 方法之一的调用(即 GetString 或 GetStream) 的 ResourceManager 实例。 例如, 可通过生成的属性过程访问的资源 Resources.MyResourceStrings。

    因此,无论如何您都在使用 YourResources.ResourceManager.GetString() 方法直接按名称调用资源。

    【讨论】:

    • 如果您将资源提供程序切换为例如 DB ResourceProvider,这是否仍然有效?
    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2013-02-22
    • 2010-12-22
    相关资源
    最近更新 更多