fredckl / transable
翻译表
0.2.3
2019-08-12 08:43 UTC
Requires
- php: ^7.1.3
- laravel/framework: 5.8.*
This package is auto-updated.
Last update: 2024-09-12 19:44:05 UTC
README
非常简单,可以将现有表的所有字段翻译
安装
通过composer
composer require fredckl/transable
将ServiceProvider添加到您的config文件app.php中
"providers" => [ ... /* * Package Service Providers... */ Fredckl\Transable\ServiceProvider::class, ... ]
执行迁移
php artisan migrate
导入配置
php artisan vendor:publish --tag=transable
在transable.php中定义您可翻译的语言
<?php return [ "default_locale" => "en", // Change if you your default locale is different "locales" => [ "fr", "es", /// ... ] ];
如何使用
将transable特质添加到您的类中
namespace App; use Fredckl\Transable\src\Traits\Transable; use Illuminate\Database\Eloquent\Model; class Post extends Model { use Transable; // Import Trait protected $fillable = ['title', 'content']; /** * Define fields translatable */ public function transable (): array { return [ 'title', 'content' ]; } }
处理翻译
$post = App\Post::find(1); echo $post->title; // return "Hello" echo $post->content; // return "Content" echo $post->fr->title; // return "Hello", default value EN because the value not exists $post->fr->title = "Salut"; $post->fr->content = "contenu"; $post->es->title = "Hola"; $post->save(); true echo $post->fr->title; // return "Salut" echo $post->fr->content; // return "contenu" echo $post->es->title; // return "Hola" echo $post->es->content; // return "Contents", default value EN because the value not exists
保存记录
$data = [ 'title' => 'Hello', 'content' => 'Contents', 'fr' => [ 'title' => 'Salut', 'content' => 'contenu' ], 'es' => [ 'title' => 'Hola', 'content' => 'contenido' ] ]; App\Post::create($data); $post = App\Post::where('title', 'Hello')->first(); echo $post->fr->title; // return "Salut";
自动加载翻译
App::setLocale('fr'); App\Post::autoTranslate(); // OR without App::setLocale App\Post::autoTranslate('fr'); $post = App\Post::where('title', 'Hello')->first(); echo $post->title; // return "Salut"
查找器
App\Post::translated(); // retrieve all posts translated App\Post::doesntHaveTranslations(); // retrieve all posts without translations App\Post::whereTranslation($field, $value); // return matched posts
删除
$post->delete(); // delete post and all translations App\Post::deleteTranslationsWhenEmptyModel(); delete all translations without model // OR Fredckl\Transable\Models\I18n::deleteEmpty();
该项目正在测试中。不建议在生产环境中使用。欢迎提出建议和贡献。