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'은 {locale} 라우트 파라미터에서 가져옵니다 if ($locale = $request->route('locale')) { App::setLocale($locale); // 이 요청에 대한 로케일 설정 } 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'); // 기본값은 영어 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