Translation mode是 Translate時,翻譯以多個term對象來實現,即假設有中英兩種語言,被翻譯的term也有中英兩個term對象。
其數據結構僅在term對象添加i18n_tsid屬性,若是多個term中的i18n_tsid相同,即說明這幾個term是同一個內容的幾種譯文。tsid在i18n_translation_set表中,但無重要信息。數據結構
總結:當term的language不是und時,要找到term的其它譯文,能夠用它的i18n_tsid來搜索其它term。翻譯
$translation_set = i18n_translation_set_load($term->i18n_tsid); if($translation_set) { $term_zh = $translation_set->get_item('zh-hant'); taxonomy_term_delete($term_zh->tid); $translation_set->get_translations(); $translation_set->remove_language('zh-hant'); $translation_set->remove_language('en'); $translation_set->update_delete(); }
該方式與Translate有所不一樣,它翻譯內容時不須要clone多一個對象,它的原理是直接把譯文放在i18n_string表中,譯文與對象只是弱關聯,也就是它能夠始終一個數據對象一個內容多個譯文,對於不想把term拆分得支離破碎的要求是最佳選擇。code
Localize僅能翻譯term的原數據,即name和description。field並不屬於term原數據,因此不能翻譯。taxonomy API對於Localize的譯文並不友好,因此i18n提供了兩個API來獲得term原數據譯文(localize和translate):對象
$name = i18n_taxonomy_term_name($term); $description = i18n_taxonomy_term_description($term);
$tid = 1; $langcode = 'zh-hant'; $value = '譯文'; i18n_string_textgroup('taxonomy')->update_translation(array('term', $tid, 'name'), $langcode, $value);
Translate讓對象擁有語言屬性,Entity Translation是field-level的,即讓field擁有語言屬性。若是不想使用Translate讓內容生成多份object,但localize又只能翻譯原數據,那麼Entity Translation就是最佳方案。blog