tingo-gmbh / eloquent-translatable
使用 Eloquent 在本地数据库中存储翻译条目
v1.1.0
2024-07-04 05:37 UTC
Requires
- php: >=8.1
Requires (Dev)
- orchestra/testbench: ^7.5
- phpunit/phpunit: ^9.5
README
使用 Eloquent 在本地数据库中存储翻译条目。
安装
首先安装我们包的最新版本。
composer require tingo-gmbh/eloquent-translatable
接下来我们发布迁移和配置文件。
php artisan vendor:publish --provider="Tingo\Translatable\TranslatableServiceProvider" --tag="migrations"
用法
模型
将可翻译特性添加到你的 Eloquent 模型中,并指定所有可翻译属性。
<?php namespace Tingo\Translatable\Tests\Models; use Illuminate\Database\Eloquent\Model; use Tingo\Translatable\Translatable; class Entity extends Model { use Translatable; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'name', 'category', 'description', 'unit', 'price', ]; /** * The attributes that are translatable. * * @var array<string> */ protected array $translatable = [ 'name', 'category', 'description', ]; }
创建
创建一个新的翻译
$entity = Entity::create([ 'name' => 'Foo Entity', 'category' => 'foo', 'description' => 'This is my awesome entity!', ]); $entity->createTranslation('name', 'Foo Entität', 'de'); $entity->createTranslation('name', 'L\'entité foo', 'fr');
更新
必须始终传递一个区域设置作为参数,否则不会进行更新。
$entity->updateTranslation('name', 'Aktualisierte Foo Entität', 'de');
获取
最后,你可以在 Resources 或代码中的任何其他地方返回你的翻译。
echo $entity->getTranslation('name', 'de'); // Foo Entität echo $entity->getTranslation('name', 'fr'); // L\'entité foo
获取所有
如果你没有提供语言,该包将使用 Laravel 应用的默认区域设置。这在将区域设置作为请求头传递到 API 端点时特别有用。
App::setLocale('it'); $entity->createTranslation('name', 'Entità di Foo'); echo $entity->getTranslation('name'); // Entità di Foo
如果你想获取特定模型的所有翻译,使用 getTranslations()
方法。这将返回在 $translatable
数组中定义的所有属性的翻译。
var_dump($entity->gatTranslations())
// [
// 'name' => [
// 'default' => 'Foo Entity',
// 'de' => 'Foo Entität',
// 'fr' => 'L\'entité foo',
// ],
// ...
// ]
删除
必须始终传递一个区域设置作为参数,否则不会进行删除。
$entity->deleteTranslation('name', 'de');
Spatie
Spatie 已经制作了一个非常类似的包。 https://github.com/spatie/laravel-translatable
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。