资源文件作为 MVC 应用程序中的可编辑内容
Resource files as editable content in a MVC application
一位客户希望能够将任何语言添加到我目前正在构建的基于多语言 MVC 的站点。
他们将负责自己提供翻译,虽然这个过程不需要通过 GUI 启用,但它需要足够简单,所以重新编译项目是不行的。可以编辑文本文件(可能是 XML)。
在 Web.config
文件中使用分号分隔的语言代码列表(例如:en-US;de-GE
等)并在 App_GlobalResources
中使用 RESX
文件文件夹我能够满足条件...至少只要在 Razor 页面或 MVC 控制器中使用资源。
但是有一个问题 - 任何尝试使用 MVC 视图模型 类 中的资源(例如 Display
属性或 Compare
属性)都会引发错误:
System.InvalidOperationException: Cannot retrieve property 'Name' because localization failed. Type '[Resource Type Here]' is not public or does not contain a public static string property with the name '[Resource Name Here]'.
There are several 问题已经在 Whosebug 上处理这个问题,但所有问题都围绕着将资源文件从 content 文件转换为 嵌入式资源。虽然这可能会使代码正常运行,但这对我不利,因为客户端无法再编辑资源!
在这种情况下我还能做什么?
最后我放弃了使用 MVC 的自动化机制,在 Razor 文件中使用 @Resources.MyResource.DisplayName
以及添加的 data-val-required
等属性,这些属性也可以随资源一起提供。
一位客户希望能够将任何语言添加到我目前正在构建的基于多语言 MVC 的站点。
他们将负责自己提供翻译,虽然这个过程不需要通过 GUI 启用,但它需要足够简单,所以重新编译项目是不行的。可以编辑文本文件(可能是 XML)。
在 Web.config
文件中使用分号分隔的语言代码列表(例如:en-US;de-GE
等)并在 App_GlobalResources
中使用 RESX
文件文件夹我能够满足条件...至少只要在 Razor 页面或 MVC 控制器中使用资源。
但是有一个问题 - 任何尝试使用 MVC 视图模型 类 中的资源(例如 Display
属性或 Compare
属性)都会引发错误:
System.InvalidOperationException: Cannot retrieve property 'Name' because localization failed. Type '[Resource Type Here]' is not public or does not contain a public static string property with the name '[Resource Name Here]'.
There are several 问题已经在 Whosebug 上处理这个问题,但所有问题都围绕着将资源文件从 content 文件转换为 嵌入式资源。虽然这可能会使代码正常运行,但这对我不利,因为客户端无法再编辑资源!
在这种情况下我还能做什么?
最后我放弃了使用 MVC 的自动化机制,在 Razor 文件中使用 @Resources.MyResource.DisplayName
以及添加的 data-val-required
等属性,这些属性也可以随资源一起提供。