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拆分得支离破碎的要求是最佳选择。
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就是最佳方案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。