Laravel 5 多语言模型:优雅的国际化解决方案

Laravel 5 多语言模型:优雅的国际化解决方案

在构建多语言应用时,数据存储是一个常见的挑战。Laravel 5 Multilingual Models 是一个强大的开源包,它允许你在不使用单独翻译表的情况下,将Eloquent Models的属性直接转化为多语言。只需简单地调用 $model->attribute ,就能自动获取基于当前应用locale的值。

安装与配置

要在你的 Laravel 应用中引入这个包,首先通过 Composer 进行安装:

composer require themsaid/laravel-multilingual

接着,在 config/app.php 的服务提供者数组中添加该包的服务提供者:

Themsaid\Multilingual\MultilingualServiceProvider::class

最后,发布配置文件:

php artisan vendor:publish

完成这些步骤后,你就可以开始使用了。

使用方法

数据库准备

为了存储JSON格式的翻译数据,你需要确保模型的可翻译字段类型为 textjson。例如,在创建国家表的迁移文件时可以这样设置:

Schema::create('countries', function (Blueprint $table) {
    $table->increments('id');
    $table->json('name'); // 存储名称的翻译
});

模型配置

接下来,让模型具备多语言功能,你需要在模型类上加入 Translatable 特性,并指定哪些字段是可翻译的:

use Themsaid\Multilingual\Translatable;

class Country extends Model
{
    use Translatable;
    
    protected $table = 'countries';
    public $translatable = ['name'];
    public $casts = ['name' => 'array'];
}

注意到 $casts['name'] = 'array'; 部分,这是用来确保从数据库取出的数据被正确解析为PHP数组。

创建与查询

现在你可以轻松创建和查询多语言模型了:

// 创建模型
Country::create(['name' => ['en' => "Spain", 'sp' => 'España']]);
  
// 查询并返回当前locale的名称
$country->name; // 根据应用的当前locale返回

// 获取特定locale的名称
$country->nameTranslations->en; // 返回英文名

// 获取所有翻译
$country->nameTranslations->toArray(); // 所有翻译的数组形式

验证与查询

对于验证,你可以利用 Laravel 5.2 引入的数组验证特性。此外,包内还包含了一个自定义规则 translatable_required,确保所有的翻译都已提供:

Validator::make(
    ['name' => ['en'=>'One', 'sp'=>'Uno']],
    ['name' => 'translatable_required']
);

查询方面,如果你使用的是MySQL 5.7或更高版本,并且选择了json数据类型,那么可以直接对翻译字段进行查询,如:

Company::where('name->en', 'Monsters Inc.')
    ->orderBy('specs->founded_at')
    ->get();

项目特点

  1. 简洁易用:无需额外的翻译表,直接在模型中管理多语言。
  2. 自动转换:根据应用的当前locale自动返回相应的翻译。
  3. 灵活性:支持直接使用json查询,使得检索更加灵活。
  4. 自定义验证:提供了 translatable_required 规则,方便对翻译字段进行验证。

总的来说,Laravel 5 Multilingual Models 提供了一种高效且直观的方式来实现模型的多语言功能,它简化了开发流程,提高了代码的可读性和可维护性。无论你是新项目启动还是现有项目的多语言升级,这个开源包都是一个值得尝试的选择。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳旖岭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值