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

Laravel 9中astrotomic/laravel-translatable返回无效语言数据问题

排查方案

以下是可能导致该问题的模型配置及代码问题,逐一排查:

  • 确认Banner模型的$translatable属性
    必须明确声明需要翻译的字段,否则主模型不会自动映射对应语言的字段值:

    // app/Models/Banner.php
    protected $translatable = ['text', 'description'];
    
  • 检查Banner模型的字段填充规则
    确保text、description被包含在$fillable中(或$guarded设为空数组),否则无法通过翻译关联自动赋值到主模型属性:

    // app/Models/Banner.php
    protected $fillable = ['text', 'description', ...]; // 补充其他非翻译字段
    // 或者
    protected $guarded = [];
    
  • 验证BannerTranslation模型的填充规则
    翻译模型需要允许locale、翻译字段及外键的批量赋值:

    // app/Models/BannerTranslation.php
    protected $fillable = ['banner_id', 'locale', 'text', 'description'];
    
  • 确认当前请求的Locale是否正确
    在查询前输出当前语言环境,排除中间件或配置未正确切换语言的情况:

    dd(app()->getLocale()); // 确认是否输出 'fr'
    
  • 手动触发翻译映射
    尝试在查询后手动调用translate()方法强制切换语言,验证是否能正常获取对应翻译:

    $banners = Banner::translatedIn(app()->getLocale())->get()->each(function ($banner) {
        $banner->translate(app()->getLocale());
    });
    
  • 检查配置文件的 fallback 设定
    若config/translatable.php中use_fallback_locale开启,需确保当目标语言翻译存在时不会 fallback 到默认语言。虽然translatedIn()方法应优先返回指定语言的记录,但可临时关闭 fallback 测试:

    'use_fallback_locale' => false,
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:01:07