首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ResourceManager

使用ResourceManager
EN

Stack Overflow用户
提问于 2012-01-11 19:29:10
回答 5查看 117K关注 0票数 31

我试图在ResourceManager类中使用C#,但是在创建ResourceManager类的新实例时不知道用什么代替basename。

我有一个单独的项目,其中包含资源文件,该文件由上面的项目引用,名称如下:

  • Resources.resx
  • Resources.es-ES.resx

如果我有如下代码片段,那么当我想使用英文或西班牙文版本的资源时,应该用什么代替basename呢?

代码语言:javascript
复制
ResourceManager RM = new ResourceManager(basename,Assembly.GetExecutingAssembly());

我试过汤姆建议的方法,但我发现了一个臭名昭著的错误。

找不到适合指定区域性或中性区域性的任何资源。

我的解决方案有两个项目,其中项目YeagerTech是一个web应用程序,项目YeagerTechResources包含所有资源。项目YeagerTech有对YeagerTechResources的引用。

在创建资源管理器时,我有以下语法:

代码语言:javascript
复制
ResourceManager RM = new ResourceManager("YeagerTechResources.Resources",
    Assembly.GetExecutingAssembly());

很明显,这是不正确的。

YeagerTechResources项目中的资源文件将其BuildAction设置为嵌入式资源。

我的资源文件的名称是: Resources.resx和Resources.es-ES.resx。

如果有人可以简单地告诉我在实例化资源管理器时根据我的项目和资源文件名使用的确切语法,我将非常感激.

我已经做了我能想到的一切来解决这个问题而不能.

这是我最后一次尝试在这里解决它..。

代码语言:javascript
复制
ResourceManager RM = new ResourceManager("YeagerTechResources.Resources", Assembly.GetExecutingAssembly());

sb.Append(RM.GetString("RegisterThanks"));

在执行上面的代码后,我得到了以下错误:

找不到适合指定区域性或中性区域性的任何资源。确保"YeagerTechResources.Resources.resources“在编译时正确嵌入或链接到程序集"YeagerTech”中,或者确保所需的所有附属程序集都是可加载和完全签名的。

我能够完全没有问题地使用HTML中的资源,但是当进入Controller中的C#代码时,我会继续得到上面的错误。

任何帮助,我需要准确的语法,基于我的项目,将不胜感激。

EN

回答 5

Stack Overflow用户

发布于 2015-04-22 08:57:15

有一种通过字符串读取资源的简单方法令人惊讶:

代码语言:javascript
复制
ResourceNamespace.ResxFileName.ResourceManager.GetString("ResourceKey")

它是通过不能使用“点符号”的键读取资源的简洁而优雅的解决方案(例如,当资源键被持久化在数据库中时)。

票数 55
EN

Stack Overflow用户

发布于 2012-02-09 13:43:15

检查您需要它查看生成的.resources文件的字符串的快速和肮脏的方法。

您的.resources在资源项目obj/Debug目录中生成。(如果不是,右键单击解决方案资源管理器中的.resx文件,然后按“运行自定义工具”生成.resources文件)

导航到此目录并查看文件名。您应该看到以XYZ.resources结尾的文件。复制该文件名并删除尾随的.resources,这是您应该加载的文件。

例如,在obj/Bin目录中,我有一个文件:

MyLocalisation.Properties.Resources.resources

如果资源文件位于同一个类库/应用程序中,我将使用以下C#

代码语言:javascript
复制
ResourceManager RM = new ResourceManager("MyLocalisation.Properties.Resources", Assembly.GetExecutingAssembly());

但是,听起来您可能需要使用来自单独类库/应用程序的资源文件。

代码语言:javascript
复制
Assembly localisationAssembly = Assembly.Load("MyLocalisation");
ResourceManager RM =  new ResourceManager("MyLocalisation.Properties.Resources", localisationAssembly);
票数 21
EN

Stack Overflow用户

发布于 2013-08-22 09:00:15

在这种情况下,这就是答案可能会有所帮助。

如果主项目已经引用了资源项目,那么您可以在代码中显式地使用生成的资源类,并从中访问它的ResourceManager。因此,类似于:

代码语言:javascript
复制
ResourceManager resMan = YeagerTechResources.Resources.ResourceManager;

// then, you could go on working with that
ResourceSet resourceSet = resMan.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
// ...
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8825433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档