aheenam / laravel-translatable
一个用于通过特性简单地管理模型翻译的Laravel包
2.0.0
2019-02-28 19:41 UTC
Requires
- php: ^7.2
- illuminate/database: ~5.7.0|~5.8.0
- illuminate/support: ~5.7.0|~5.8.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ~3.7.0|~3.8.0
- phpunit/phpunit: ^7.0|^8.0
README
这是一个包含用于可翻译Eloquent模型的特性的Laravel包。此包采用只有一个表来维护所有翻译的方法。
这种做法可能不适用于所有用例,因为表可以变得非常大。但与其他所有包相比,这种方法是最灵活的,因为它允许您在无需额外配置的情况下使模型及其属性可翻译。
此包的替代方案包括以下包
- Spatie/laravel-translatable 将可翻译属性保存为jsons
- 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)。请参阅 许可文件 了解更多信息。