spatie/laravel-translatable

一个特质,使 Eloquent 模型能够包含翻译

资助包维护!
spatie

安装次数: 13,075,561

依赖者: 351

建议者: 8

安全性: 0

星标: 2,200

关注者: 26

分支: 274

开放问题: 1

6.8.0 2024-07-24 14:26 UTC

README

Latest Version on Packagist MIT Licensed GitHub Workflow Status Total Downloads

此包包含一个名为 HasTranslations 的特质,用于使 Eloquent 模型可翻译。翻译以 json 格式存储。无需额外表来存储它们。

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;

class NewsItem extends Model
{
    use HasTranslations;
    
    // ...
}

在模型应用此特质后,您可以执行以下操作

$newsItem = new NewsItem;
$newsItem
   ->setTranslation('name', 'en', 'Name in English')
   ->setTranslation('name', 'nl', 'Naam in het Nederlands')
   ->save();

$newsItem->name; // Returns 'Name in English' given that the current app locale is 'en'
$newsItem->getTranslation('name', 'nl'); // returns 'Naam in het Nederlands'

app()->setLocale('nl');

$newsItem->name; // Returns 'Naam in het Nederlands'

// If you want to query records based on locales, you can use the `whereLocale` and `whereLocales` methods.

NewsItem::whereLocale('name', 'en')->get(); // Returns all news items with a name in English

NewsItem::whereLocales('name', ['en', 'nl'])->get(); // Returns all news items with a name in English or Dutch

// Returns all news items that has name in English with value `Name in English` 
NewsItem::query()->whereJsonContainsLocale('name', 'en', 'Name in English')->get();

// Returns all news items that has name in English or Dutch with value `Name in English` 
NewsItem::query()->whereJsonContainsLocales('name', ['en', 'nl'], 'Name in English')->get();

// The last argument is the "operand" which you can tweak to achieve something like this:

// Returns all news items that has name in English with value like `Name in...` 
NewsItem::query()->whereJsonContainsLocale('name', 'en', 'Name in%', 'like')->get();

// Returns all news items that has name in English or Dutch with value like `Name in...` 
NewsItem::query()->whereJsonContainsLocales('name', ['en', 'nl'], 'Name in%', 'like')->get();

支持我们

我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品 来支持我们。

我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙上

文档

所有文档均可在 我们的文档网站上找到

测试

composer test

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全性

如果您发现与安全性相关的错误,请通过 [email protected] 发送邮件,而不是使用问题跟踪器。

明信片软件

您可以自由使用此包,但如果它进入您的生产环境,我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。

我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。

我们将所有收到的明信片发布在我们的 公司网站上

致谢

我们从 Mohamed Said 的想法中获得了在列存储翻译为 json 的想法。此说明书的某些部分使用了 他的多语言包 的说明。

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件