aheenam/laravel-translatable

一个用于通过特性简单地管理模型翻译的Laravel包

2.0.0 2019-02-28 19:41 UTC

This package is auto-updated.

Last update: 2024-09-29 04:36:41 UTC


README

这是一个包含用于可翻译Eloquent模型的特性的Laravel包。此包采用只有一个表来维护所有翻译的方法。

这种做法可能不适用于所有用例,因为表可以变得非常大。但与其他所有包相比,这种方法是最灵活的,因为它允许您在无需额外配置的情况下使模型及其属性可翻译。

此包的替代方案包括以下包

  1. Spatie/laravel-translatable 将可翻译属性保存为jsons
  2. dimsav/laravel-translatable 预期每个具有可翻译属性的新的模型都有一个新表

需求

此包需要至少Laravel版本 5.7 和PHP版本 7.2

安装

您可以通过composer安装此包

composer require aheenam/laravel-translatable

现在您可以在项目中的任何Eloquent模型上使用此特性。

用法

要使您的Eloquent模型可翻译,只需将 Aheenam\Translatable\Translatable 特性添加到您的模型中。然后添加一个公共属性 $translatable,它是一个包含所有应可翻译的属性的数组。

<?php

use Illuminate\Database\Eloquent\Model;
use Aheenam\Translatable\Translatable;

class MyModel extends Model {
    
    use Translatable;
    
    public $translatable = ['place'];
    
}

方法

获取翻译的最简单版本是直接获取属性。这将返回当前语言的属性值

// assuming $myModel is an instace of MyModel class defined above
// and the translations are set

echo $myModel->place; // returns 'Germany'

App::setLocale('de');

echo $myModel->place; // returns 'Deutschland'

您还可以使用

$myModel->translate('place', 'de'); // returns 'Deutschland'

获取已翻译的模型

有时您希望保持模型属性不变,但获取模型的一个翻译版本。您可以通过以下方式实现

$translatedModel = $myModel->in('de');

echo $translatedModel->place; // returns 'Deutschland'

// shorter
echo $myModel->in('de')->place; // returns 'Deutschland'

翻译模型

您可以使用以下方式来翻译模型

$myModel->translate('no', [
    'place' => 'Tyskland'
]);

注意:translate() 方法可以用作获取翻译和设置翻译。区别在于所使用的参数类型。如果您传递一个数组作为第二个参数,那么 translate() 将作为设置器工作,否则作为获取器

变更日志

请查看 变更日志

测试

要运行测试,请使用

$ composer test

贡献

即将推出

安全

如果您发现任何与安全相关的问题,请发送电子邮件至 rathes@aheenam.com 或使用GitHub的问题跟踪器。

关于Aheenam

Aheenam 是一家来自德国NRW的小公司,专注于创建定制的数字解决方案。访问 我们的网站 了解更多信息。

许可

MIT许可(MIT)。请参阅 许可文件 了解更多信息。