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/...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值