keasy9 / laravel-localize
一个帮助网站本地化的小型Laravel包。
3.0
2023-12-30 04:55 UTC
Requires
- php: ^7.3 || ^8.0
- keasy9/laravel-composite-pk: ^1.0
- laravel/framework: >=8.0
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应用程序了!