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