ozanakman / laravel-multilingual
为 Laravel 应用提供简单的本地化。
Requires
- php: ^7.1
- cocur/slugify: ^3.1
- laravel/framework: ~5.7.0
Requires (Dev)
- fzaninotto/faker: ^1.4
- orchestra/testbench: ^3.7
- phpunit/phpunit: ^7.4
This package is auto-updated.
Last update: 2020-08-28 19:56:47 UTC
README
简介
Multilingual 是一个用于 Laravel 应用的本地化包。它具有内置方法,使本地化变得简单。它旨在为您提供开发速度,无需担心区域设置。
此包由 Ozan Akman 创建
- 轻松处理重定向(基于域名或路径)
- 扩展了本地化路由的路由类
- Blade 指令 @forEachLocale
- 高度可定制
安装
您可以使用 Composer 将 Multilingual 安装到您的 Laravel 项目中
composer require ozanakman/laravel-multilingual
注意: Multilingual 需要 Laravel 5.7.0+。
安装 Multilingual 后,使用 multilingual:install
Artisan 命令发布其资产。它将迁移 locales
和 translations
表。
php artisan multilingual:install
发布 Multilingual 的资产后,其主配置文件位于 config/multilingual.php
。
配置
在配置文件中有两个选项。
pattern
用于处理重定向以及系统如何处理 URL。模式只能是 domain
或 path
。
当您选择 domain
作为模式时,本地化 URL 将类似于这样:en.domain.com
或 tr.domain.com
。
当您选择 path
作为模式时,本地化 URL 将类似于这样:domain.com/en
或 domain.com/tr
。
另一个选项仅用于自定义 中间件。您可以使用处理重定向的 OzanAkman\Multilingual\Middleware\Localize
,或者创建自己的。
发布配置文件的内容
return [ /* * How we should treat urls to get the selected language? * http://{domain}.site.com * http://site.com/{path} * * Supported: "domain", "path" */ 'pattern' => 'path', /** * Localization middleware to handle user redirects. */ 'middleware' => OzanAkman\Multilingual\Middleware\Localize::class, ];
本地化路由
您可以混合使用本地化路由。 Route::locale
为每个区域创建本地化 URL。在下面的示例中,用户通过访问 domain.com/en/home
或 domain.com/tr/home
将看到 welcome
视图。
Route::locale(function () { Route::get('/home', function () { return view('welcome'); }); });
您还可以像 Route::group
方法一样向 Route::locale
添加属性。
Route::locale(['middleware' => 'auth'], function () { Route::get('/invoice/{invoiceId}', 'InvoiceController@show'); });
最终,这只是一个快捷方式。
Blade 指令
您可以轻松处理基于区域的组件,如语言选择下拉菜单或多语言内容编辑器等。
您可以像需要一样使用此指令。区域设置在幕后被缓存。因此,无需担心。
@forEachLocale($item) {{ $item->code }} {{ $item->name }} {{ $item->native_name }} {{ $item->enabled }} {{ $item->default }} @endForEachLocale
模型
Locale
和 Translation
模型文件位于 OzanAkman\Multilingual\Models
命名空间下。
区域设置
- 您可以通过调用
Artisan
命令添加新区域设置
php artisan multilingual:add {code} {name} {native name}
php artisan multilingual:add tr Turkish Türkçe
- 删除语言
php artisan multilingual:remove tr
请注意,此命令将删除属于该区域设置的所有翻译。
手动,您可以使用区域模型添加/编辑/删除区域设置。
翻译
将 OzanAkman\Multilingual\Models\Traits\HasMultilingualContent
特性添加到您的模型文件中。
- 获取模型的翻译版本
$model->translate('en');
- 将模型翻译成其他语言
$model->translate('en', [ 'column' => 'translated_version' ]);
- 删除翻译
$model->removeTranslation('en');
- 处理翻译别名(slug)非常简单。您只需将
slugSource()
方法添加到您的主体模型中。
class ExampleModel extends Model { public function slugSource() { // Column return 'title'; } }
现在,当您添加翻译时,Multilingual 将通过 cocur/slugify
包从 title
列生成 slug
。
测试
Multilingual 使用 Orchestra\Testbench
运行测试。
vendor/bin/phpunit
贡献
有关详细信息,请参阅 CONTRIBUTING。