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.10",
"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 runCLIは翻訳されたコンテンツを保存するための
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