marshmallow/multi-language

此包已被废弃,不再维护。作者建议使用marshmallow/translatable包。

翻译

v1.0.3 2020-09-10 16:10 UTC

This package is auto-updated.

Last update: 2020-10-10 15:21:11 UTC


README

alt text

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 '';
}