larasup/localization

Laravel 数据库本地化包

1.0.5 2023-11-26 13:20 UTC

This package is not auto-updated.

Last update: 2024-09-30 15:48:40 UTC


README

这是一个用于 Laravel 数据库本地化的小包。现在您可以通过数据库更改本地化字段。实际上,表中的所有本地化字段将在一周内缓存。这个包对界面本地化或某些静态内容很有用。

安装

composer require larasup/localiztion

准备中

1. 将服务提供者添加到 config/app.php

'providers' => [
    ...
    Larasup\Localization\LocalizationServiceProvider::class,
    ...
];

2. 运行本地化迁移

php artisan migrate

用法

1. 准备你的模型

添加 Localize 特性,将 $localize 属性添加到你的 Eloquent 模型中,并实现 iLocalize 接口以支持 phpStorm。

class Category extends Model implements iLocalize
{
    use Localize;

    protected array $localize = ['title'];
}

在此步骤之后,你的模型将拥有 title 字段。

2. 现在你可以使用它了

2.1 获取具有本地化字段的模型

public static function getLocalizedCategories(): Collection
    {
        $categories = Category::query()
            ->with('children.children')
            ->whereNull('parent_id')
            ->get();

        LocalizationService::enrichCollection($categories, Category::class);

        return $categories;
    }

之后,你可以从模型中获取本地化字段

$categories = getLocalizedCategories();
foreach ($categories as $category) {
    echo $category->title;
}

注意:这是一个虚拟字段,你不能在 where 子句中使用它。可能在下一个版本中修复。

2.2 设置本地化字段

如果你想设置本地化字段,你应该使用 setLocalizedField 方法。

LocalizationService::setLocalization(
    $objectClass, // $model->getMorphName() for example 'App/Models/Category'
    $modelPrimaryValue, // $model->getKey() for example 1
    $field, // Name of localized field, in our case 'title'
    $value, // Value of localized field, for example 'Categoría de prueba'
    $language // Language of localized field, for example 'es'
);