十月 22, 2016 | 後端和Drupal

ECK不能翻譯標題?怎麼說都不合理啊!

前言

想必有不少使用Drupal 7的人與小弟一樣,一開始在翻譯Entity type的時候發現了一項問題......標題不能翻譯?!!!怎麼辦?再建一個標題欄位然後隱藏?不覺得麻煩嘛? 從現在開始不再需要這麼麻煩了,只需要利用Title模組便可輕鬆此項問題! 想知道如何操作?跟著下方的教學走

教學開始

模組需求:

ECK:建立Entity type

Entity Translation:比Internationalization還要好用的翻譯模組

Title :顧名思義,就是標題!也是本篇中重要的模組

未啟用Title模組前,會發現建立好Entity type後原生的操作欄位是無法使用的

而且翻譯文章的時候會看到下面的狀況

all languages是什麼意思?

Ans:意思就在翻譯此文章時全部語言的標題內容都會是一樣的(即是牽一髪而動全身)

然而在翻譯文章的時候是絕對不允許這種問題發生的!!!!

所以接下來就要開始利用Title模組解決這項問題

啟用Title模組後回到剛剛建立的Entity type管理欄位頁面會發現Title操作欄位多了個replace

點進去後會看到只有一個選項(請將選項啟用,否則依舊不能翻譯)

這時候原本的標題欄位已經被取代掉了

再來回到原本的文章編輯會看到all languages已經消失了

看到all languages消失後即表示一篇完整的翻譯文章就要出爐了!


可是有沒有人發現無論如何編輯標題都是空值?

這是因為ECK與Title兩個模組之間是不兼容的,所以eck再回傳的時候不會回傳title的值

那有解決方法嘛? 答案是有的!

解決方法

在ECK資料夾底下的eck.entity.inc內(約455行找到foreach ($properties as $property => $info) {)加入以下Code

      // Add support for Title module and title field replacement
     // @see https://www.drupal.org/node/1758878
     if ($property == 'title' &&
     module_exists('title') &&
      isset($form['title']['#field_replacement']) &&
     $form['title']['#field_replacement']) {
      // Don't write form_value to entity property 'title' if
      // title module replaced it with a field.
      // @see https://www.drupal.org/node/1758878#comment-9872241
      continue;
    }

這樣才能真真正正的翻譯一篇完整的文章

結語

雖然Title模組與eck模組並不兼容但這是有方法可以解決的,更何況只將標題取代掉就能夠翻譯為何還不裝呢?安裝模組後就再也不需要傻傻的建立第二個標題欄位了,這不是省事多了嘛?

hashtags: