1

我正在开发一个在 SharpDevelop 中开发的本地化应用程序。根据教程,我遇到了一个错误:

在磁盘上找不到适合指定区域性(或中性区域性)的任何资源。基地名称:

我使用 Project | 创建了资源文件 添加 | 新项目各自的“空资源文件”(我找不到“程序集资源文件”)。此外,我将“构建操作”设置为“EmbeddedResource”。

在程序中,我有一个执行以下操作的类

// load the resource file once
resourceManager = ResourceManager.CreateFileBasedResourceManager(file, filePath, null);

// depending on user selection, I set the CultureInfo in the code behind the form, i.e.
Thread.CurrentThread.CurrentUICulture = locales[0];   // which contains "en"

// and that's the method of the same class used to lookup the values
public string getValue ( string key )
{
    return resourceManager.GetString(key);
}

SharpDevelop 3.0.0.3437 .NET 版本 2.0.50727.3053

即使仔细浏览了评论并在谷歌上搜索了很长时间,我也找不到示例或解决方案。因此,问题:

  • 如何将文化添加到资源文件本身?
  • 你能提供一个例子或链接吗?

非常感谢!

4

2 回答 2

1

CreateFileBasedResourceManager 将只处理二进制 .resources 文件(不是 .resx 文件)。

如果您坚持从外部文件加载资源而不是将资源嵌入到程序集中,则需要运行 resgen 命令行实用程序来生成 .resources 文件。因此,如果您还没有这样做,请为每种支持的文化生成一个。

否则看起来没问题。

但是,如果您希望将资源嵌入到程序集中,请在属性窗口中,将 Build Action 设置为 Embedded Resource。

如果您还希望生成一个处理所有脏活的强类型类,请将基本文件上的自定义工具(不变的)设置为 ResXFileCodeGenerator,如果需要,则将其设置为 PublicResXFileCodeGenerator(在创建附属程序集时很好)。

然后你就不需要自己加载本地化的资源了。生成的类会为您完成所有这些工作。

对于资源中的每个键,在生成的类中都会生成一个静态属性,您只需调用此属性,它非常干净,也是迄今为止最简单的方法。

除非有特殊原因从 .resources 文件加载资源,否则我总是建议将它们嵌入到 (an) 程序集中。

于 2008-11-20T17:39:09.463 回答
0

我不确定您使用的是哪个版本的 .NET,但这篇关于运行时如何定位程序集的MSDN 文章可能对您有用。

于 2008-11-20T16:46:17.777 回答