【问题标题】:What is the best practice for overriding strings in Orchard CMS?在 Orchard CMS 中覆盖字符串的最佳实践是什么?
【发布时间】:2015-07-20 12:21:06
【问题描述】:

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

例如,我可能有一个客户更喜欢让购物车结帐按钮说“立即结帐”,而不是“去结帐”,后者是包含在购物模块视图中的字符串。

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

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

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

如果租户忽略未启用的主题中的 po 文件,则本地化/po 文件方法会很好,但话又说回来,如果核心中有一个模块或功能允许您指定字符串覆盖,那就太好了通过管理界面。我想这更像是一个“改写”任务而不是“翻译”任务。

【问题讨论】:

    标签: orchardcms


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢伯特兰。我不知道那个模块。乍一看,它看起来可能适合我的目的。我真的只是想让我的租户用一种简单的方法来改写字符串,而不必修改代码/主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2017-09-05
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多