Laravel
AI-перевод для Laravel с помощью Lingo.dev CLI
Что такое Laravel?
Laravel — это PHP-фреймворк для веб-приложений с выразительным и элегантным синтаксисом. Он предоставляет встроенные функции для маршрутизации, аутентификации, сессий и кэширования, что позволяет создавать современные веб-приложения.
Что такое Lingo.dev CLI?
Lingo.dev — это платформа перевода на основе ИИ. Lingo.dev CLI считывает исходные файлы, отправляет переводимый контент в крупные языковые модели и записывает переведенные файлы обратно в ваш проект.
О данном руководстве
Это руководство объясняет, как настроить Lingo.dev CLI в приложении Laravel. Вы узнаете, как создать проект Laravel с поддержкой локализации, настроить процесс перевода и реализовать переключение языков.
Шаг 1. Настройка проекта Laravel
-
Установите PHP и Composer:
/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
-
Установите Laravel глобально:
composer global require laravel/installer
-
Создайте новый проект Laravel:
laravel new example-app
При появлении запроса:
- Выберите "None" для типа проекта
- Выберите "SQLite" для базы данных
-
Перейдите в директорию проекта:
cd example-app
Шаг 2. Создание исходного контента
-
Опубликуйте стандартные языковые файлы Laravel:
php artisan lang:publish
Это создаст директорию
lang/en
с файлами перевода, такими какlang/en/auth.php
.
Шаг 3. Настройка CLI
В корневой директории проекта создайте файл i18n.json
:
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": 1.8,
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"php": {
"include": ["lang/[locale]/*.php"]
}
}
}
Этот файл определяет:
- файлы, которые должен переводить Lingo.dev CLI
- языки для перевода
В данном случае конфигурация переводит PHP-файлы с английского на испанский.
Важно отметить, что:
[locale]
— это плейсхолдер, который заменяется во время выполнения. Он гарантирует, что контент считывается из одного места (например,lang/en/auth.php
) и записывается в другое место (например,lang/es/auth.php
).- Lingo.dev CLI переведет все PHP-файлы в языковой директории, соответствующие этому шаблону.
Чтобы узнать больше, см. конфигурация i18n.json.
Шаг 4. Переведите контент
-
Войдите в Lingo.dev через CLI:
npx lingo.dev@latest login
-
Запустите процесс перевода:
npx lingo.dev@latest run
CLI создаст директорию
lang/es/
для хранения переведенного контента и файлi18n.lock
для отслеживания переведенного (чтобы избежать ненужных повторных переводов).
Шаг 5. Используйте переводы
-
Создайте middleware для установки локали из маршрута:
php artisan make:middleware SetLocaleFromRoute
-
Обновите сгенерированный файл
app/Http/Middleware/SetLocaleFromRoute.php
:<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; use Symfony\Component\HttpFoundation\Response; class SetLocaleFromRoute { /** * Обрабатывает входящий запрос. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { // 'locale' берется из параметра маршрута {locale} if ($locale = $request->route('locale')) { App::setLocale($locale); // устанавливает локаль для этого запроса } return $next($request); } }
-
Зарегистрируйте middleware в
bootstrap/app.php
:<?php use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; use App\Http\Middleware\SetLocaleFromRoute; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'setLocale' => SetLocaleFromRoute::class, ]); }) ->withExceptions(function (Exceptions $exceptions): void { // })->create();
-
Настройте маршруты с префиксами локалей в
routes/web.php
:<?php use Illuminate\Support\Facades\Route; Route::redirect('/', '/en'); // по умолчанию английский Route::prefix('{locale}') ->whereIn('locale', ['en', 'es']) ->middleware('setLocale') ->group(function () { Route::get('/', function () { return view('welcome'); })->name('home'); });
-
Используйте функцию
__
для отображения локализованного контента в ваших представлениях:<!DOCTYPE html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>{{ config('app.name', 'Laravel') }}</title> </head> <body> <nav> <a href="{{ route('home', ['locale' => 'en']) }}" class="underline mr-4">English</a> <a href="{{ route('home', ['locale' => 'es']) }}" class="underline">Español</a> </nav> <p class="mb-6">{{ __('auth.throttle') }}</p> </body> </html>
-
Запустите сервер разработки:
npm install npm run build composer run dev
-
Перейдите по следующим URL-адресам:
- http://localhost:8000/en для контента на английском
- http://localhost:8000/es для контента на испанском