novius/laravel-translatable

一个用于可翻译资源的 Laravel Eloquent 模型特性

1.0.0 2024-07-10 12:33 UTC

This package is auto-updated.

Last update: 2024-09-10 12:59:43 UTC


README

Novius CI Packagist Release License: AGPL v3

介绍

一个用于通过使用两个字段:locale 和 locale_parent_id 来使 Laravel Eloquent 模型 "可翻译" 的包。

要求

  • Laravel >= 10.0
  • PHP >= 8.2

注意:这些说明适用于 Laravel >= 10.0 和 PHP >= 8.2。如果您使用的是旧版本,请参阅 旧版本文档

安装

您可以通过 composer 安装此包

composer require novius/laravel-translatable
php artisan vendor:publish --provider="Novius\Translatable\LaravelTranslatableServiceProvider" --tag=lang

用法

迁移

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->translatable(); // Macro provided by the package
    $table->string('title');
    $table->text('text');
    $table->timestamps();
});

Eloquent 模型特性

namespace App\Models;

use \Illuminate\Database\Eloquent\Model;
use Novius\LaravelTranslatable\Traits\Translatable;

class Post extends Model {
    use Translatable;
    ...
}

此特性添加了以下功能:

  • 一个包含模型所有翻译的 translations 关系
  • 一个包含模型所有翻译的 translationsWithDeleted 关系,包括使用 SoftDelete 特性的模型中的垃圾箱中的翻译
  • 一个 translate(string $locale, array $translateAttributes = []) 函数,用于在新地区翻译模型
  • 一个 getTranslation(string $locale, bool $withDeleted = false) 函数,返回指定地区的翻译模型或不存在时返回 null。
  • 查询上的 withLocale($locale) 范围
$post = new Post([
    'title' => 'Français',
]);
$post->save()

$post->translate('en', ['title' => 'English']);
$post->translate('es', ['title' => 'Español']);

// All translation including `fr`
$allTranslations = $post->translations;

$englishTranslation = $post->getTranslation('en');

// $italianTranslation is null
$italianTranslation = $post->getTranslation('it');

如果您想在保存模型之前翻译一些模型属性,可以覆盖特性中的 translateAttributes 方法

namespace App\Models;

use \Illuminate\Database\Eloquent\Model;
use Novius\LaravelTranslatable\Traits\Translatable;

class Post extends Model {
    use Translatable;

    protected function translateAttributes($parent): void
    {
        $this->some_attribut = $parent->some_attribut.' translated';
    }
    ...
}

测试

composer run test

CS Fixer

使用 Laravel Pint 检查代码的 lint

composer run cs-fix

许可证

此包受 GNU Affero General Public License v3 或(根据您的选择)任何较新版本的许可。