康诺科/laravel-transeloquent

Laravel Eloquent 可翻译模型

v0.1.9-alpha 2020-03-01 11:44 UTC

README

如果您想要更快地将模型翻译并存储在单个表中,这个包就是为了您而构建的。

Build Status Latest Stable Version Total Downloads Latest Unstable Version License StyleCI

这是一个用于可翻译模型的 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;
}

默认排除的字段是 idcreated_atupdated_atdeleted_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

作者

  • Franky So - 初始工作 - Konnco
  • Rizal Nasution - 初始工作 - Konnco