aw-studio/localize

Fjord 前端翻译路由

v0.3 2020-06-12 11:51 UTC

This package is auto-updated.

Last update: 2024-09-12 21:21:42 UTC


README

/en/home/de/startseite 的形式轻松构建翻译路由。

安装

composer require aw-studio/localize

使用方法

请确保在 resources 目录中的翻译文件内翻译您的路由,例如:

// lang/de/routes.php

return [
    'home' => 'startseite'
];

现在您可以简单地将翻译路由添加到您喜欢的路由文件中,例如 routes\web.php

Route::trans('/__(routes.home)', HomeController::class)->name('home');

Blade 中的翻译路由

在您的 blade 文件中,只需像这样使用 __route() 辅助函数

<a href="{{ __route('home') }}">
    ...
</a>

切换语言

使用 __routes() 辅助函数来检索当前路由所有语言版本的路由数组。如果您的路由使用翻译参数,则需要传递这些参数。

@foreach (__routes($routeParameters ?? null) as $route)
    <a href="{{ $route->link }}">
        {{ $route->locale }}
    </a>
@endforeach

翻译路由参数

想象一下您的路由接受一个翻译的 slug 作为参数,例如一篇文章

/en/posts/my-first-post /de/beitraege/mein-erster-beitrag

您的路由应该看起来像这样

Route::trans('/__(routes.posts)/{slug}', PostController::class)->name('posts.show');

在您的控制器中,您可以使用 whereHas 方法检索文章

$post = Post::whereHas('translations', function($query) use($slug) {
        $query->where('slug', $slug)->where('locale', app()->getLocale());
    })
    ->with('translations')
    ->first();

为了检索文章指向所有其他语言的链接,我们需要像这样传递翻译的路由参数

$slugs = $post->translations->mapWithKeys(function($item) {
    return [$item->locale => $item->slug];
})->toArray();


return view('posts.show')->with([
    'post' => $post,
    'routeParameters' => ['slug' => $slugs]
]);

在您的视图中,现在您可以使用 __routes() 函数,传递相关参数

@foreach (__routes($routeParameters ?? null) as $route)
    {{ $route->link }}
@endforeach