我正在使用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
并进行了翻译。当我构建项目时,在名为bin
的文件夹内的sv-se
文件夹中创建了Satellite组件。但是字符串仍然来自默认资源文件。我修改了默认文件,并立即反映了更改。
我尝试手动加载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构造函数吗?如何命名资源文件,以便我不必编辑清单名称来创建资源管理器实例?
答案 0 :(得分:0)
解决。
在项目的.csproj
中,资源的逻辑名称已更改。
将csproj更改为以下解决了我的问题
<ItemGroup>
<EmbeddedResource Include="resources.restext">
<LogicalName>resources.resources</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="resources.sv-se.restext">
<LogicalName>resources.sv-se.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>