2017-06-13 148 views
1

我有一个Plone网站,使用Archetypes和LinguaPlone进行国际化内容。语言敏感的标题方法(Plone,Archetypes,LinguaPlone)

我的一些对象(包括文件夹)是语言中立的,其他则不是。用于产生菜单和导航路径的,我想这

  • 返回非翻译Title()一个方法中,如果Language()非空(因为在此条件下的title属性应该匹配的语言),和
  • 否则返回Title()的翻译(因为该对象用于多种语言,并且我有一小部分受影响的字符串)。

我在Products.LinguaPlone包中找不到任何*title*方法; pretty_title_or_id显然是语言不可知的。

难道真的没有这种方法吗?

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

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

回答

0

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

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

1

我不认为这会起作用,因为导航菜单只会查看索引和元数据,并且绝对只有一个Title列,并且您绝对不希望在其中使用元数据,出于性能原因。

你可以在理论上,打补丁需要的所有模板(如导航portlet和面包屑的Viewlet,但要彻底,你需要修补一切,着眼于Title任何地方,曾经)通过所有他们的字符串通过翻译层(基本上增加了i18n:domain="..." i18n:translate=""),并且保持翻译在.mo/语言文件中,但是在运行时您将无法更改它们。我的直觉就是,这是一个概念性问题的补丁,它与朗朗中立的项目可以或不可以做的事情有关。

+0

嗯,我在我的目录的元数据中有'语言'信息... 其中一个最重要的用途是生成顶部和底部菜单,受影响的文件夹数量非常有限。大多数其他对象是语言非中性或非文件夹(因此不属于我的菜单)。 – Tobias

+0

由于'语言'信息是元数据的一部分,受影响的文件夹很少_(见上文)_并且它们的倾斜很少发生变化 - 因此无法修补无处不在的'pretty_title_or_id'方法来处理语言?不需要'i18n:translate'属性和这种方法的结合,顺便说一句。 – Tobias

0

使用LinguaPlone创建不同内容的敌人每一种语言,因此具有返回不同的语言值没有多大意义的方法...

如果你想要做的,与语言无关的内容,你会需要修补对象的标题方法并在其中添加自定义代码......无论如何,这将对目录产生影响,因为只有默认语言内容才会针对索引内容和元数据进行编录,并且会返回奇怪的结果...所以这是不鼓励的。

+0

它将返回设置为“language neutral”_only_(并且其默认视图执行依赖于语言的搜索,btw)的对象(即几乎完全是文件夹)的不同值。你是否看过我对Ulrich的回答的评论? – Tobias

+0

是的,我读过它。我的意思是,如果您结束修补标题或pretty_title_or_id方法,您将面临其他问题,如目录搜索。由于目录对内容对象调用方法Title的结果进行索引,并且如果您修补该方法以根据用户语言返回不同的值,则目录将只存储其中一个值,即Title方法在执行目录reindex时返回的值。因此,当您使用搜索框查找该文件夹来搜索该网站时,只有在使用索引语言的标题值时才能找到该文件。 –

+0

但目录不关心'pretty_title_or_id',而是简单地使用'Title'方法,对吧?我从来没有打算对'标题'做任何修改。而我的用例是网站菜单,而不是一般的目录搜索。 – Tobias