Laravel
Lingo.dev CLIによるLaravelのAI翻訳
Laravelとは?
Laravelは、表現力豊かでエレガントな構文を持つPHPウェブアプリケーションフレームワークです。ルーティング、認証、セッション、キャッシュなどの組み込み機能を提供し、最新のウェブアプリケーションを構築できます。
Lingo.dev CLIとは?
Lingo.devはAI駆動の翻訳プラットフォームです。Lingo.dev CLIはソースファイルを読み取り、翻訳可能なコンテンツを大規模言語モデルに送信し、翻訳されたファイルをプロジェクトに書き戻します。
このガイドについて
このガイドでは、LaravelアプリケーションでLingo.dev CLIをセットアップする方法を説明します。ローカライゼーションをサポートする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/auth.php
のような翻訳ファイルを含むlang/en
ディレクトリが作成されます。
ステップ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. コンテンツを翻訳する
-
CLIを通じてLingo.devにログインします:
npx lingo.dev@latest login
-
翻訳パイプラインを実行します:
npx lingo.dev@latest run
CLIは翻訳されたコンテンツを保存するための
lang/es/
ディレクトリと、翻訳済みの内容を追跡するためのi18n.lock
ファイル(不要な再翻訳を防ぐため)を作成します。
ステップ 5. 翻訳を使用する
-
ルートからロケールを設定するミドルウェアを作成します:
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 { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { // 'locale' comes from the {locale} route parameter if ($locale = $request->route('locale')) { App::setLocale($locale); // sets the locale for this request } return $next($request); } }
-
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'); // default to English 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