1

我有一个非常大的解决方案(>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 解决方案资源管理器

4

2 回答 2

1

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

我建议使用 $(ConfigurationName)。

看这里:

MSBuild 条件
ItemGroup 元素 (MSBuild)

于 2012-07-23T13:20:34.060 回答
0

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

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

于 2012-05-01T13:28:35.647 回答