keasy9/laravel-localize

一个帮助网站本地化的小型Laravel包。

3.0 2023-12-30 04:55 UTC

This package is auto-updated.

Last update: 2024-09-22 13:03:19 UTC


README

安装

  • composer require keasy9/laravel-localize
  • php artisan vendor:publish --provider='Keasy9\Localize\Providers\LocalizeServiceProvider'
  • php artisan migrate

用法

添加uri前缀

首先,您需要在config/localize.php中添加可用的本地化。默认情况下,这里有两个本地化

'available_locales' => [
    'ru' => 'русский',
    'en' => 'english',
],

并为您的应用程序路由添加前缀

namespace App\Providers;

use Keasy9\Localize\Facades\Localize;

class RouteServiceProvider extends ServiceProvider
{

    public function boot(): void
    {

        $this->routes(function () {
            //...

            Route::middleware('web')
                ->prefix(Localize::getLocalePrefix()) //prefix
                ->group(base_path('routes/web.php'));
        });
    }
}

或在routes/web.php中

use Illuminate\Support\Facades\Route;
use Keasy9\Localize\Facades\Localize;

Route::prefix(Localize::getLocalePrefix())->group(function() {
    //...
});

本地化模型字段

首先,您需要运行命令 php artisan migrate,该命令在您的数据库中创建“translations”表。其次,所有需要翻译的模型都必须使用特质并具有属性

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Keasy9\Localize\Traits\HasTranslations;

class Post extends Model
{
    use HasTranslations;

    // the array must include all fields that can be translated
    public static array $translated = [
        'title',
        'text',
    ];

}

因此,当您尝试获取模型属性时,您将获得其翻译版本

{{ $post->title }} {{-- will returns title translated to current app locale --}}

您也可以翻译所有属性

$post->translate();

但请小心。如果您保存已翻译的模型,数据库中的字段也将被翻译

use App/Models/Post;

$post->translate()->save();
dd(Post->find($post->id)->title); //will dump translated title

为所有模型在集合中翻译所有属性

$posts->translate();

用于编辑lang/**.json文件和本地化模型的Web界面

此包还提供了一个简单的Web界面,位于http(s)://yourSiteRoot/localize/。但如果您需要更改此URI,您可以通过config/localize.php中的配置来实现

'uri' => 'localize',

您还可以指定一个中间件来访问该URL或移除它以向所有用户开放访问

'access' => ['web','auth'],

配置中添加的所有模型都可通过Web界面进行翻译

'translated_models' => [
    Post::class
],

您还可以在配置中排除默认本地化进行编辑

'default_locale' => 'en',
'translate_default_locale' => false,

现在,是时候创建一个惊人的Web应用程序了!