如何在Drupal 9中用entityTypeManager获取指定语言的翻译分类术语?
在Drupal 9中获取翻译后的分类术语
当你通过loadTree(第四个参数传TRUE)获取到完整的TaxonomyTerm实体对象后,直接调用实体的getTranslation()方法就能拿到指定语言的翻译版本,同时建议先检查术语是否存在对应翻译,避免报错。
修改后的完整代码如下:
$language = \Drupal::languageManager()->getCurrentLanguage(); $tree = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree('secteur', 0, 1, TRUE); $result = []; foreach ($tree as $term) { // 先检查当前术语是否有目标语言的翻译 if ($term->hasTranslation($language->getId())) { $translated_term = $term->getTranslation($language->getId()); $result[$term->id()] = $translated_term->get('name')->value; } else { // 无翻译时的 fallback 逻辑,可根据需求调整 $result[$term->id()] = $term->get('name')->value; } } $variables['parentterms'] = $result;
补充说明:
- 用
$term->id()替代$term->get('tid')->value是更简洁的Drupal实体标准写法 hasTranslation()方法能有效避免因术语无对应翻译而抛出的异常,你可以根据业务需求修改else分支的处理逻辑(比如返回空字符串、默认提示文本等)- 如果需要获取特定语言(而非当前语言)的翻译,直接将
$language替换为目标语言ID即可,比如$target_lang_id = 'fr';,然后判断$term->hasTranslation($target_lang_id)并获取翻译
内容的提问来源于stack exchange,提问作者Amine.B
相关产品推荐
相关产品推荐

