我正在研究 Microsoft 的 HealthVault SDK,我正在尝试为 SDK 提供的文本资源添加一些翻译。
这是一块使用的资源文件
资源.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
并进行了翻译。当我构建项目时,在bin
名为sv-se
. 但是字符串仍然取自默认资源文件。我修改了默认文件,更改立即反映。
我尝试手动加载 dll,清单名称由 name 组成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 构造函数?以及必须如何命名资源文件,这样我就不必编辑清单名称来创建资源管理器实例?