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

Laravel多语言站点如何实现用户提交入库内容的翻译

Laravel用户提交动态内容多语言翻译实现方案

你当前实现的是静态文本的多语言本地化,针对用户提交到数据库的动态内容,有两种可行的落地方案:


方案1:存储多语言版本的用户输入(推荐)

该方案可控性最高,性能最优,无额外接口依赖:

  • 调整数据表结构:可以为需要翻译的字段新增对应语言版本的列,比如原字段content新增content_en、content_es;也可以直接将字段类型改为JSON,统一存储所有语言的内容,格式为{"en":"英文内容","es":"西班牙文内容"}
  • 提交阶段处理:表单可以提供多语言输入入口,让用户自行填写不同语言的内容;如果用户只填写单一语言,可以在后台自动调用机器翻译接口预填充其他语言版本,支持后续手动修改
  • 展示阶段处理:直接读取当前系统语言对应的内容即可,示例代码:
// 字段为JSON格式时的输出示例
{{ $userPost->content[App::getLocale()] ?? $userPost->content[config('app.fallback_locale')] }}

方案2:实时调用机器翻译接口

该方案无需修改现有存储结构,适合小流量、内容更新频率低的场景:

  • 封装机器翻译工具类:对接你选择的机器翻译服务,封装统一的翻译方法,可传入原始内容、目标语言两个参数获取翻译结果
  • 增加翻译结果缓存:为避免重复调用接口产生额外成本,将翻译结果存入缓存,缓存键可设置为trans_{内容唯一标识}_{目标语言},缓存时长可根据内容更新频率调整
  • 展示时判断调用:输出用户内容时,先判断内容原始语言和当前站点语言是否一致,不一致则调用翻译方法返回结果

现有逻辑优化提示

你当前的多语言切换逻辑只在切换语言的接口里设置了当前请求的locale,用户下次访问站点时语言配置会丢失,建议新增全局中间件统一设置语言:

  1. 创建中间件app/Http/Middleware/SetLocale.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

class SetLocale
{
    public function handle($request, Closure $next)
    {
        if (Session::has('locale')) {
            App::setLocale(Session::get('locale'));
        }
        return $next($request);
    }
}
  1. 将中间件注册到app/Http/Kernel.php的web中间件组中,即可每次请求自动读取session中的语言配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:06