【问题标题】:Language sensitive title method (Plone, Archetypes, LinguaPlone)语言敏感的标题方法(Plone、Archetypes、LinguaPlone)
【发布时间】:2017-08-30 15:07:37
【问题描述】:

我有一个使用 Archetypes 和 LinguaPlone 的 Plone 网站,其中包含国际化的内容。

我的一些对象(包括文件夹)是语言中立的,而另一些则不是。对于菜单和导航面包屑的生成,我想要一个方法

  • 返回未翻译的Title(),如果Language() 不为空(因为在这种情况下title 属性应该与语言匹配),并且
  • 否则返回Title() 的翻译(因为该对象用于多种语言,并且我有一小部分受影响的字符串)。

我在Products.LinguaPlone 包中找不到任何*title* 方法; pretty_title_or_id 显然与语言无关。

真的没有这样的方法吗?

(Products.LinguaPlone 4.1.8、Products.CMFPlone 4.3.3、Products.ATContentTypes 2.1.14)

编辑: 受影响的对象是数量有限的文件夹(靠近站点根目录),其标题很少更改;大多数其他人都有一个非空的Language(这将导致他们的Title不被翻译)或者是非文件夹(并且不会有已知的翻译,我承认,但在这些情况下,原始标题将是用过的)。我可以想象相应地修补pretty_title_or_id,我想知道为什么不这样做。

【问题讨论】:

    标签: internationalization plone plone-4.x archetypes


    【解决方案1】:

    我认为这行不通,因为导航菜单只会查看索引和元数据,而且其中肯定只有一个 Title 列,而且您肯定不想不使用那里的元数据,出于性能原因。

    理论上,您可以修补您需要的所有模板(如导航 portlet 和面包屑视图,但要彻底,您需要修补 所有查看 Title 的任何地方 , 永远)通过翻译层传递所有字符串(基本上添加i18n:domain="..." i18n:translate=""),并在.mo/.po 语言文件中维护您的翻译,但您无法在运行时更改它们。我的直觉是,这解决了一个概念上的问题,即语言中立项目可以做什么和不能做什么。

    【讨论】:

    • 嗯,我确实在我的目录元数据中有Language 信息...最重要的用途之一是生成顶部和底部菜单,其中受影响的文件夹数量非常有限。大多数其他对象要么与语言无关,要么与文件夹无关(因此不属于我的菜单)。
    • 鉴于Language 信息作为元数据的一部分,并且受影响的文件夹很少(见上文),而且它们的倾斜度很少改变 - 有什么理由不改变修补无处不在的pretty_title_or_id 方法来以这种方式处理语言?不需要i18n:translate 属性与这样的方法结合使用,顺便说一句。
    【解决方案2】:

    我会回答自己: 似乎没有这样的方法,因为 standard 元数据字段集不足以支持它。

    对于一小部分固定的语言,使用title_<lang> 元数据字段可能是一个很好的解决方案。

    【讨论】:

      【解决方案3】:

      使用 LinguaPlone 时,您会为每种语言创建不同的内容,因此使用返回不同语言值的方法没有多大意义......

      如果您想使用与语言无关的内容,您需要修补对象的 Title 方法并在那里添加您的自定义代码...无论如何,这将对目录产生影响,因为只会对默认语言内容进行编目对于索引内容和元数据,都会返回奇怪的结果......所以不鼓励这样做。

      【讨论】:

      • 它将返回设置为“语言中性”的对象(即几乎完全是文件夹)的不同值(并且其默认视图执行与语言相关的搜索,顺便说一句) .你读过我对 Ulrich 的回答了吗?
      • 是的,我读过。我的意思是,如果您结束修补 Title 或 pretty_title_or_id 方法,您将面临其他问题,例如目录搜索。因为 catalog 索引了在内容对象上调用方法 Title 的结果,并且如果您修补该方法以根据用户语言返回不同的值,catalog 将只存储其中一个值,即 Title 方法在执行目录重新索引时返回的值.因此,当您使用查找该文件夹的搜索框搜索站点时,只有在使用其索引语言的标题值时才能找到它。
      • 但是目录并不关心pretty_title_or_id,而是简单地使用Title 方法,对吧?我从未打算对Title 进行任何更改。我的用例是站点菜单,而不是一般目录搜索。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多