Laravel

AI-перевод для Laravel с помощью Lingo.dev CLI

Что такое Laravel?

Laravel — это PHP-фреймворк для веб-приложений с выразительным и элегантным синтаксисом. Он предоставляет встроенные функции для маршрутизации, аутентификации, сессий и кэширования, что позволяет создавать современные веб-приложения.

Что такое Lingo.dev CLI?

Lingo.dev — это платформа перевода на основе ИИ. Lingo.dev CLI считывает исходные файлы, отправляет переводимый контент в крупные языковые модели и записывает переведенные файлы обратно в ваш проект.

О данном руководстве

Это руководство объясняет, как настроить Lingo.dev CLI в приложении Laravel. Вы узнаете, как создать проект Laravel с поддержкой локализации, настроить процесс перевода и реализовать переключение языков.

Шаг 1. Настройка проекта Laravel

  1. Установите PHP и Composer:

    /bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.4)"
    
  2. Установите Laravel глобально:

    composer global require laravel/installer
    
  3. Создайте новый проект Laravel:

    laravel new example-app
    

    При появлении запроса:

    • Выберите "None" для типа проекта
    • Выберите "SQLite" для базы данных
  4. Перейдите в директорию проекта:

    cd example-app
    

Шаг 2. Создание исходного контента

  1. Опубликуйте стандартные языковые файлы 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. Переведите контент

  1. Зарегистрируйтесь в Lingo.dev.

  2. Войдите в Lingo.dev через CLI:

    npx lingo.dev@latest login
    
  3. Запустите процесс перевода:

    npx lingo.dev@latest run
    

    CLI создаст директорию lang/es/ для хранения переведенного контента и файл i18n.lock для отслеживания переведенного (чтобы избежать ненужных повторных переводов).

Шаг 5. Используйте переводы

  1. Создайте middleware для установки локали из маршрута:

    php artisan make:middleware SetLocaleFromRoute
    
  2. Обновите сгенерированный файл 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);
        }
    }
    
  3. Зарегистрируйте 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();
    
  4. Настройте маршруты с префиксами локалей в 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');
        });
    
  5. Используйте функцию __ для отображения локализованного контента в ваших представлениях:

    <!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>
    
  6. Запустите сервер разработки:

    npm install
    npm run build
    composer run dev
    
  7. Перейдите по следующим URL-адресам: