【问题标题】:Localization with SharpDevelop使用 SharpDevelop 进行本地化
【发布时间】:2008-11-25 23:00:32
【问题描述】:

我正在开发一个在 SharpDevelop 中开发的本地化应用程序。基于tutorial 我遇到了一个错误:

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

我使用 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

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

  • 如何将区域性添加到资源文件本身?
  • 能否提供示例或链接?

非常感谢!

【问题讨论】:

    标签: c# localization sharpdevelop


    【解决方案1】:

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

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

    否则看起来没问题。

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

    如果你还想生成一个强类型的类来处理所有的脏活, 将 base file only 上的自定义工具(不变的)设置为 ResXFileCodeGenerator, 或 PublicResXFileCodeGenerator,如果你需要的话(在创建附属程序集时很好)。

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

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

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

    【讨论】:

      【解决方案2】:

      我不确定您使用的是哪个版本的 .NET,但 how the runtime locates assemblies 上的这篇 MSDN 文章可能对您有用。

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多