
Laravel i18n:国際化・ローカリゼーション完全ガイド
最初のロケールファイルから本番環境まで。Laravel の翻訳システム、複数形処理、JSON フォールバックの不具合修正、地域バリアント向けのスマートなロケールフォールバックチェーンを解説します。
Laravel の翻訳システムを理解する
Laravel には、PHP 配列と JSON の 2 形式に対応する翻訳システムが組み込まれています。PHP ファイルは機能別に整理したネストキー(auth.failed、validation.required)を使用します。JSON ファイルは原文をキーとして使用するためシンプルですが、入れ子には対応しません。
composer create-project laravel/laravel my-app
cd my-app
# Laravel includes i18n out of the box
# No extra packages needed for basic usageロケール設定
config/app.php で、アプリケーションのデフォルトロケールとフォールバックロケールを設定します。フォールバックロケールは、有効なロケールに翻訳キーがない場合に使用されます。アプリケーションの対応ロケールを構成し、ユーザーが選んだロケールを検出・設定するミドルウェアを追加します。
// config/app.php
return [
'locale' => 'en', // Default locale
'fallback_locale' => 'en', // Fallback when key is missing
'faker_locale' => 'en_US',
// Available locales (for your language switcher)
'available_locales' => ['en', 'de', 'ja', 'es', 'fr', 'pt-BR'],
];// app/Http/Middleware/SetLocale.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class SetLocale
{
public function handle(Request $request, Closure $next)
{
$locale = $request->segment(1); // e.g. /de/about
if (in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return $next($request);
}
}翻訳関数の使用
Laravel で文字列を翻訳する方法は、__() ヘルパー関数(推奨)、trans() 関数、Blade の @lang ディレクティブの 3 つです。いずれも翻訳キーと、任意の置換パラメーターを受け取ります。PHP コードと Blade テンプレートでは __()、HTML のエスケープが不要な Blade では @lang を使用します。
// lang/en/messages.php
return [
'welcome' => 'Welcome to our application',
'greeting' => 'Hello, :name!',
'nav' => [
'home' => 'Home',
'about' => 'About',
'settings' => 'Settings',
],
];
// lang/de/messages.php
return [
'welcome' => 'Willkommen in unserer Anwendung',
'greeting' => 'Hallo, :name!',
'nav' => [
'home' => 'Startseite',
'about' => 'Über uns',
'settings' => 'Einstellungen',
],
];複数形の処理
Laravel は、パイプ区切りの複数形式構文を使用します。最も単純な形式は 'apples' => 'There is one apple|There are many apples' です。範囲を明示する場合は 'apples' => '{0} No apples|{1} One apple|[2,*] :count apples' を使用します。trans_choice() ヘルパーまたは Str::plural() が、件数に基づいて適切な形式を選択します。
// lang/en.json
{
"Welcome back!": "Welcome back!",
"You have :count new notifications": "You have :count new notifications",
"Copyright :year :company": "Copyright :year :company"
}
// lang/de.json
{
"Welcome back!": "Willkommen zurück!",
"You have :count new notifications": "Sie haben :count neue Benachrichtigungen",
"Copyright :year :company": "Copyright :year :company"
}ロケールフォールバックチェーンの追加
Laravel 組み込みのフォールバックは、有効なロケールから fallback_locale へ直接切り替わり、中間段階がありません。そのため、pt-BR でキーが欠落すると、利用可能な pt-PT 翻訳ではなく英語が表示されます。laravel-locale-chain は、読み込み時に構成可能なフォールバックチェーンから翻訳をディープマージし、この問題を解決します。
{{-- Simple translation --}}
<h1>{{ __('messages.welcome') }}</h1>
{{-- With variables --}}
<p>{{ __('messages.greeting', ['name' => $user->name]) }}</p>
{{-- Using @lang directive --}}
<h2>@lang('messages.nav.home')</h2>
{{-- JSON translations (use the string itself as key) --}}
<p>{{ __('Welcome back!') }}</p>
{{-- Pluralization --}}
{{ trans_choice('{0} No items|{1} One item|[2,*] :count items', $count) }}
{{-- Inside Blade components --}}
<x-button>{{ __('messages.nav.settings') }}</x-button>翻訳の自動化
Laravel の i18n 設定が完了したら、AI でロケールファイルを翻訳します。AI アシスタントに翻訳元ロケールファイルを指定するか、CI/CD パイプラインで i18n Agent CLI を使用します。PHP と JSON の両翻訳ファイルに対応しています。
// Install locale chain package
composer require i18n-agent/laravel-locale-chain
// config/locale-chain.php
return [
'chains' => [
'pt-BR' => ['pt-BR', 'pt', 'en'],
'zh-Hant-TW' => ['zh-Hant-TW', 'zh-Hant', 'zh', 'en'],
'es-419' => ['es-419', 'es', 'en'],
],
];
// In AppServiceProvider::boot()
use I18nAgent\LocaleChain\LocaleChainServiceProvider;
// The package automatically deep-merges translations
// across the chain: pt-BR -> pt -> enよくある落とし穴
単数形/複数形ロジックのハードコード
JSON 翻訳がフォールバックしない
優先順位を理解せず PHP と JSON を混在させる
i18n Agent を今すぐ試す
翻訳ファイルをここにドロップ
JSON, YAML, PO, XML, CSV, Markdown, Properties
またはクリックしてファイルを選択
翻訳先言語