Internationalization 语言敏感标题法(Plone、原型、LinguaPlone)

Internationalization 语言敏感标题法(Plone、原型、LinguaPlone),internationalization,plone,plone-4.x,archetypes,Internationalization,Plone,Plone 4.x,Archetypes,我有一个Plone网站,内容国际化,使用原型和LinguaPlone 我的某些对象(包括文件夹)与语言无关,而其他对象则与语言无关。对于菜单和导航面包屑的生成,我想要一个 如果语言()为非空(因为在此条件下Title属性应与语言匹配),则返回未翻译的Title(),并且 否则返回Title()的翻译(因为该对象用于多种语言,并且我有一小组受影响的字符串) 我在Products.LinguaPlone包中找不到任何*title*方法pretty_title_或_id显然与语言无关 真的没有这样

我有一个Plone网站,内容国际化,使用原型和LinguaPlone

我的某些对象(包括文件夹)与语言无关,而其他对象则与语言无关。对于菜单和导航面包屑的生成,我想要一个

  • 如果
    语言()
    为非空(因为在此条件下
    Title
    属性应与语言匹配),则返回未翻译的
    Title()
    ,并且
  • 否则返回
    Title()
    的翻译(因为该对象用于多种语言,并且我有一小组受影响的字符串)
我在
Products.LinguaPlone
包中找不到任何
*title*
方法
pretty_title_或_id
显然与语言无关

真的没有这样的方法吗

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


编辑:受影响的对象是数量有限的文件夹(靠近站点根目录),其标题很少更改;大多数其他人都有非空的
语言
(这将导致他们的
标题
无法翻译)或是非文件夹(我承认,没有已知的翻译,但在这些情况下,将使用原始标题)。我可以想象相应地修补
pretty\u title\u或\u id
,我想知道不这样做的原因。

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

理论上,您可以修补所有需要的模板(如导航portlet和面包屑viewlet,但要彻底,您需要修补所有查看
Title
的内容,无论何时何地),以便将所有字符串传递到翻译层(基本上是添加
i18n:domain=“…”i18n:translate=“
),并在
.mo
/
.po
语言文件中维护您的翻译,但在运行时无法更改它们。我的直觉是,这是一个概念性的问题,即lang中性项目可以做什么和不能做什么。

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


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

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


如果你想用独立于语言的内容来做这件事,你需要修补对象的Title方法并在那里添加你的自定义代码。。。无论如何,这将对目录产生影响,因为对于索引内容和元数据,只有默认语言内容将被编目,并且将返回奇怪的结果。。。因此,这是令人沮丧的

嗯,我的目录元数据中确实有
语言
信息。。。最重要的用途之一是生成顶部和底部菜单,受影响的文件夹数量非常有限。大多数其他对象不是语言非中性的,就是非文件夹(因此不是我菜单的一部分)。给定
语言
信息作为元数据的一部分,受影响的文件夹很少(见上文)而且他们的倾向很少改变——有什么理由不修补无处不在的
pretty\u title\u或\u id
方法以这种方式处理语言?无需将
i18n:translate
属性与此方法结合使用,顺便说一句。它将为仅设置为“语言中立”(且其默认视图执行语言相关搜索,顺便说一句)的对象(即几乎完全是文件夹)返回不同的值。你读过我对乌尔里希回答的评论吗?是的,我读过。我的意思是,如果您停止修补Title或pretty\u Title\u或\u id方法,您将面临目录搜索等其他问题。因为catalog对内容对象调用方法Title的结果进行索引,并且如果根据用户语言修补该方法以返回不同的值,catalog将只存储其中一个值,即执行catalog重新索引时Title方法返回的值。因此,当您使用搜索框搜索该文件夹时,只有在使用该文件夹所索引语言的标题值时,您才会找到该文件夹。但目录不关心
pretty\u title\u或\u id
,而只是使用
title
方法,对吗?我从未打算对
标题做任何更改。我的用例是站点菜单,而不是一般的目录搜索。