jetcod/laravel-model-translation

Laravel Model Translation 用于简化在 Laravel 应用中管理模型属性翻译。

v1.0.1 2024-07-12 14:58 UTC

This package is not auto-updated.

Last update: 2024-09-20 15:51:21 UTC


README

Actions Status

Latest Stable Version License

Laravel Translation 是一个包,它提供了一个简单高效的方式来管理 Laravel 应用中的翻译。它允许您将所有模型的属性翻译存储在数据库中,使得管理更新翻译变得容易,无需修改语言文件。

安装

您可以通过 Composer 安装此包

composer require jetcod/laravel-model-translation

配置

安装包后,您需要发布配置文件和迁移文件

php artisan vendor:publish --tag=translation-config
php artisan vendor:publish --tag=translation-migrations

然后,运行迁移来创建翻译表

php artisan migrate

为了避免与其他包和数据库表冲突,您可以在 config/translation.php 配置文件中自定义您的数据库表名

return [
    'database' => [
        'prefix' => env('TRANSLATION_TABLE_PREFIX', 'lt_'),
        'table_name' => env('TRANSLATION_TABLE_NAME', 'translations'),
    ],
];

使用方法

设置模型

首先,您需要在您的模型中导入 Jetcode\Laravel\Translation\Traits\HasTranslations 特性,并指定您想翻译的字段

use Jetcode\Laravel\Translation\Traits\HasTranslations;

class Post extends Model
{
    use HasTranslations;

    protected const TRANSLATABLE_ATTRIBUTES = ['title', 'content'];
}

或者,您也可以在模型类的方法中指定这些字段

use Jetcode\Laravel\Translation\Traits\HasTranslations;

class Post extends Model
{
    use HasTranslations;

    protected function getTranslatableAttributes()
    {
        return ['title', 'content'];
    }
}

注意TRANSLATABLE_ATTRIBUTES 常量或 getTranslatableAttributes 方法的返回值可以是字符串或模型属性名称的数组。

定义可翻译属性是可选的,但建议定义它们。

创建翻译

现在,您可以通过定义的关系为模型属性创建翻译

// Create a new post with translations
$post = Post::create([
    'title' => 'Hello World',
    'content' => 'This is a post',
]);

// Create a new translation for the post
$post->translation()->saveMany([
    new Translation([
        'locale' => 'fr_FR',
        'key'    => 'title',
        'value'  => 'Bonjour le monde',
    ]),
    new Translation([
        'locale' => 'fr_FR',
        'key'    => 'content',
        'value'  => 'Ceci est un article',
    ]),
]);

检索已翻译的模型

此包与 Laravel 本地化系统兼容,因此模型将根据当前区域设置进行翻译。您只需设置应用区域设置,您的模型将自动进行翻译

$post = Post::find(123);
var_dump($post->title);     // "Hello World"

app()->setLocale('fr_FR');
var_dump($post->title);     // "Bonjour le monde"

测试

该包包含测试,您可以使用 PHPUnit 运行这些测试

composer test

您还可以使用 PHPStan 运行静态分析

composer phpstan

许可

此包是开源软件,许可协议为 MIT 许可