marshmallow / multi-language
Requires
- php: ^7.4
- digitalcloud/multilingual-nova: ^2.0
- marshmallow/helpers: ^2.0
This package is auto-updated.
Last update: 2020-10-10 15:21:11 UTC
README
Marshmallow Pages
此包允许您轻松管理Laravel中的页面。这实际上是第三方手柄composer包的集合,以便可以快速重用。
安装
composer require marshmallow/multi-language
运行php artisan migrate
以创建存储语言的表。运行php artisan marshmallow:resource Language MultiLanguage
以创建Nova资源,以便您可以添加更多语言。将MultiLanguageMiddleware
添加到您的app/Http/Kernel.php
,以便存储访问者选择的语言,并在每次请求中检索。
protected $middlewareGroups = [ 'web' => [ //... \Illuminate\Session\Middleware\StartSession::class, /** * Make sure you put this below the StartSession middleware */ \Marshmallow\MultiLanguage\Http\Middleware\MultiLanguageMiddleware::class, //... ],
迁移
如果您需要使某个表中的内容可翻译,可以运行以下Artisan命令:php artisan marshmallow:translate-resource Marshmallow\\Pages\\Models\\Page
将语言切换器添加到Nova
将语言工具添加到您的NovaServiceProvider
,以便您可以切换正在工作的语言。这不是必需的,但是一个很好的辅助工具。
public function tools() { return [ new \Digitalcloud\MultilingualNova\NovaLanguageTool, ]; }
如果您使用此工具,需要发布此包的配置,以便告诉此包可以从数据库中获取语言。运行php artisan vendor:publish --provider="Digitalcloud\MultilingualNova\FieldServiceProvider" --tag=config
。运行php artisan vendor:publish --provider="Spatie\Translatable\TranslatableServiceProvider" --tag=config
。然后,将config/multilingual.php
中的source
更改为database
。然后,将config/multilingual.php
中的database.model
更改为Marshmallow\\MultiLanguage\\Models\\Language
。最后,将config/translatable.php
中的fallback_locale
更改为nl
。
准备您的模型
首先,请确保您可以通过更新您的Nova资源来创建翻译。
public function fields(Request $request) { return [ // ... Multilingual::make('Language'), ] }
接下来,更新您的模型,以便我们知道哪些列是可翻译的。
use Marshmallow\MultiLanguage\Traits\TranslatableRoute; use Spatie\Translatable\HasTranslations; class Page extends Model { use HasTranslations, TranslatableRoute; public $translatable = ['name', 'slug', 'layout']; }
配置
在config/pages
中,您应该将use_multi_languages
更改为true
;
用法
以下路由将默认实现。您可以使用此路由来更改当前选定的语言。
Route::get('locale/{locale}', function ($locale){ Session::put('locale', $locale); return redirect()->back(); });
TranslatableRoute特性
此特性将提供两种方法。
public function route () { return '/' . App::getLocale() . $this->routePrefix() . $this->slug; } protected function routePrefix () { return ''; }