【发布时间】:2016-02-02 17:57:50
【问题描述】:
我正在开发 Microsoft 的 HealthVault SDK,我正在尝试为 SDK 提供的文本资源添加一些翻译。
这是一个使用的资源文件
resources.restext
# Used in many files
ListSeparator=,
ListFormat=, {0}
GroupSeparator=;
GroupFormat=; {0}
Range={0} - {1}
DateRange={0} to {1}
这是初始化资源管理器的代码。
private static ResourceManager InitRMWithAssembly(
string baseName,
Assembly assemblyToUse,
Type usingResourceSet)
{
ResourceManager rm = null;
if (usingResourceSet != null &&
baseName != null &&
assemblyToUse != null)
{
rm =
new ResourceManager(
baseName,
assemblyToUse,
usingResourceSet);
}
else if (usingResourceSet != null &&
baseName == null &&
assemblyToUse == null)
{
rm = new ResourceManager(usingResourceSet);
}
else if (usingResourceSet == null &&
baseName != null &&
assemblyToUse != null)
{
rm = new ResourceManager(baseName, assemblyToUse);
}
else
{
throw new ArgumentException("assemblyToUse cannot be null", "assemblyToUse");
}
return rm;
}
其中 baseName 是 resources,assemblyToUse 是 Assembly.GetCallingAssembly()。
默认字符串存在于名为resources.restext 的文本文件中。我希望将一些字符串翻译成瑞典语,我添加了resources.sv-se.restext 并进行了翻译。当我构建项目时,Satellite assembles 是在名为sv-se 的文件夹内的bin 文件夹中创建的。但是字符串仍然取自默认资源文件。我修改了默认文件,更改立即反映。
我尝试手动加载 dll,清单名称由名称 Microsoft.Health.ItemTypes.resources.sv-se.resources 组成。我用该名称和相同的程序集初始化了ResourceManager。
var rm = new ResourceManager("Microsoft.Health.ItemTypes.resources.sv-se.resources", assembly);
rm.GetString("Key"); // Causes MissingManifestResourceException
但是,我尝试并能够使用以下方法获取密钥
var rm = new ResourceManager("Microsoft.Health.ItemTypes.resources.sv-se", assembly); // manifest name - trailing resources
rm.GetString("Key"); // works!
我的问题是这样的:
ResourceManger的正确使用方法是什么?卫星程序集是否应该传递给 RM 构造函数?以及必须如何命名资源文件,这样我就不必编辑清单名称来创建资源管理器实例?
【问题讨论】:
标签: c# .net healthvault