drupal7多語言數據結構

taxonomy term 多語言(Translate)

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();
}

taxonomy term 多語言(Localize)

該方式與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);

給term錄入localize譯文

$tid = 1;
$langcode = 'zh-hant';
$value = '譯文';
i18n_string_textgroup('taxonomy')->update_translation(array('term', $tid, 'name'), $langcode, $value);

Entity Translation

Translate讓對象擁有語言屬性,Entity Translation是field-level的,即讓field擁有語言屬性。若是不想使用Translate讓內容生成多份object,但localize又只能翻譯原數據,那麼Entity Translation就是最佳方案。blog

參考:http://www.lullabot.com/blog/...ip

相關文章
相關標籤/搜索