jobmetric/laravel-translation

这是一个用于翻译不同Laravel项目内容的包。

2.11.0 2024-09-11 19:46 UTC

This package is auto-updated.

Last update: 2024-09-11 19:46:55 UTC


README

Contributors Forks Stargazers MIT License LinkedIn

laravel的翻译

这是一个用于翻译不同Laravel项目内容的包。

通过composer安装

运行以下命令以获取最新版本

composer require jobmetric/laravel-translation

文档

此包正在不断改进,每天都在演变,集成了各种不同的功能。它对于Laravel爱好者来说是一个不可或缺的资产,为他们提供了一个无缝地将项目与翻译数据库模型结合的方法。

在此包中,您可以与任何需要数据库翻译的模型无缝使用它。

现在,让我们深入了解核心功能。

在安装包后,您必须通过composer迁移。

php artisan migrate

请了解HasTranslation类,它精心设计用于集成到您的模型中。此类自动化基本任务,确保过程流畅。

第一步,您需要将此类连接到主模型。

use JobMetric\Translation\HasTranslation;

class Post extends Model
{
    use HasTranslation;
}

添加此类后,您需要实现TranslationContract到您的模型。

use JobMetric\Translation\Contracts\TranslationContract;

class Post extends Model implements TranslationContract
{
    use HasTranslation;
}

现在您必须使用translationAllowFields函数,并将其添加到您的模型中。

use JobMetric\Translation\Contracts\TranslationContract;

class Post extends Model implements TranslationContract
{
    use HasTranslation;

    public function translationAllowFields(): array
    {
        return [
            'title',
            'body',
        ];
    }
}

此函数用于声明您需要此模型的哪些翻译字段,您应将其作为array返回。

如何使用它?

现在,您可以使用HasTranslation类来翻译您的模型。以下示例演示了如何创建带有翻译的新帖子

$post = Post::create([
    'status' => 'published',
]);

$post->translate('en', [
    'title' => 'Post title',
    'body' => 'Post body',
]);

$post->translate('de', [
    'title' => 'Post Titel',
    'body' => 'Post Inhalt',
]);

$post->translate('fr', [
    'title' => 'Titre de la publication',
    'body' => 'Corps de poste',
]);

$post->translate('fa', [
    'title' => 'عنوان پست',
    'body' => 'متن پست',
]);

您也可以在foreach中这样做,只是为了展示。

您还可以使用translate方法来更新翻译

$post->translate('de', [
    'title' => 'Post Titel',
    'body' => 'Post Inhalt',
]);

现在我们来看看我们添加到模型中的函数。

translation

translation有一个关系

translations

translation有多个关系

translationTo

为选择翻译关系指定范围locale

Post::translationTo('en')->get();

// or

Post::where('status', 'published')->translationTo('en')->get();

translationsTo

为选择翻译关系指定范围locale

Post::translationsTo('en')->get();

// or

Post::where('status', 'published')->translationsTo('en')->get();

translate

store为模型存储翻译

$post->translate('en', [
    'title' => 'Post title',
    'body' => 'Post body',
]);

withTranslation

在模型加载后加载翻译

$post = Post::query()->where('id', 1)->first()->withTranslation('en', 'title');

withTranslations

在模型加载后加载翻译

$post = Post::query()->where('id', 1)->first()->withTranslations();

hasTranslationField

检查模型是否有翻译字段

$post->hasTranslationField('title');

getTranslation

获取模型的翻译

$post->getTranslation('title');

getTranslations

获取模型的翻译

$post->getTranslations();

forgetTranslation

忘记模型的翻译

$post->forgetTranslation('title', 'en');

forgetTranslations

忘记模型的翻译

$post->forgetTranslations('en');

事件

此包包含几个事件,您可以编写如下监听器

贡献

感谢您考虑为Laravel Translation做出贡献!贡献指南可在CONTRIBUTING.md中找到。

许可

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