2017-06-13 121 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