kolirt/laravel-translations

为 Laravel 的翻译包。

1.2.4 2023-07-27 14:16 UTC

This package is auto-updated.

Last update: 2024-09-27 17:05:43 UTC


README

该包与 Laravel 5.8 进行了测试。其他版本未进行测试。

安装

$ composer require kolirt/laravel-translations
$ php artisan translations:install

在 config/translations.php 路径上配置翻译配置。

如果你使用 sql count 方法或 eloquent count 方法,你需要禁用全局作用域 'translatable'
<?php

$query->withoutGlobalScope('translatable');

重要

如果你使用 where 方法与可翻译字段一起使用,那么你会发现它不起作用。你必须使用 having 方法。

用法

你需要使用 Kolirt\Translations\Traits\Translatable 特性到你的模型,并填充 $translatable 属性。你可以设置列的类型。默认类型是字符串。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Kolirt\Translations\Traits\Translatable;

class Tag extends Model
{

    use Translatable;

    protected $fillable = ['name', 'slug', 'description', 'sort_order', 'active'];

    protected $translatable = ['name', 'slug', 'description' => 'text'];
    
}

可用的列类型

string
text
mediumText
longText
smallInteger
tinyInteger
integer
mediumInteger
bigInteger
decimal
boolean
date
dateTime
timestamp

通过列名返回当前语言的翻译

<?php

$tag = Tag::first();
$tag->name;

// OR

$tag = Tag::first();
$tag->translation('name');

通过列名返回翻译

<?php

$tag = Tag::first();
$tag->translations('name');

保存翻译

你不能使用以下示例代码,因为它无法用于保存翻译。

<?php

$tag = Tag::first();
$tag->name = 1;
$tag->save();

你需要使用 update 方法来保存翻译。

<?php

$tag = Tag::first();
$tag->update([
    'name' => [
        'uk' => 'uk label',
        'en' => 'en label'
    ]
]);

验证

<?php

$request->validate([
    'name.*' => [
        'unique_loc:table,type,name,id' // id not required
    ],
]);

/* 
    'name.*' must have array of language translates. Example:
   
        'name' => [
            'uk' => 'uk label'
            'en' => 'en label'
        ]
*/

本地作用域

你可以在配置中禁用全局作用域并使用本地作用域。

<?php

Tag::translatable()->first();