jobmetric / laravel-translation
这是一个用于翻译不同Laravel项目内容的包。
2.11.0
2024-09-11 19:46 UTC
Requires
- php: >=8.0.1
- ext-json: *
- jobmetric/laravel-metadata: ^2.2
- jobmetric/laravel-package-core: ^1.2
- laravel/framework: >=9.19
README
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)。有关更多信息,请参阅许可文件。