语言敏感的标题方法(Plone、Archetypes、LinguaPlone)
Language sensitive title method (Plone, Archetypes, LinguaPlone)
我有一个具有国际化内容的 Plone 站点,使用 Archetypes 和 LinguaPlone。
我的一些 object(包括文件夹)是语言中性的,其他的则不是。对于菜单和导航面包屑的生成,我想要一种方法
- returns 未翻译的
Title()
,如果 Language()
是 non-empty(因为在这种情况下 title
属性应该匹配语言) , 和
- returns 翻译
Title()
否则(因为 object 用于多种语言,我有一小部分受影响的字符串)。
我在 Products.LinguaPlone
包中找不到任何 *title*
方法; pretty_title_or_id
显然是 language-agnostic.
真的没有这样的方法吗?
(Products.LinguaPlone 4.1.8, Products.CMFPlone 4.3.3, Products.ATContentTypes 2.1.14)
编辑: 受影响的 object 是数量有限的文件夹(靠近站点根目录),它们的标题很少更改;大多数其他人有 non-empty Language
(这将导致他们的 Title
不被翻译)或者是 non-folders(并且没有已知的翻译,我承认,但是在这些情况下,将使用原始标题)。我可以想象相应地修补 pretty_title_or_id
,但我想知道不这样做的原因。
我认为这行不通,因为导航菜单只会查看索引和元数据,而且那里肯定只有一个 Title
列,您绝对不想出于性能原因,在那里使用元数据。
理论上,您可以修补您需要的所有模板(例如导航 portlet 和面包屑视图,但要彻底,您需要修补 所有 在 Title
任何地方,曾经)通过翻译层传递他们的所有字符串(基本上添加 i18n:domain="..." i18n:translate=""
),并在 .mo
/.po
语言文件中维护你的翻译,但是您将无法在运行时更改它们。我的直觉是,这是在解决概念性问题,即语言中性项可以做什么和不能做什么。
我会自己回答:
似乎没有这样的方法,因为 standard 组元数据字段不足以支持它。
对于一小部分固定语言,使用 title_<lang>
元数据字段可能是一个很好的解决方案。
使用 LinguaPlone 时,您会为每种语言创建不同的内容,因此使用 return 不同语言值的方法没有多大意义...
如果您想使用与语言无关的内容,您将需要修补对象的 Title 方法并在那里添加您的自定义代码...无论如何这将对目录产生影响,因为只有默认语言内容会为索引内容和元数据编目,并且会 return 奇怪的结果......所以不鼓励这样做。
我有一个具有国际化内容的 Plone 站点,使用 Archetypes 和 LinguaPlone。
我的一些 object(包括文件夹)是语言中性的,其他的则不是。对于菜单和导航面包屑的生成,我想要一种方法
- returns 未翻译的
Title()
,如果Language()
是 non-empty(因为在这种情况下title
属性应该匹配语言) , 和 - returns 翻译
Title()
否则(因为 object 用于多种语言,我有一小部分受影响的字符串)。
我在 Products.LinguaPlone
包中找不到任何 *title*
方法; pretty_title_or_id
显然是 language-agnostic.
真的没有这样的方法吗?
(Products.LinguaPlone 4.1.8, Products.CMFPlone 4.3.3, Products.ATContentTypes 2.1.14)
编辑: 受影响的 object 是数量有限的文件夹(靠近站点根目录),它们的标题很少更改;大多数其他人有 non-empty Language
(这将导致他们的 Title
不被翻译)或者是 non-folders(并且没有已知的翻译,我承认,但是在这些情况下,将使用原始标题)。我可以想象相应地修补 pretty_title_or_id
,但我想知道不这样做的原因。
我认为这行不通,因为导航菜单只会查看索引和元数据,而且那里肯定只有一个 Title
列,您绝对不想出于性能原因,在那里使用元数据。
理论上,您可以修补您需要的所有模板(例如导航 portlet 和面包屑视图,但要彻底,您需要修补 所有 在 Title
任何地方,曾经)通过翻译层传递他们的所有字符串(基本上添加 i18n:domain="..." i18n:translate=""
),并在 .mo
/.po
语言文件中维护你的翻译,但是您将无法在运行时更改它们。我的直觉是,这是在解决概念性问题,即语言中性项可以做什么和不能做什么。
我会自己回答: 似乎没有这样的方法,因为 standard 组元数据字段不足以支持它。
对于一小部分固定语言,使用 title_<lang>
元数据字段可能是一个很好的解决方案。
使用 LinguaPlone 时,您会为每种语言创建不同的内容,因此使用 return 不同语言值的方法没有多大意义...
如果您想使用与语言无关的内容,您将需要修补对象的 Title 方法并在那里添加您的自定义代码...无论如何这将对目录产生影响,因为只有默认语言内容会为索引内容和元数据编目,并且会 return 奇怪的结果......所以不鼓励这样做。