jetcod / laravel-model-translation
Laravel Model Translation 用于简化在 Laravel 应用中管理模型属性翻译。
v1.0.1
2024-07-12 14:58 UTC
Requires
- php: ^7.4|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.52
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.0|^10.0
Suggests
- laravel/framework: ^8.0|^9.0|^10.0|^11.0
This package is not auto-updated.
Last update: 2024-09-20 15:51:21 UTC
README
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 许可。