You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Doctrine 2可翻译扩展的多语言描述规整与校验需求

多语言描述数据规整方案(基于Doctrine Translatable扩展)

依赖与实体定义

使用Translatable behavior extension for Doctrine 2实现多语言字段管理,核心实体类代码如下:

class Fiche {
    #[ORM\Id]
    #[ORM\GeneratedValue(strategy: 'IDENTITY')] 
    #[ORM\Column]
    private ?int $id = null;

    /**
     * Used locale to override Translation listener`s locale
     * this is not a mapped field of entity metadata, just a simple property
     */
    #[Gedmo\Locale]
    private $locale;

    #[ORM\Column(type: Types::TEXT, nullable: true)]
    #[Gedmo\Translatable]
    private ?string $descriptionCourte = null;

    #[ORM\Column(type: Types::TEXT, nullable: true)]
    #[Gedmo\Translatable]
    private ?string $descriptionLongue = null;

    // 其他属性与方法
}

现存数据问题

当前待处理的6个对象存在以下描述数据不规整问题:

  • 描述缺失:存在仅短描述、仅长描述、两者都有或都无的情况
  • 内容重复:短描述移除末尾可能存在的...后,与长描述内容完全重复
  • 翻译覆盖不全:短描述前200字符与长描述一致,但短描述拥有长描述未覆盖的语言翻译

规整目标

  1. 保留最多有效信息(优先保留长描述)
  2. 长描述无对应语言翻译时,复用短描述的对应翻译
  3. 法语(fr)描述存储到file表对应字段,其他语言翻译存入ext_translations表

具体处理逻辑

1. 描述缺失场景处理

  • 两者都无:保持原状态
  • 仅存短描述:将短描述内容同步至长描述,短描述可保留原内容(作为精简展示用)
  • 仅存长描述:短描述保持空值(避免无意义的重复截取)

2. 内容重复场景处理

  • 若短描述移除末尾...后与长描述完全一致:将短描述置空,仅保留长描述
  • 若短描述与长描述内容存在差异(含翻译版本差异):保留两者内容

3. 翻译覆盖不全场景处理

  • 保留长描述的所有现有语言翻译
  • 遍历短描述的所有语言翻译,若长描述无对应语言的翻译,将短描述的该翻译赋值给长描述
  • 短描述若仅为长描述的前200字符,可置空以避免SEO重复;若短描述有独特内容,则保留

数据库存储规则

  • 法语(fr)的descriptionCourte和descriptionLongue直接写入file表的对应字段
  • 非法语的翻译内容,通过Doctrine Translatable扩展自动存入ext_translations表,对应translatable_type为Fiche,translatable_field为对应描述字段名

内容的提问来源于stack exchange,提问作者Camel4488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:05:38