liaosankai/laravel-eloquent-i18n

v1.2.1 2018-07-29 17:30 UTC

This package is auto-updated.

Last update: 2024-09-29 00:32:06 UTC


README

要求

  • PHP >= 7.0.0
  • Laravel >= 5.5.0

安装

您可以通过composer安装此包

composer require liaosankai/laravel-eloquent-i18n

制作可翻译的模型

use Illuminate\Database\Eloquent\Model;
use Liaosankai\LaravelEloquentI18n\Models\TranslationTrait;

class Book extends Model
{
    use TranslationTrait;

    public $i18nable = [
        'title',
        'content',
        'author',
    ];
}

编写翻译数据

设置原始属性

$book = new Book();
$book->title = 'raw title';

设置单个地区的单个属性

$book = new Book();
$book->title = 'raw title';
$book->i18n('zh-Hant')->title = '正體中文的標題';
$book->i18n('zh-Hans')->title = '简体中文的标题';
$book->save();

设置单个属性的多个地区

$book = new Book();
$book->title = 'raw title';
$book->title = [
    'zh-Hant' => '正體中文的標題',
    'zh-Hans' => '简体中文的标题',
    'en' => 'english title',
];
$book->save();

设置多个地区的多个属性

$book = new Book();
$book->title = 'raw title';
$book->i18n([
    'zh-Hant' => [
        'title' => '正體中文的標題',
        'content' => '正體中文的內容',
    ],
    'zh-Hans' => [
        'title' => '简体中文的标题',
        'content' => '简体中文的內容',
    ],
    'en' => [
        'title' => 'english title',
        'content' => 'english content',
    ],
])->save();

读取翻译数据

安排存在翻译数据:

$book = new Book();
$book->title = 'raw title';
$book->content = 'raw content';
$book->author = 'raw author';
$book->i18n([
    'zh-Hant' => [
        'title' => '正體中文的標題',
        'content' => '正體中文的內容',
    ],
    'zh-Hans' => [
        'title' => '简体中文的标题',
        'content' => '简体中文的內容',
    ],
    'en' => [
        'title' => 'english title',
        'content' => 'english content',
    ],
])->save();

i18n()如果未分配任何地区,则使用所有地区数组

App::setLocale('zh-Hant');
$book->i18n()->title;
/* 
  [
     'zh-Hant' => '正體中文的標題',
     'zh-Hans' => '简体中文的标题',
     'en' => 'english title',
  ]
*/

i18n()使用分配的地区

$book->i18n('zh-Hant')->title; // 正體中文的標題
$book->i18n('zh-Hans')->title; // 简体中文的标题
$book->i18n('zh-en')->title; // english title

如果找不到分配的地区,则使用app地区

App::setLocale('zh-Hant');
$book->i18n('ja')->title; // 正體中文的標題

如果找不到分配的地区属性,则使用原始数据

App::setLocale('zh-Hant');
$book->i18n('zh-Hant')->author; // raw author

使用i18n()之外的原始数据

$book->title; // raw title
$book->content; // raw content

过滤翻译数据

使用模型范围where

$book->i18nLike([
    'filter' => [
        'title' => 'keywords for title',
        'content' => 'keywords for content'.
    ],
    'locale' => 'zh-Hant',
])->get();

许可证

laravel-eloquent-i18n是在MIT许可证下发布的