使用许多资源和多种语言为大型解决方案生成附属程序集

时间:2012-05-01 04:40:13

标签: .net localization resources msbuild satellite-assembly

我有一个非常大的解决方案(> 100个项目),它被翻译成10多种语言。在构建过程中生成所有必要的附属程序集的最佳方法是什么?

我知道我可以在其关联的项目中包含本地化的RESX文件,但这会给开发人员带来很多噪音。翻译由远程团队管理,他们独立地将其检查为源代码控制。每次添加新语言时,这也会产生大量工作,因为每个项目都必须进行修改以包含新的特定于文化的资源。

是否有任何后期构建工具可以搜索特定于文化的RESX文件,将它们分组到项目中并一次构建附属程序集?

如果没有,我想我可以使用DependentUpon属性隐藏主资源文件下的Visual Studio解决方案资源管理器中的本地化资源。这不能在Visual Studio UI中完成,所以我想我必须构建一个批处理将该模式应用于所有项目中的所有资源文件的工具。生成的项目文件如下所示:

<ItemGroup>
  <Compile Include="Properties\Resources.Designer.cs">
    <AutoGen>True</AutoGen>
    <DesignTime>True</DesignTime>
    <DependentUpon>Resources.resx</DependentUpon>
  </Compile>
</ItemGroup>
<ItemGroup>
  <EmbeddedResource Include="Properties\Resources.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Resources.Designer.cs</LastGenOutput>
  </EmbeddedResource>
  <EmbeddedResource Include="Properties\Resources.de.resx">
    <DependentUpon>Resources.resx</DependentUpon>
  </EmbeddedResource>
  <EmbeddedResource Include="Properties\Resources.fr.resx">
    <DependentUpon>Resources.resx</DependentUpon>
  </EmbeddedResource>
</ItemGroup>

嵌套资源在解决方案资源管理器中有一个意外的图标,但至少它们默认是隐藏的。

Visual Studio Solution Explorer with nested localized resources

2 个答案:

答案 0 :(得分:1)

您可以使用ItemGroup上的条件或单个项目将其从构建中排除。

我建议使用$(ConfigurationName)。

看这里:

MSBuild Conditions
ItemGroup Element (MSBuild)

答案 1 :(得分:0)

您可以将核心软件开发源代码控制与本地化工作隔离开来。卫星组件实际上可以放入您的构建中,因此不需要与您的代码一起构建。

因此,您可以为本地化项目设置单独的源控制系统。它将包含您的基本.resx文件的副本(您需要从核心源代码控制中更新)以及由本地化程序管理的翻译版本。然后,您可以从那里构建附属程序集,并将它们与您的核心构建相结合,以进行多语言本地化构建。