在 Orchard CMS 中覆盖字符串的最佳实践是什么?

What is the best practice for overriding strings in Orchard CMS?

我经常遇到这样的情况,即需要针对 Orchard CMS 中的特定租户和主题更改来自各种模块或核心功能的特定字符串的措辞。

例如,我可能有一个客户更喜欢让购物车结帐按钮显示 "Checkout Now" 而不是 "Go to checkout",后者是包含在购物模块视图中的字符串。

我可以简单地覆盖主题中的 razor 视图并更改字符串,但是视图通常非常复杂,仅仅更改一个字符串就覆盖视图感觉不对。

我尝试过的另一种方法是在我的主题中定义一个 po 翻译文件来覆盖模块中的字符串。这是可行的,因为模块中的字符串是使用 T() 语法定义的。但是,我注意到,一旦我在我的主题中为一个字符串定义了一个覆盖,这个覆盖就会影响所有租户,而不仅仅是一个启用了这个主题的租户。我倾向于认为 modules/themes 内的翻译应该被未启用的租户忽略。

所以我想知道这种情况的最佳方法是什么?

如果租户忽略未启用的主题中的 po 文件,localisation/po 文件方法是可以的,但是话又说回来,如果核心中有允许您的模块或功能,那将是非常好的通过管理界面指定字符串覆盖。我想这更像是一项 "rewording" 任务,而不是一项 "translation" 任务。

执行此操作的首选方法是通过模板覆盖。如果您不想这样做,您实际上可以分解形状,并将渲染委托给更容易覆盖的较小模板。这是通过简单地将您希望能够单独覆盖的模板部分重构为一个单独的模板来完成的。 post 解释了如何做到这一点:http://weblogs.asp.net/bleroy/creating-shapes-on-the-fly

如果您不愿意这样做,您可以使用此模块从数据库而不是 po 文件中获取字符串:http://gallery.orchardproject.net/List/Modules/Orchard.Module.Q42.DbTranslations应该可以修改它以适合您的 sceanrio。