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拆分得支离破碎的要求是最佳选择。
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://www.lullabot.com/blog/...
关键字:drupal, term, 译文, localize
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!