2013-01-21 38 views
3

我在Drupal一個網站是在西班牙的默認。現在我想添加英文翻譯。它有很多實體「producto」和未定義('und')語言。我想批量給他們分配'es'語言。在發佈這個問題之前,我檢查了這個其他問題How to change node languages in batches?,但我無法完成我想要的。讓我解釋一下:如何更改批量實體語言?

a)我已經嘗試了語言分配,但它最後一次提交是在1年前,它有一個可能導致數據丟失的重要錯誤(我也重現了錯誤)我也嘗試使用來自用戶的補丁barami但數據丟失依然存在。

二)查看批量操作:我已經試過了,但它僅在更新數據庫表「節點」的領域。不是其他的。

C)所以,我檢查瞭如何Drupal數據庫工程,創建一個SQL腳本,這也導致數據丟失:

-- Step 1 Node lang 
update node set language='es' where type='producto'; 

-- Step 2 body field 
update field_data_body set language='es' where bundle='producto'; 

-- Step 3 Field comment vody 
update field_data_comment_body set language='es' where bundle='comment_node_producto'; 

-- Step 4 For each field of producto, update language 
update field_data_field_precio set language='es' where bundle='producto'; 
update field_revision_field_precio set language='es' where bundle='producto'; 

(...) 

我有以下的翻譯模塊激活: 國際化,阻止語言,現場翻譯,菜單翻譯,多語言內容,多語言選擇,同步翻譯,分類翻譯,翻譯重定向,翻譯集

我在做什麼毛病我的sql腳本?是否有其他插件來完成我想要做的事情?任何建議將不勝感激謝謝!

回答

2

下面是如何進行本體設置語言上我的網站:

  1. 使用視圖散裝優化,選擇要更改的所有節點,使用「更改值」選項,然後更改值語言你想要的。

  2. 完成此操作後,編輯節點時將不會顯示字段值,因此您需要運行腳本(例如, UPDATE database.field_data_body SET language='en' WHERE bundle='page'(根據需要使用您的數據庫名稱,字段名稱和數據包)。

重要提示:如果您有任何自定義網址別名,他們將這種方法被覆蓋,由於與pathauto一個問題,但還有一個變通辦法:先去/管理/配置/搜索/路徑/設置,並將「更新操作」選項更改爲「無所事事」。保持原來的別名不變「,然後在運行視圖批量操作操作後更改此值。

+0

感謝您的回答。但是我想要說明的是,我發現字段語言必須保持'und'狀態才能使Drupal正常工作(包括編輯節點時出現的字段) – Roger

1

假設你可以做一個視圖列出您的實體,您可以使用瀏覽批量操作模塊來做到這一點。 I just explained how to do this the other day for nodes on Drupal Answers.

+0

你確定這個程序是100%安全的呢?有人建議我標記爲'und'語言的節點應保持完整,以避免數據丟失。所以他建議我複製節點並將新副本標記爲'es',但他沒有告訴我如何去做。 – Roger

+0

Appart,如果我沒有錯,這個過程隻影響數據庫表節點,而不影響其他節點。 – Roger

+0

@Roger是的,這個過程是安全的,但是在做這樣一個重要的操作之前,你應該首先做一個備份。我認爲你不需要複製數據;如果是我,我會直接按照上面的答案中所述更改語言。但是,這取決於您網站的默認語言以及您如何配置實體翻譯。 –

0

另一種解決方案是隻執行第一條SQL,因爲我已經發現場語言必須保持「UND」。

update node set language='es' where type='producto';