【发布时间】:2011-07-18 08:36:42
【问题描述】:
我知道这件事已经多次出现在这些页面上,但我仍然没有找到我需要找到的“好的解决方案”。让我们开始解释吧。
.net 和 mvc 中的本地化以两种方式进行,甚至可以混合在一起:
- 资源文件(本地或全局)
- 带有视图引擎的本地化视图,可根据文化调用适当的视图
我将解释我尝试过的解决方案以及我遇到的所有问题。
资源文件中的文本,视图中的所有标签
此解决方案将让我将每个文本放入资源中,将每个标签放入视图中,甚至是 [strong] 或 [span] 等内联标签。
优点:
- 清晰的分离,本地化中没有任何结构。
- 轻松编码:从资源返回的所有内容都经过 html 编码。
缺点:
- 如果我有一个包含一些强项、几个链接等的段落,我必须将它拆分为许多资源键。这被认为会使视图太不可读,并且创建它也需要太多时间。
- 出于与上述相同的原因,如果在两种不同的语言中,[strong] 文本位于不同的位置(如“Il cane di Marco”和“Marcos's dog "),我做不到,因为我所有的标签都在视图中。
资源文件中的文本和内联标签,通过参数
此方法将使资源包含一些用于 string.Format 的占位符,这些占位符将在编码后填充内联标签。
优点:
- 清晰的分隔,文本中只有占位符,所以如果我要用 [em] 替换 [strong],我会在我将其作为参数传递的视图中执行此操作,并且它会在每种语言中进行更改
缺点:
- 编码有点困难,我必须对资源中的值进行预编码,然后使用string.Format,最后以MvcHtmlString的形式返回,告诉视图引擎在显示时不要重新编码。
- 出于与上述相同的原因,例如,包括一个 ActionLink 作为参数会很麻烦。假设我从资源中获取我的操作链接的文本。我的方法已经对其进行了编码。但是,ActionLink 方法会再次对其进行重新编码。我需要一种不同的方法来获取资源而不对其进行编码,或者需要新的辅助方法来获取 MvcHtmlString 而不是字符串作为文本参数,但两者都相当不切实际。
- 仍然需要大量时间来构建视图,必须创建所有资源键然后填充它们。
本地化视图
优点:
- 所有视图都是纯 html。没有可阅读的资源。
缺点:
- 到处都是重复的 html。我什至不需要解释这完全是邪恶的。
- 必须手动编码所有麻烦的字符,如重元音、引号等。
结论
上述技术的混合继承了优点和缺点,但仍然没有好处。我面临着寻找合适的有效解决方案的挑战,而以上所有这些都被认为是“不切实际的”和“耗时的”。
更糟糕的是,我发现没有一个工具可以将“文本”从 aspx 或 cshtml(甚至是 html)视图/页面重构为资源。那里的所有工具都可以仅将代码文件(.cs 或 .vb)中的 System.String 实例重构为资源(例如 resharper,还有一些我现在不记得了)。
所以我被困住了,自己找不到任何合适的东西,也无法在网上找到任何东西。有没有可能其他人之前没有遇到过这个问题并找到了解决方案?
【问题讨论】:
-
您是否为此选择了解决方案?我很好奇你带了什么。
-
实际上这个话题在工作中被冻结了。我提出了集成 Markdown,这可能是一个改进,但有人仍然不相信。我知道 .Net 中的本地化是通过这种方式完成的,我个人从未遇到过问题,但仍然无法说服我现在与之共事的人。
-
这太糟糕了。我喜欢纯文本标记生成,因为它是人类和机器可读的:)。我刚刚在各处使用 Markdown 启动并运行了我的博客。 codetunnel.com
标签: c# asp.net-mvc resources localization