c# - 为 MVC 生成 Resx 文件

标签 c# model-view-controller globalization embedded-resource resx

我们使用 resx 文件进行全局化,并使用数据库查找可以由我们的 CS 员工配置的内容(例如选项卡名称,它们可能因产品而异),因此在设计时是未知的。

我创建了一个自定义工具来读取 resx 文件并智能地将键/值对转储到关系数据库中(匹配值,这样我们就没有重复项)。

这对我们的业务有很大帮助 - 我们不必发送每个 resx 进行翻译(并为共享词的重复翻译付费)并且我们对所有翻译都有一个“黄金标准”(在数据库中).

我创建的工具还读取数据库,获取键/值对和每个值的翻译,并为每个 resx 文件(以及每种语言的文本文件翻译)创建文本文件并自动运行 resgen.exe ,Visual Studio 附带的命令行工具,用于从生成的文本文件编译 resx 文件。

我没有任何源代码控制集成,所以我们必须手动 checkout resx 文件并在使用该工具时手动 checkin 生成的文件,但这并不是一个大问题。

我的问题是这种方法对于我们的新 MVC 项目失败了:MVC 项目要求将 resx 文件嵌入到访问修饰符为“public”的资源中。

到目前为止,我们一直在手动修复此问题,这会引入人为错误的可能性并增加大量工作。

有没有办法让 resgen.exe 创建嵌入和公开的资源文件?如果没有,是否有另一种方法可以创建 resx 文件?

更新,附加问题: 我们使用此方法生成的 resx 文件也会引发警告:

A custom tool 'PublicResXFileCodeGenerator' is associated with file '(resxname)',
but the output of the custom tool was not found in the project.
You may try re-running the custom tool by right-clicking on the file in the
Solution Explorer and choosing Run Custom Tool. 

提到的工具是我们最初用来创建resx文件的工具。有什么办法可以防止出现此警告?

最佳答案

首先,您可以使用 /publicClass 命令行选项生成公共(public)资源。另见:Resgen.exe - Resource File Generator @ msdn

其次,我不认为你可以让 resgen 默认将资源文件嵌入资源,因为它不是资源的属性,而是项目的设置。

例如:当您添加一个新资源“Resource1”时,使用向导,一个新的项目组将被添加到项目文件中:

<ItemGroup>
  <EmbeddedResource Include="Resource1.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Resource1.Designer.cs</LastGenOutput>
  </EmbeddedResource>
</ItemGroup>

也许有一些库可以以编程方式修改项目文件,但据我所知没有。

我要做的就是尝试自己序列化和反序列化项目文件,并为您生成的每个资源添加该部分。

编辑:

它还会添加不同的项目组:

<ItemGroup>
  <Compile Include="Resource1.Designer.cs">
    <AutoGen>True</AutoGen>
    <DependentUpon>Resource1.resx</DependentUpon>
    <DesignTime>True</DesignTime>
  </Compile>
</ItemGroup>

所以,除非你有一个很好的第 3 方程序来序列化、编辑、反序列化项目文件。让向导来做可能更好。

关于c# - 为 MVC 生成 Resx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997901/

相关文章:

javascript - 如何防止字符串在 # 符号处被切断?

model-view-controller - Grails无法添加对象属性。如何实现?

c# - 在 App.Config 中设置应用程序语言

.net - 将翻译后的 resx 文件放在 Visual Studio 中的不同文件夹中?

c# - HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败

c# - ZedGraph 规模都搞砸了

c# - 如果引用的对象被删除,引用变量会发生什么?

c# - 如何访问中继器内的 gridview 事件和 gridview

ios - 我应该如何创建模型类来调用 API(使用 MVC 模式)?

.net - WinForms 中是否有本地化常见文本的存储库?