康诺科 / laravel-transeloquent
Laravel Eloquent 可翻译模型
v0.1.9-alpha
2020-03-01 11:44 UTC
Requires
- php: >=7.2.0
- illuminate/contracts: 5.8.* || ^6.0
- illuminate/database: 5.8.* || ^6.0
- illuminate/support: 5.8.* || ^6.0
Requires (Dev)
- orchestra/testbench: 3.8.* || ^4.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-08-29 05:08:45 UTC
README
如果您想要更快地将模型翻译并存储在单个表中,这个包就是为了您而构建的。
这是一个用于可翻译模型的 Laravel 包。它的目标是简化获取和存储多语言模型实例的复杂性。使用此包,您编写的代码更少,因为翻译在获取/保存实例时自动获取/保存。
也许市场上有很多以相同方式工作的包,并且性能更高,但这个包的目的是加快您的开发速度。
此包仍处于 alpha 版本,因此更新可能会破坏您的应用程序。
安装
composer require konnco/laravel-transeloquent
php artisan vendor:publish
php artisan migrate
配置
您可以在以下位置找到 transeloquent 的配置: config/transeloquent.php
return [ // default locale 'locale' => 'en', // transeloquent model 'model' => Konnco\Transeloquent\models\Transeloquent::class ];
将 transeloquent 特性添加到您的模型中
namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class News extends Model { use \Konnco\Transeloquent\Transeloquent; }
默认排除的字段是 id
、created_at
、updated_at
、deleted_at
,这些字段将不会保存到数据库中。
如果您只想添加一些字段进行翻译,您可能需要在模型中添加 $translateOnly
。
namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Konnco\Transeloquent\Transeloquent; class News extends Model { use Transeloquent; protected $translateOnly = ['translate-field-1', 'translate-field-2']; }
如果您想添加更多排除的字段以进行翻译,您可能需要在模型中添加 $translateExcept
。
namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Konnco\Transeloquent\Transeloquent; class News extends Model { use Transeloquent; protected $translateExcept = ['dont-translate-1', 'dont-translate-2']; }
注意:如果您设置了 $translateOnly
变量,它将首先执行。如果您想使用 $translateExcept
变量,请确保不要在模型中使用 $translateOnly
变量。
快速示例
获取已翻译属性
原始属性(英文或基于配置中的 app.transeloquent.default_locale
)
//in the original language $post = Post::first(); echo $post->title; // My first post
已翻译属性
App::setLocale('id'); $post = Post::first(); echo $post->title; // Post Pertama Saya
保存已翻译属性
要保存翻译,您必须具有初始数据。
例如,您想要保存印度尼西亚语的翻译。
App::setLocale('id'); $post = Post::first(); $post->title = "Post Pertama Saya"; $post->save(); // or set locale for specific model $post = Post::first(); $post->setLocale('id') $post->title = "Post Pertama Saya"; $post->save();
检查翻译是否可用
$post = Post::first(); $post->translationExist('id'); //return boolean