jvdlaar / laravel-content-translation
一个用于翻译模型属性的 Laravel 5 包。
Requires
- php: ^7.0
- illuminate/database: ~5.2.0|~5.3.0|~5.4.0
- illuminate/support: ~5.2.0|~5.3.0|~5.4.0
- mcamara/laravel-localization: ^1.0
This package is not auto-updated.
Last update: 2024-09-15 02:37:41 UTC
README
Laravel 内容翻译
此包可以使模型的属性可翻译。例如,当您有一个国家模型时,您可以使其国家名称可翻译。
待办事项
- 添加添加翻译的用户界面。
- 添加测试
- 禁用“静态翻译”的方法。
安装
此包可以通过 Composer 安装。
composer require jvdlaar/laravel-content-translation
您必须安装此服务提供者。
// config/app.php 'providers' => [ ... JvdLaar\ContentTranslation\ContentTranslationServiceProvider::class, ... ];
此包还包含一个门面,它提供了一种调用类的简单方法。
// config/app.php 'aliases' => [ ... 'ContentTranslation' => JvdLaar\ContentTranslation\ContentTranslationFacade::class, ... ];
您可以使用以下命令发布此包的配置文件
php artisan vendor:publish --provider="JvdLaar\ContentTranslation\ContentTranslationServiceProvider"
以下配置文件将发布到 config/content-translation.php
return [ 'fallback_language' => 'en', 'country' => [ 'class' => \App\Models\Country::class, 'label_property' => 'name', 'properties' => [ 'name' => ['required' => TRUE], 'nationality' => ['required' => TRUE], ], ], 'page' => [ 'class' => \App\Models\Test::class, 'label_property' => 'title', 'properties' => [ 'title' => ['required' => TRUE], 'body' => ['nl2br' => TRUE], ], ], ];
数组键是存储在数据库中的翻译键,"class" 指的是模型类。 "label_property" 用于确定此模型的可翻译标签。例如,国家模型中的国家名称。"properties" 是一个数组,包含可翻译的属性以及它们是否必需以及它们的输出是否需要 nl2br。
用法
安装和配置完成后,您需要通过实现 TranslatableContract 使模型可翻译。HasTranslatables 特性有助于此。
示例模型
namespace App\Models; use App\Base\Model; use App\Contracts\TranslatableContract; use App\Models\Traits\HasTranslatables; class Country extends Model implements TranslatableContract { use HasTranslatables; protected $table = 'countries'; protected $fillable = ['code', 'admin_name']; public $timestamps = FALSE; public $users = FALSE; /** * ATTRIBUTES */ /** * Getter for 'name'. */ public function getNameAttribute() { return $this->displayTranslation('name', TRUE); } /** * Getter for 'nationality'. */ public function getNationalityAttribute() { return $this->displayTranslation('nationality', TRUE); } /** * Return an default for a property in this content. */ protected function getTranslationDefault($property) { return $this->admin_name; } }
在上面的示例中,$country->name 和 $country->nationality 被翻译。如果没有在数据库中找到翻译,则使用 admin_name 属性作为回退。函数 displayTranslation 的第二个参数表示应该使用默认值。第三个参数是翻译的本地化,默认情况下将使用当前应用程序的本地化。第四个参数确定是否使用回退语言,此回退语言在配置中设置。
对多个模型进行预加载翻译。
Country::eagerLoadTranslations([1, 2, 3], 'nl'); dump(Country::find(1)->name);
在上面的示例中,预加载了 3 个国家。因此,稍后加载模型并请求翻译不需要额外的查询。
保存翻译
您可以使用门面将翻译添加到数据库中
\ContentTranslation::saveTranslation('country', $country->id, 'name', 'nl', 'Nederland');
或者通过模型上的方法使用
$country->saveTranslation('nl', ['name' => 'Nederland', 'nationality' => 'Nederlander']);
安全
如果您发现任何与安全相关的问题,请通过电子邮件 johnny@ezcompany.nl 联系,而不是使用问题跟踪器。
关于 ezCompany
ezCompany 是一家位于荷兰蒂尔堡、布雷达和乌得勒支的 Web 开发代理机构。有关更多信息,请参阅 我们的网站。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。