kolirt / laravel-translations
为 Laravel 的翻译包。
1.2.4
2023-07-27 14:16 UTC
This package is auto-updated.
Last update: 2024-09-27 17:05:43 UTC
README
该包与 Laravel 5.8 进行了测试。其他版本未进行测试。
安装
$ composer require kolirt/laravel-translations
$ php artisan translations:install
在 config/translations.php 路径上配置翻译配置。
如果你使用 sql count 方法或 eloquent count 方法,你需要禁用全局作用域 'translatable'
<?php $query->withoutGlobalScope('translatable');
重要
如果你使用 where 方法与可翻译字段一起使用,那么你会发现它不起作用。你必须使用 having 方法。
用法
你需要使用 Kolirt\Translations\Traits\Translatable 特性到你的模型,并填充 $translatable 属性。你可以设置列的类型。默认类型是字符串。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Kolirt\Translations\Traits\Translatable; class Tag extends Model { use Translatable; protected $fillable = ['name', 'slug', 'description', 'sort_order', 'active']; protected $translatable = ['name', 'slug', 'description' => 'text']; }
可用的列类型
string
text
mediumText
longText
smallInteger
tinyInteger
integer
mediumInteger
bigInteger
decimal
boolean
date
dateTime
timestamp
通过列名返回当前语言的翻译
<?php $tag = Tag::first(); $tag->name; // OR $tag = Tag::first(); $tag->translation('name');
通过列名返回翻译
<?php $tag = Tag::first(); $tag->translations('name');
保存翻译
你不能使用以下示例代码,因为它无法用于保存翻译。
<?php $tag = Tag::first(); $tag->name = 1; $tag->save();
你需要使用 update 方法来保存翻译。
<?php $tag = Tag::first(); $tag->update([ 'name' => [ 'uk' => 'uk label', 'en' => 'en label' ] ]);
验证
<?php $request->validate([ 'name.*' => [ 'unique_loc:table,type,name,id' // id not required ], ]); /* 'name.*' must have array of language translates. Example: 'name' => [ 'uk' => 'uk label' 'en' => 'en label' ] */
本地作用域
你可以在配置中禁用全局作用域并使用本地作用域。
<?php Tag::translatable()->first();