tingo-gmbh/eloquent-translatable

使用 Eloquent 在本地数据库中存储翻译条目

v1.1.0 2024-07-04 05:37 UTC

This package is auto-updated.

Last update: 2024-09-04 06:00:50 UTC


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)。请参阅 许可证文件 了解更多信息。